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