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