/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to Makefile

  • Committer: Teddy Hogeborn
  • Date: 2011-12-31 20:07:11 UTC
  • mfrom: (535.1.9 wireless-network-hook)
  • Revision ID: teddy@recompile.se-20111231200711-6dli3r8drftem57r
Merge new wireless network hook.  Fix bridge network hook to use
hardware addresses instead of interface names.  Implement and document
new "CONNECT" environment variable for network hooks.

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
        -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings \
6
6
        -Wconversion -Wstrict-prototypes -Wold-style-definition \
7
7
        -Wpacked -Wnested-externs -Winline -Wvolatile-register-var
8
 
#       -Wunreachable-code 
 
8
#       -Wunreachable-code
9
9
#DEBUG=-ggdb3
10
10
# For info about _FORTIFY_SOURCE, see
11
11
# <http://www.kernel.org/doc/man-pages/online/pages/man7/feature_test_macros.7.html>
12
12
# and <http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html>.
13
 
FORTIFY=-D_FORTIFY_SOURCE=2 -fstack-protector-all -fPIC -fPIE
14
 
LINK_FORTIFY_LD=-z relro -fPIE
15
 
LINK_FORTIFY=-pie
 
13
FORTIFY=-D_FORTIFY_SOURCE=2 -fstack-protector-all -fPIC
 
14
LINK_FORTIFY_LD=-z relro -z now
 
15
LINK_FORTIFY=
 
16
 
 
17
# If BROKEN_PIE is set, do not build with -pie
 
18
ifndef BROKEN_PIE
 
19
FORTIFY += -fPIE
 
20
LINK_FORTIFY += -pie
 
21
endif
16
22
#COVERAGE=--coverage
17
23
OPTIMIZE=-Os
18
24
LANGUAGE=-std=gnu99
19
25
htmldir=man
20
 
version=1.0.13
 
26
version=1.4.1
21
27
SED=sed
22
28
 
 
29
USER=$(firstword $(subst :, ,$(shell getent passwd _mandos || getent passwd nobody || echo 65534)))
 
30
GROUP=$(firstword $(subst :, ,$(shell getent group _mandos || getent group nobody || echo 65534)))
 
31
 
23
32
## Use these settings for a traditional /usr/local install
24
33
# PREFIX=$(DESTDIR)/usr/local
25
34
# CONFDIR=$(DESTDIR)/etc/mandos
26
35
# KEYDIR=$(DESTDIR)/etc/mandos/keys
27
36
# MANDIR=$(PREFIX)/man
28
37
# INITRAMFSTOOLS=$(DESTDIR)/etc/initramfs-tools
 
38
# STATEDIR=$(DESTDIR)/var/lib/mandos
29
39
##
30
40
 
31
41
## These settings are for a package-type install
34
44
KEYDIR=$(DESTDIR)/etc/keys/mandos
35
45
MANDIR=$(PREFIX)/share/man
36
46
INITRAMFSTOOLS=$(DESTDIR)/usr/share/initramfs-tools
 
47
STATEDIR=$(DESTDIR)/var/lib/mandos
37
48
##
38
49
 
39
50
GNUTLS_CFLAGS=$(shell pkg-config --cflags-only-I gnutls)
48
59
CFLAGS=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) \
49
60
        $(LANGUAGE) $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(GPGME_CFLAGS) \
50
61
        -DVERSION='"$(version)"'
51
 
LDFLAGS=$(COVERAGE) $(LINK_FORTIFY) $(foreach flag,$(LINK_FORTIFY_LD),-Xlinker $(flag))
 
62
LDFLAGS=-Xlinker --as-needed $(COVERAGE) $(LINK_FORTIFY) $(foreach flag,$(LINK_FORTIFY_LD),-Xlinker $(flag))
52
63
 
53
64
# Commands to format a DocBook <refentry> document into a manual page
54
 
DOCBOOKTOMAN=cd $(dir $<); xsltproc --nonet --xinclude \
 
65
DOCBOOKTOMAN=$(strip cd $(dir $<); xsltproc --nonet --xinclude \
55
66
        --param man.charmap.use.subset          0 \
56
67
        --param make.year.ranges                1 \
57
68
        --param make.single.year.ranges         1 \
59
70
        --param man.authors.section.enabled     0 \
60
71
         /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
61
72
        $(notdir $<); \
62
 
        $(MANPOST) $(notdir $@)
 
73
        $(MANPOST) $(notdir $@);\
 
74
        LANG=en_US.UTF-8 MANWIDTH=80 man --warnings --encoding=UTF-8 \
 
75
        --local-file $(notdir $@) >/dev/null)
63
76
# DocBook-to-man post-processing to fix a '\n' escape bug
64
77
MANPOST=$(SED) --in-place --expression='s,\\\\en,\\en,g;s,\\n,\\en,g'
65
78
 
66
 
DOCBOOKTOHTML=xsltproc --nonet --xinclude \
 
79
DOCBOOKTOHTML=$(strip xsltproc --nonet --xinclude \
67
80
        --param make.year.ranges                1 \
68
81
        --param make.single.year.ranges         1 \
69
82
        --param man.output.quietly              1 \
71
84
        --param citerefentry.link               1 \
72
85
        --output $@ \
73
86
        /usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl \
74
 
        $<; $(HTMLPOST) $@
 
87
        $<; $(HTMLPOST) $@)
75
88
# Fix citerefentry links
76
89
HTMLPOST=$(SED) --in-place \
77
90
        --expression='s/\(<a class="citerefentry" href="\)\("><span class="citerefentry"><span class="refentrytitle">\)\([^<]*\)\(<\/span>(\)\([^)]*\)\()<\/span><\/a>\)/\1\3.\5\2\3\4\5\6/g'
78
91
 
79
92
PLUGINS=plugins.d/password-prompt plugins.d/mandos-client \
80
 
        plugins.d/usplash plugins.d/splashy plugins.d/askpass-fifo
 
93
        plugins.d/usplash plugins.d/splashy plugins.d/askpass-fifo \
 
94
        plugins.d/plymouth
81
95
CPROGS=plugin-runner $(PLUGINS)
82
 
PROGS=mandos mandos-keygen mandos-ctl $(CPROGS)
83
 
DOCS=mandos.8 plugin-runner.8mandos mandos-keygen.8 \
 
96
PROGS=mandos mandos-keygen mandos-ctl mandos-monitor $(CPROGS)
 
97
DOCS=mandos.8 mandos-keygen.8 mandos-monitor.8 mandos-ctl.8 \
 
98
        mandos.conf.5 mandos-clients.conf.5 plugin-runner.8mandos \
84
99
        plugins.d/mandos-client.8mandos \
85
 
        plugins.d/password-prompt.8mandos mandos.conf.5 \
86
 
        plugins.d/usplash.8mandos plugins.d/splashy.8mandos \
87
 
        plugins.d/askpass-fifo.8mandos mandos-clients.conf.5
 
100
        plugins.d/password-prompt.8mandos plugins.d/usplash.8mandos \
 
101
        plugins.d/splashy.8mandos plugins.d/askpass-fifo.8mandos \
 
102
        plugins.d/plymouth.8mandos intro.8mandos
88
103
 
89
104
htmldocs=$(addsuffix .xhtml,$(DOCS))
90
105
 
111
126
%.8mandos.xhtml: %.xml common.ent legalnotice.xml
112
127
        $(DOCBOOKTOHTML)
113
128
 
 
129
intro.8mandos: intro.xml common.ent legalnotice.xml
 
130
        $(DOCBOOKTOMAN)
 
131
intro.8mandos.xhtml: intro.xml common.ent legalnotice.xml
 
132
        $(DOCBOOKTOHTML)
 
133
 
114
134
mandos.8: mandos.xml common.ent mandos-options.xml overview.xml \
115
135
                legalnotice.xml
116
136
        $(DOCBOOKTOMAN)
125
145
                 legalnotice.xml
126
146
        $(DOCBOOKTOHTML)
127
147
 
 
148
mandos-monitor.8: mandos-monitor.xml common.ent overview.xml \
 
149
                legalnotice.xml
 
150
        $(DOCBOOKTOMAN)
 
151
mandos-monitor.8.xhtml: mandos-monitor.xml common.ent overview.xml \
 
152
                 legalnotice.xml
 
153
        $(DOCBOOKTOHTML)
 
154
 
 
155
mandos-ctl.8: mandos-ctl.xml common.ent overview.xml \
 
156
                legalnotice.xml
 
157
        $(DOCBOOKTOMAN)
 
158
mandos-ctl.8.xhtml: mandos-ctl.xml common.ent overview.xml \
 
159
                 legalnotice.xml
 
160
        $(DOCBOOKTOHTML)
 
161
 
128
162
mandos.conf.5: mandos.conf.xml common.ent mandos-options.xml \
129
163
                legalnotice.xml
130
164
        $(DOCBOOKTOMAN)
152
186
 
153
187
# Update all these files with version number $(version)
154
188
common.ent: Makefile
155
 
        $(SED) --in-place \
 
189
        $(strip $(SED) --in-place \
156
190
                --expression='s/^\(<!ENTITY version "\)[^"]*">$$/\1$(version)">/' \
157
 
                $@
 
191
                $@)
158
192
 
159
193
mandos: Makefile
160
 
        $(SED) --in-place \
 
194
        $(strip $(SED) --in-place \
161
195
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
162
 
                $@
 
196
                $@)
163
197
 
164
198
mandos-keygen: Makefile
165
 
        $(SED) --in-place \
 
199
        $(strip $(SED) --in-place \
166
200
                --expression='s/^\(VERSION="\)[^"]*"$$/\1$(version)"/' \
167
 
                $@
 
201
                $@)
168
202
 
169
203
mandos-ctl: Makefile
170
 
        $(SED) --in-place \
171
 
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
172
 
                $@
 
204
        $(strip $(SED) --in-place \
 
205
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
 
206
                $@)
 
207
 
 
208
mandos-monitor: Makefile
 
209
        $(strip $(SED) --in-place \
 
210
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
 
211
                $@)
173
212
 
174
213
mandos.lsm: Makefile
175
 
        $(SED) --in-place \
 
214
        $(strip $(SED) --in-place \
176
215
                --expression='s/^\(Version:\).*/\1\t$(version)/' \
177
 
                $@
178
 
        $(SED) --in-place \
 
216
                $@)
 
217
        $(strip $(SED) --in-place \
179
218
                --expression='s/^\(Entered-date:\).*/\1\t$(shell date --rfc-3339=date --reference=Makefile)/' \
180
 
                $@
181
 
        $(SED) --in-place \
 
219
                $@)
 
220
        $(strip $(SED) --in-place \
182
221
                --expression='s/\(mandos_\)[0-9.]\+\(\.orig\.tar\.gz\)/\1$(version)\2/' \
183
 
                $@
 
222
                $@)
184
223
 
185
 
plugins.d/mandos-client: plugins.d/mandos-client.o
186
 
        $(LINK.o) $(GNUTLS_LIBS) $(AVAHI_LIBS) $(GPGME_LIBS) \
187
 
                $(COMMON) $^ $(LOADLIBES) $(LDLIBS) -o $@
 
224
plugins.d/mandos-client: plugins.d/mandos-client.c
 
225
        $(LINK.c) $^ -lrt $(GNUTLS_LIBS) $(AVAHI_LIBS) $(strip\
 
226
                ) $(GPGME_LIBS) $(LOADLIBES) $(LDLIBS) -o $@
188
227
 
189
228
.PHONY : all doc html clean distclean run-client run-server install \
190
229
        install-server install-client uninstall uninstall-server \
196
235
distclean: clean
197
236
mostlyclean: clean
198
237
maintainer-clean: clean
199
 
        -rm --force --recursive keydir confdir
 
238
        -rm --force --recursive keydir confdir statedir
200
239
 
201
240
check:  all
202
241
        ./mandos --check
203
242
 
204
243
# Run the client with a local config and key
205
244
run-client: all keydir/seckey.txt keydir/pubkey.txt
 
245
        @echo "###################################################################"
 
246
        @echo "# The following error messages are harmless and can be safely     #"
 
247
        @echo "# ignored.  The messages are caused by not running as root, but   #"
 
248
        @echo "# you should NOT run \"make run-client\" as root unless you also    #"
 
249
        @echo "# unpacked and compiled Mandos as root, which is NOT recommended. #"
 
250
        @echo "# From plugin-runner: setuid: Operation not permitted             #"
 
251
        @echo "# From askpass-fifo:  mkfifo: Permission denied                   #"
 
252
        @echo "# From mandos-client: setuid: Operation not permitted             #"
 
253
        @echo "#                     seteuid: Operation not permitted            #"
 
254
        @echo "#                     klogctl: Operation not permitted            #"
 
255
        @echo "###################################################################"
206
256
        ./plugin-runner --plugin-dir=plugins.d \
207
257
                --config-file=plugin-runner.conf \
208
 
                --options-for=mandos-client:--seckey=keydir/seckey.txt,--pubkey=keydir/pubkey.txt \
 
258
                --options-for=mandos-client:--seckey=keydir/seckey.txt,--pubkey=keydir/pubkey.txt,--network-hook-dir=network-hooks.d \
209
259
                $(CLIENTARGS)
210
260
 
211
261
# Used by run-client
215
265
 
216
266
# Run the server with a local config
217
267
run-server: confdir/mandos.conf confdir/clients.conf
218
 
        ./mandos --debug --no-dbus --configdir=confdir $(SERVERARGS)
 
268
        ./mandos --debug --no-dbus --configdir=confdir \
 
269
                --statedir=statedir $(SERVERARGS)
219
270
 
220
271
# Used by run-server
221
272
confdir/mandos.conf: mandos.conf
226
277
        install --mode=u=rw $< $@
227
278
# Add a client password
228
279
        ./mandos-keygen --dir keydir --password >> $@
 
280
statedir:
 
281
        install --directory statedir
229
282
 
230
283
install: install-server install-client-nokey
231
284
 
236
289
 
237
290
install-server: doc
238
291
        install --directory $(CONFDIR)
 
292
        install --directory --mode=u=rwx --owner=$(USER) \
 
293
                --group=$(GROUP) $(STATEDIR)
239
294
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
 
295
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
 
296
                mandos-ctl
 
297
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
 
298
                mandos-monitor
240
299
        install --mode=u=rw,go=r --target-directory=$(CONFDIR) \
241
300
                mandos.conf
242
301
        install --mode=u=rw --target-directory=$(CONFDIR) \
243
302
                clients.conf
 
303
        install --mode=u=rw,go=r dbus-mandos.conf \
 
304
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
244
305
        install --mode=u=rwx,go=rx init.d-mandos \
245
306
                $(DESTDIR)/etc/init.d/mandos
246
307
        install --mode=u=rw,go=r default-mandos \
250
311
        fi
251
312
        gzip --best --to-stdout mandos.8 \
252
313
                > $(MANDIR)/man8/mandos.8.gz
 
314
        gzip --best --to-stdout mandos-monitor.8 \
 
315
                > $(MANDIR)/man8/mandos-monitor.8.gz
 
316
        gzip --best --to-stdout mandos-ctl.8 \
 
317
                > $(MANDIR)/man8/mandos-ctl.8.gz
253
318
        gzip --best --to-stdout mandos.conf.5 \
254
319
                > $(MANDIR)/man5/mandos.conf.5.gz
255
320
        gzip --best --to-stdout mandos-clients.conf.5 \
263
328
                install --mode=u=rwx \
264
329
                        --directory "$(CONFDIR)/plugins.d"; \
265
330
        fi
 
331
        install --mode=u=rwx,go=rx --directory \
 
332
                "$(CONFDIR)/network-hooks.d"
266
333
        install --mode=u=rwx,go=rx \
267
334
                --target-directory=$(PREFIX)/lib/mandos plugin-runner
268
335
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
282
349
        install --mode=u=rwxs,go=rx \
283
350
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
284
351
                plugins.d/askpass-fifo
 
352
        install --mode=u=rwxs,go=rx \
 
353
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
354
                plugins.d/plymouth
285
355
        install initramfs-tools-hook \
286
356
                $(INITRAMFSTOOLS)/hooks/mandos
287
357
        install --mode=u=rw,go=r initramfs-tools-hook-conf \
293
363
                > $(MANDIR)/man8/mandos-keygen.8.gz
294
364
        gzip --best --to-stdout plugin-runner.8mandos \
295
365
                > $(MANDIR)/man8/plugin-runner.8mandos.gz
 
366
        gzip --best --to-stdout plugins.d/mandos-client.8mandos \
 
367
                > $(MANDIR)/man8/mandos-client.8mandos.gz
296
368
        gzip --best --to-stdout plugins.d/password-prompt.8mandos \
297
369
                > $(MANDIR)/man8/password-prompt.8mandos.gz
298
 
        gzip --best --to-stdout plugins.d/mandos-client.8mandos \
299
 
                > $(MANDIR)/man8/mandos-client.8mandos.gz
300
370
        gzip --best --to-stdout plugins.d/usplash.8mandos \
301
371
                > $(MANDIR)/man8/usplash.8mandos.gz
302
372
        gzip --best --to-stdout plugins.d/splashy.8mandos \
303
373
                > $(MANDIR)/man8/splashy.8mandos.gz
304
374
        gzip --best --to-stdout plugins.d/askpass-fifo.8mandos \
305
375
                > $(MANDIR)/man8/askpass-fifo.8mandos.gz
 
376
        gzip --best --to-stdout plugins.d/plymouth.8mandos \
 
377
                > $(MANDIR)/man8/plymouth.8mandos.gz
306
378
 
307
379
install-client: install-client-nokey
308
380
# Post-installation stuff
314
386
 
315
387
uninstall-server:
316
388
        -rm --force $(PREFIX)/sbin/mandos \
 
389
                $(PREFIX)/sbin/mandos-ctl \
 
390
                $(PREFIX)/sbin/mandos-monitor \
317
391
                $(MANDIR)/man8/mandos.8.gz \
 
392
                $(MANDIR)/man8/mandos-monitor.8.gz \
 
393
                $(MANDIR)/man8/mandos-ctl.8.gz \
318
394
                $(MANDIR)/man5/mandos.conf.5.gz \
319
395
                $(MANDIR)/man5/mandos-clients.conf.5.gz
320
396
        update-rc.d -f mandos remove
332
408
                $(PREFIX)/lib/mandos/plugins.d/usplash \
333
409
                $(PREFIX)/lib/mandos/plugins.d/splashy \
334
410
                $(PREFIX)/lib/mandos/plugins.d/askpass-fifo \
 
411
                $(PREFIX)/lib/mandos/plugins.d/plymouth \
335
412
                $(INITRAMFSTOOLS)/hooks/mandos \
336
413
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos \
337
414
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos \
 
415
                $(MANDIR)/man8/mandos-keygen.8.gz \
338
416
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
339
 
                $(MANDIR)/man8/mandos-keygen.8.gz \
 
417
                $(MANDIR)/man8/mandos-client.8mandos.gz
340
418
                $(MANDIR)/man8/password-prompt.8mandos.gz \
341
419
                $(MANDIR)/man8/usplash.8mandos.gz \
342
420
                $(MANDIR)/man8/splashy.8mandos.gz \
343
421
                $(MANDIR)/man8/askpass-fifo.8mandos.gz \
344
 
                $(MANDIR)/man8/mandos-client.8mandos.gz
 
422
                $(MANDIR)/man8/plymouth.8mandos.gz \
345
423
        -rmdir $(PREFIX)/lib/mandos/plugins.d $(CONFDIR)/plugins.d \
346
424
                 $(PREFIX)/lib/mandos $(CONFDIR) $(KEYDIR)
347
425
        update-initramfs -k all -u
350
428
 
351
429
purge-server: uninstall-server
352
430
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
 
431
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
353
432
                $(DESTDIR)/etc/default/mandos \
354
433
                $(DESTDIR)/etc/init.d/mandos \
355
434
                $(DESTDIR)/var/run/mandos.pid