/mandos/release

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

« back to all changes in this revision

Viewing changes to Makefile

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:
1
1
WARN=-O -Wall -Wformat=2 -Winit-self -Wmissing-include-dirs \
2
2
        -Wswitch-default -Wswitch-enum -Wunused-parameter \
3
 
        -Wstrict-aliasing=2 -Wextra -Wfloat-equal -Wundef -Wshadow \
 
3
        -Wstrict-aliasing=1 -Wextra -Wfloat-equal -Wundef -Wshadow \
4
4
        -Wunsafe-loop-optimizations -Wpointer-arith \
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
 
# <http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html>
12
 
FORTIFY=-D_FORTIFY_SOURCE=2 -fstack-protector-all -fPIE -pie
13
 
LINK_FORTIFY=-z relro -pie
 
11
# <http://www.kernel.org/doc/man-pages/online/pages/man7/feature_test_macros.7.html>
 
12
# and <http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html>.
 
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
14
22
#COVERAGE=--coverage
15
23
OPTIMIZE=-Os
16
24
LANGUAGE=-std=gnu99
17
25
htmldir=man
18
 
version=1.0.2
 
26
version=1.4.1
19
27
SED=sed
20
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
 
21
32
## Use these settings for a traditional /usr/local install
22
33
# PREFIX=$(DESTDIR)/usr/local
23
34
# CONFDIR=$(DESTDIR)/etc/mandos
24
35
# KEYDIR=$(DESTDIR)/etc/mandos/keys
25
36
# MANDIR=$(PREFIX)/man
26
37
# INITRAMFSTOOLS=$(DESTDIR)/etc/initramfs-tools
 
38
# STATEDIR=$(DESTDIR)/var/lib/mandos
27
39
##
28
40
 
29
41
## These settings are for a package-type install
32
44
KEYDIR=$(DESTDIR)/etc/keys/mandos
33
45
MANDIR=$(PREFIX)/share/man
34
46
INITRAMFSTOOLS=$(DESTDIR)/usr/share/initramfs-tools
 
47
STATEDIR=$(DESTDIR)/var/lib/mandos
35
48
##
36
49
 
37
 
GNUTLS_CFLAGS=$(shell libgnutls-config --cflags)
38
 
GNUTLS_LIBS=$(shell libgnutls-config --libs)
 
50
GNUTLS_CFLAGS=$(shell pkg-config --cflags-only-I gnutls)
 
51
GNUTLS_LIBS=$(shell pkg-config --libs gnutls)
39
52
AVAHI_CFLAGS=$(shell pkg-config --cflags-only-I avahi-core)
40
53
AVAHI_LIBS=$(shell pkg-config --libs avahi-core)
41
 
GPGME_CFLAGS=$(shell gpgme-config --cflags)
42
 
GPGME_LIBS=$(shell gpgme-config --libs)
 
54
GPGME_CFLAGS=$(shell gpgme-config --cflags; getconf LFS_CFLAGS)
 
55
GPGME_LIBS=$(shell gpgme-config --libs; getconf LFS_LIBS; \
 
56
        getconf LFS_LDFLAGS)
43
57
 
44
58
# Do not change these two
45
59
CFLAGS=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) \
46
60
        $(LANGUAGE) $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(GPGME_CFLAGS) \
47
61
        -DVERSION='"$(version)"'
48
 
LDFLAGS=$(COVERAGE) $(foreach flag,$(LINK_FORTIFY),-Xlinker $(flag))
 
62
LDFLAGS=-Xlinker --as-needed $(COVERAGE) $(LINK_FORTIFY) $(foreach flag,$(LINK_FORTIFY_LD),-Xlinker $(flag))
49
63
 
50
64
# Commands to format a DocBook <refentry> document into a manual page
51
 
DOCBOOKTOMAN=cd $(dir $<); xsltproc --nonet --xinclude \
 
65
DOCBOOKTOMAN=$(strip cd $(dir $<); xsltproc --nonet --xinclude \
52
66
        --param man.charmap.use.subset          0 \
53
67
        --param make.year.ranges                1 \
54
68
        --param make.single.year.ranges         1 \
56
70
        --param man.authors.section.enabled     0 \
57
71
         /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
58
72
        $(notdir $<); \
59
 
        $(MANPOST) $(notdir $@)
 
73
        $(MANPOST) $(notdir $@);\
 
74
        LANG=en_US.UTF-8 MANWIDTH=80 man --warnings --encoding=UTF-8 \
 
75
        --local-file $(notdir $@) >/dev/null)
60
76
# DocBook-to-man post-processing to fix a '\n' escape bug
61
77
MANPOST=$(SED) --in-place --expression='s,\\\\en,\\en,g;s,\\n,\\en,g'
62
78
 
63
 
DOCBOOKTOHTML=xsltproc --nonet --xinclude \
 
79
DOCBOOKTOHTML=$(strip xsltproc --nonet --xinclude \
64
80
        --param make.year.ranges                1 \
65
81
        --param make.single.year.ranges         1 \
66
82
        --param man.output.quietly              1 \
68
84
        --param citerefentry.link               1 \
69
85
        --output $@ \
70
86
        /usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl \
71
 
        $<; $(HTMLPOST) $@
 
87
        $<; $(HTMLPOST) $@)
72
88
# Fix citerefentry links
73
89
HTMLPOST=$(SED) --in-place \
74
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'
75
91
 
76
92
PLUGINS=plugins.d/password-prompt plugins.d/mandos-client \
77
 
        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
78
95
CPROGS=plugin-runner $(PLUGINS)
79
 
PROGS=mandos mandos-keygen mandos-list $(CPROGS)
80
 
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 \
81
99
        plugins.d/mandos-client.8mandos \
82
 
        plugins.d/password-prompt.8mandos mandos.conf.5 \
83
 
        plugins.d/usplash.8mandos plugins.d/splashy.8mandos \
84
 
        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
85
103
 
86
104
htmldocs=$(addsuffix .xhtml,$(DOCS))
87
105
 
108
126
%.8mandos.xhtml: %.xml common.ent legalnotice.xml
109
127
        $(DOCBOOKTOHTML)
110
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
 
111
134
mandos.8: mandos.xml common.ent mandos-options.xml overview.xml \
112
135
                legalnotice.xml
113
136
        $(DOCBOOKTOMAN)
122
145
                 legalnotice.xml
123
146
        $(DOCBOOKTOHTML)
124
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
 
125
162
mandos.conf.5: mandos.conf.xml common.ent mandos-options.xml \
126
163
                legalnotice.xml
127
164
        $(DOCBOOKTOMAN)
149
186
 
150
187
# Update all these files with version number $(version)
151
188
common.ent: Makefile
152
 
        $(SED) --in-place \
153
 
                --expression='s/^\(<ENTITY VERSION "\)[^"]*">$$/\1$(version)"/' \
154
 
                $@
 
189
        $(strip $(SED) --in-place \
 
190
                --expression='s/^\(<!ENTITY version "\)[^"]*">$$/\1$(version)">/' \
 
191
                $@)
155
192
 
156
193
mandos: Makefile
157
 
        $(SED) --in-place \
 
194
        $(strip $(SED) --in-place \
158
195
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
159
 
                $@
 
196
                $@)
160
197
 
161
198
mandos-keygen: Makefile
162
 
        $(SED) --in-place \
 
199
        $(strip $(SED) --in-place \
163
200
                --expression='s/^\(VERSION="\)[^"]*"$$/\1$(version)"/' \
164
 
                $@
165
 
 
166
 
mandos-list: Makefile
167
 
        $(SED) --in-place \
168
 
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
169
 
                $@
 
201
                $@)
 
202
 
 
203
mandos-ctl: Makefile
 
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
                $@)
170
212
 
171
213
mandos.lsm: Makefile
172
 
        $(SED) --in-place \
 
214
        $(strip $(SED) --in-place \
173
215
                --expression='s/^\(Version:\).*/\1\t$(version)/' \
174
 
                $@
175
 
        $(SED) --in-place \
 
216
                $@)
 
217
        $(strip $(SED) --in-place \
176
218
                --expression='s/^\(Entered-date:\).*/\1\t$(shell date --rfc-3339=date --reference=Makefile)/' \
177
 
                $@
 
219
                $@)
 
220
        $(strip $(SED) --in-place \
 
221
                --expression='s/\(mandos_\)[0-9.]\+\(\.orig\.tar\.gz\)/\1$(version)\2/' \
 
222
                $@)
178
223
 
179
 
plugins.d/mandos-client: plugins.d/mandos-client.o
180
 
        $(LINK.o) $(GNUTLS_LIBS) $(AVAHI_LIBS) $(GPGME_LIBS) \
181
 
                $(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 $@
182
227
 
183
228
.PHONY : all doc html clean distclean run-client run-server install \
184
229
        install-server install-client uninstall uninstall-server \
190
235
distclean: clean
191
236
mostlyclean: clean
192
237
maintainer-clean: clean
193
 
        -rm --force --recursive keydir confdir
 
238
        -rm --force --recursive keydir confdir statedir
194
239
 
195
240
check:  all
196
241
        ./mandos --check
197
242
 
198
243
# Run the client with a local config and key
199
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 "###################################################################"
200
256
        ./plugin-runner --plugin-dir=plugins.d \
201
257
                --config-file=plugin-runner.conf \
202
 
                --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 \
 
259
                $(CLIENTARGS)
203
260
 
204
261
# Used by run-client
205
262
keydir/seckey.txt keydir/pubkey.txt: mandos-keygen
208
265
 
209
266
# Run the server with a local config
210
267
run-server: confdir/mandos.conf confdir/clients.conf
211
 
        ./mandos --debug --configdir=confdir
 
268
        ./mandos --debug --no-dbus --configdir=confdir \
 
269
                --statedir=statedir $(SERVERARGS)
212
270
 
213
271
# Used by run-server
214
272
confdir/mandos.conf: mandos.conf
219
277
        install --mode=u=rw $< $@
220
278
# Add a client password
221
279
        ./mandos-keygen --dir keydir --password >> $@
 
280
statedir:
 
281
        install --directory statedir
222
282
 
223
283
install: install-server install-client-nokey
224
284
 
229
289
 
230
290
install-server: doc
231
291
        install --directory $(CONFDIR)
 
292
        install --directory --mode=u=rwx --owner=$(USER) \
 
293
                --group=$(GROUP) $(STATEDIR)
232
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
233
299
        install --mode=u=rw,go=r --target-directory=$(CONFDIR) \
234
300
                mandos.conf
235
301
        install --mode=u=rw --target-directory=$(CONFDIR) \
236
302
                clients.conf
 
303
        install --mode=u=rw,go=r dbus-mandos.conf \
 
304
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
237
305
        install --mode=u=rwx,go=rx init.d-mandos \
238
306
                $(DESTDIR)/etc/init.d/mandos
239
307
        install --mode=u=rw,go=r default-mandos \
243
311
        fi
244
312
        gzip --best --to-stdout mandos.8 \
245
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
246
318
        gzip --best --to-stdout mandos.conf.5 \
247
319
                > $(MANDIR)/man5/mandos.conf.5.gz
248
320
        gzip --best --to-stdout mandos-clients.conf.5 \
256
328
                install --mode=u=rwx \
257
329
                        --directory "$(CONFDIR)/plugins.d"; \
258
330
        fi
 
331
        install --mode=u=rwx,go=rx --directory \
 
332
                "$(CONFDIR)/network-hooks.d"
259
333
        install --mode=u=rwx,go=rx \
260
334
                --target-directory=$(PREFIX)/lib/mandos plugin-runner
261
335
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
275
349
        install --mode=u=rwxs,go=rx \
276
350
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
277
351
                plugins.d/askpass-fifo
 
352
        install --mode=u=rwxs,go=rx \
 
353
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
354
                plugins.d/plymouth
278
355
        install initramfs-tools-hook \
279
356
                $(INITRAMFSTOOLS)/hooks/mandos
280
357
        install --mode=u=rw,go=r initramfs-tools-hook-conf \
281
358
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos
282
359
        install initramfs-tools-script \
283
 
                $(INITRAMFSTOOLS)/scripts/local-top/mandos
 
360
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos
284
361
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
285
362
        gzip --best --to-stdout mandos-keygen.8 \
286
363
                > $(MANDIR)/man8/mandos-keygen.8.gz
287
364
        gzip --best --to-stdout plugin-runner.8mandos \
288
365
                > $(MANDIR)/man8/plugin-runner.8mandos.gz
 
366
        gzip --best --to-stdout plugins.d/mandos-client.8mandos \
 
367
                > $(MANDIR)/man8/mandos-client.8mandos.gz
289
368
        gzip --best --to-stdout plugins.d/password-prompt.8mandos \
290
369
                > $(MANDIR)/man8/password-prompt.8mandos.gz
291
 
        gzip --best --to-stdout plugins.d/mandos-client.8mandos \
292
 
                > $(MANDIR)/man8/mandos-client.8mandos.gz
293
370
        gzip --best --to-stdout plugins.d/usplash.8mandos \
294
371
                > $(MANDIR)/man8/usplash.8mandos.gz
295
372
        gzip --best --to-stdout plugins.d/splashy.8mandos \
296
373
                > $(MANDIR)/man8/splashy.8mandos.gz
297
374
        gzip --best --to-stdout plugins.d/askpass-fifo.8mandos \
298
375
                > $(MANDIR)/man8/askpass-fifo.8mandos.gz
 
376
        gzip --best --to-stdout plugins.d/plymouth.8mandos \
 
377
                > $(MANDIR)/man8/plymouth.8mandos.gz
299
378
 
300
379
install-client: install-client-nokey
301
380
# Post-installation stuff
307
386
 
308
387
uninstall-server:
309
388
        -rm --force $(PREFIX)/sbin/mandos \
 
389
                $(PREFIX)/sbin/mandos-ctl \
 
390
                $(PREFIX)/sbin/mandos-monitor \
310
391
                $(MANDIR)/man8/mandos.8.gz \
 
392
                $(MANDIR)/man8/mandos-monitor.8.gz \
 
393
                $(MANDIR)/man8/mandos-ctl.8.gz \
311
394
                $(MANDIR)/man5/mandos.conf.5.gz \
312
395
                $(MANDIR)/man5/mandos-clients.conf.5.gz
313
396
        update-rc.d -f mandos remove
325
408
                $(PREFIX)/lib/mandos/plugins.d/usplash \
326
409
                $(PREFIX)/lib/mandos/plugins.d/splashy \
327
410
                $(PREFIX)/lib/mandos/plugins.d/askpass-fifo \
 
411
                $(PREFIX)/lib/mandos/plugins.d/plymouth \
328
412
                $(INITRAMFSTOOLS)/hooks/mandos \
329
413
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos \
330
 
                $(INITRAMFSTOOLS)/scripts/local-top/mandos \
 
414
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos \
 
415
                $(MANDIR)/man8/mandos-keygen.8.gz \
331
416
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
332
 
                $(MANDIR)/man8/mandos-keygen.8.gz \
 
417
                $(MANDIR)/man8/mandos-client.8mandos.gz
333
418
                $(MANDIR)/man8/password-prompt.8mandos.gz \
334
419
                $(MANDIR)/man8/usplash.8mandos.gz \
335
420
                $(MANDIR)/man8/splashy.8mandos.gz \
336
421
                $(MANDIR)/man8/askpass-fifo.8mandos.gz \
337
 
                $(MANDIR)/man8/mandos-client.8mandos.gz
 
422
                $(MANDIR)/man8/plymouth.8mandos.gz \
338
423
        -rmdir $(PREFIX)/lib/mandos/plugins.d $(CONFDIR)/plugins.d \
339
424
                 $(PREFIX)/lib/mandos $(CONFDIR) $(KEYDIR)
340
425
        update-initramfs -k all -u
343
428
 
344
429
purge-server: uninstall-server
345
430
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
 
431
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
346
432
                $(DESTDIR)/etc/default/mandos \
347
433
                $(DESTDIR)/etc/init.d/mandos \
348
434
                $(DESTDIR)/var/run/mandos.pid