/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: 2016-06-03 17:27:03 UTC
  • Revision ID: teddy@recompile.se-20160603172703-mc6tjor6rhq4xy74
mandos: Bug fix: Do multiprocessing cleanup correctly on exit

* mandos (main): Save module "multiprocessing" and open file "wnull"
                 as scope variables accessible by function cleanup(),
                 since the module and global variable may not be
                 accessible when the cleanup() function is run as
                 scheduled by atexit().

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
WARN:=-O -Wall -Wextra -Wdouble-promotion -Wformat=2 -Winit-self \
 
1
WARN=-O -Wall -Wextra -Wdouble-promotion -Wformat=2 -Winit-self \
2
2
        -Wmissing-include-dirs -Wswitch-default -Wswitch-enum \
3
3
        -Wunused -Wuninitialized -Wstrict-overflow=5 \
4
4
        -Wsuggest-attribute=pure -Wsuggest-attribute=const \
10
10
        -Wmissing-format-attribute -Wnormalized=nfc -Wpacked \
11
11
        -Wredundant-decls -Wnested-externs -Winline -Wvla \
12
12
        -Wvolatile-register-var -Woverlength-strings
13
 
 
14
 
#DEBUG:=-ggdb3 -fsanitize=address $(SANITIZE)
15
 
## Check which sanitizing options can be used
16
 
#SANITIZE:=$(foreach option,$(ALL_SANITIZE_OPTIONS),$(shell \
17
 
#       echo 'int main(){}' | $(CC) --language=c $(option) \
18
 
#       /dev/stdin -o /dev/null >/dev/null 2>&1 && echo $(option)))
 
13
#DEBUG=-ggdb3
 
14
# For info about _FORTIFY_SOURCE, see feature_test_macros(7)
 
15
# and <http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html>.
 
16
FORTIFY=-D_FORTIFY_SOURCE=2 -fstack-protector-all -fPIC
19
17
# <https://developerblog.redhat.com/2014/10/16/gcc-undefined-behavior-sanitizer-ubsan/>
20
 
ALL_SANITIZE_OPTIONS:=-fsanitize=leak -fsanitize=undefined \
 
18
ALL_SANITIZE_OPTIONS:=-fsanitize=address -fsanitize=undefined \
21
19
        -fsanitize=shift -fsanitize=integer-divide-by-zero \
22
20
        -fsanitize=unreachable -fsanitize=vla-bound -fsanitize=null \
23
21
        -fsanitize=return -fsanitize=signed-integer-overflow \
25
23
        -fsanitize=object-size -fsanitize=float-divide-by-zero \
26
24
        -fsanitize=float-cast-overflow -fsanitize=nonnull-attribute \
27
25
        -fsanitize=returns-nonnull-attribute -fsanitize=bool \
28
 
        -fsanitize=enum -fsanitize-address-use-after-scope
29
 
 
30
 
# For info about _FORTIFY_SOURCE, see feature_test_macros(7)
31
 
# and <https://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html>.
32
 
FORTIFY:=-fstack-protector-all -fPIC
33
 
CPPFLAGS+=-D_FORTIFY_SOURCE=3
34
 
LINK_FORTIFY_LD:=-z relro -z now
35
 
LINK_FORTIFY:=
 
26
        -fsanitize=enum
 
27
# Check which sanitizing options can be used
 
28
SANITIZE:=$(foreach option,$(ALL_SANITIZE_OPTIONS),$(shell \
 
29
        echo 'int main(){}' | $(CC) --language=c $(option) /dev/stdin \
 
30
        -o /dev/null >/dev/null 2>&1 && echo $(option)))
 
31
LINK_FORTIFY_LD=-z relro -z now
 
32
LINK_FORTIFY=
36
33
 
37
34
# If BROKEN_PIE is set, do not build with -pie
38
35
ifndef BROKEN_PIE
40
37
LINK_FORTIFY += -pie
41
38
endif
42
39
#COVERAGE=--coverage
43
 
OPTIMIZE:=-Os -fno-strict-aliasing
44
 
LANGUAGE:=-std=gnu11
45
 
CPPFLAGS+=-D_FILE_OFFSET_BITS=64
46
 
htmldir:=man
47
 
version:=1.8.16
48
 
SED:=sed
49
 
PKG_CONFIG?=pkg-config
50
 
 
51
 
USER:=$(firstword $(subst :, ,$(shell getent passwd _mandos \
52
 
        || getent passwd nobody || echo 65534)))
53
 
GROUP:=$(firstword $(subst :, ,$(shell getent group _mandos \
54
 
        || getent group nogroup || echo 65534)))
55
 
 
56
 
LINUXVERSION:=$(shell uname --kernel-release)
 
40
OPTIMIZE=-Os -fno-strict-aliasing
 
41
LANGUAGE=-std=gnu11
 
42
htmldir=man
 
43
version=1.7.7
 
44
SED=sed
 
45
 
 
46
USER=$(firstword $(subst :, ,$(shell getent passwd _mandos || getent passwd nobody || echo 65534)))
 
47
GROUP=$(firstword $(subst :, ,$(shell getent group _mandos || getent group nogroup || echo 65534)))
57
48
 
58
49
## Use these settings for a traditional /usr/local install
59
 
# PREFIX:=$(DESTDIR)/usr/local
60
 
# CONFDIR:=$(DESTDIR)/etc/mandos
61
 
# KEYDIR:=$(DESTDIR)/etc/mandos/keys
62
 
# MANDIR:=$(PREFIX)/man
63
 
# INITRAMFSTOOLS:=$(DESTDIR)/etc/initramfs-tools
64
 
# DRACUTMODULE:=$(DESTDIR)/usr/lib/dracut/modules.d/90mandos
65
 
# STATEDIR:=$(DESTDIR)/var/lib/mandos
66
 
# LIBDIR:=$(PREFIX)/lib
 
50
# PREFIX=$(DESTDIR)/usr/local
 
51
# CONFDIR=$(DESTDIR)/etc/mandos
 
52
# KEYDIR=$(DESTDIR)/etc/mandos/keys
 
53
# MANDIR=$(PREFIX)/man
 
54
# INITRAMFSTOOLS=$(DESTDIR)/etc/initramfs-tools
 
55
# STATEDIR=$(DESTDIR)/var/lib/mandos
 
56
# LIBDIR=$(PREFIX)/lib
67
57
##
68
58
 
69
59
## These settings are for a package-type install
70
 
PREFIX:=$(DESTDIR)/usr
71
 
CONFDIR:=$(DESTDIR)/etc/mandos
72
 
KEYDIR:=$(DESTDIR)/etc/keys/mandos
73
 
MANDIR:=$(PREFIX)/share/man
74
 
INITRAMFSTOOLS:=$(DESTDIR)/usr/share/initramfs-tools
75
 
DRACUTMODULE:=$(DESTDIR)/usr/lib/dracut/modules.d/90mandos
76
 
STATEDIR:=$(DESTDIR)/var/lib/mandos
77
 
LIBDIR:=$(shell \
 
60
PREFIX=$(DESTDIR)/usr
 
61
CONFDIR=$(DESTDIR)/etc/mandos
 
62
KEYDIR=$(DESTDIR)/etc/keys/mandos
 
63
MANDIR=$(PREFIX)/share/man
 
64
INITRAMFSTOOLS=$(DESTDIR)/usr/share/initramfs-tools
 
65
STATEDIR=$(DESTDIR)/var/lib/mandos
 
66
LIBDIR=$(shell \
78
67
        for d in \
79
 
        "/usr/lib/`dpkg-architecture \
80
 
                        -qDEB_HOST_MULTIARCH 2>/dev/null`" \
 
68
        "/usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null`" \
81
69
        "`rpm --eval='%{_libdir}' 2>/dev/null`" /usr/lib; do \
82
70
                if [ -d "$$d" -a "$$d" = "$${d%/}" ]; then \
83
71
                        echo "$(DESTDIR)$$d"; \
86
74
        done)
87
75
##
88
76
 
89
 
SYSTEMD:=$(DESTDIR)$(shell $(PKG_CONFIG) systemd \
90
 
                        --variable=systemdsystemunitdir)
91
 
TMPFILES:=$(DESTDIR)$(shell $(PKG_CONFIG) systemd \
92
 
                        --variable=tmpfilesdir)
93
 
SYSUSERS:=$(DESTDIR)$(shell $(PKG_CONFIG) systemd \
94
 
                        --variable=sysusersdir)
 
77
SYSTEMD=$(DESTDIR)$(shell pkg-config systemd --variable=systemdsystemunitdir)
 
78
TMPFILES=$(DESTDIR)$(shell pkg-config systemd --variable=tmpfilesdir)
95
79
 
96
 
GNUTLS_CFLAGS:=$(shell $(PKG_CONFIG) --cflags-only-I gnutls)
97
 
GNUTLS_LIBS:=$(shell $(PKG_CONFIG) --libs gnutls)
98
 
AVAHI_CFLAGS:=$(shell $(PKG_CONFIG) --cflags-only-I avahi-core)
99
 
AVAHI_LIBS:=$(shell $(PKG_CONFIG) --libs avahi-core)
100
 
GPGME_CFLAGS:=$(shell $(PKG_CONFIG) --cflags-only-I gpgme 2>/dev/null \
101
 
        || gpgme-config --cflags; getconf LFS_CFLAGS)
102
 
GPGME_LIBS:=$(shell $(PKG_CONFIG) --libs gpgme 2>/dev/null \
103
 
        || gpgme-config --libs; getconf LFS_LIBS; \
 
80
GNUTLS_CFLAGS=$(shell pkg-config --cflags-only-I gnutls)
 
81
GNUTLS_LIBS=$(shell pkg-config --libs gnutls)
 
82
AVAHI_CFLAGS=$(shell pkg-config --cflags-only-I avahi-core)
 
83
AVAHI_LIBS=$(shell pkg-config --libs avahi-core)
 
84
GPGME_CFLAGS=$(shell gpgme-config --cflags; getconf LFS_CFLAGS)
 
85
GPGME_LIBS=$(shell gpgme-config --libs; getconf LFS_LIBS; \
104
86
        getconf LFS_LDFLAGS)
105
 
LIBNL3_CFLAGS:=$(shell $(PKG_CONFIG) --cflags-only-I libnl-route-3.0)
106
 
LIBNL3_LIBS:=$(shell $(PKG_CONFIG) --libs libnl-route-3.0)
107
 
GLIB_CFLAGS:=$(shell $(PKG_CONFIG) --cflags glib-2.0)
108
 
GLIB_LIBS:=$(shell $(PKG_CONFIG) --libs glib-2.0)
 
87
LIBNL3_CFLAGS=$(shell pkg-config --cflags-only-I libnl-route-3.0)
 
88
LIBNL3_LIBS=$(shell pkg-config --libs libnl-route-3.0)
109
89
 
110
90
# Do not change these two
111
 
CFLAGS+=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) \
112
 
        $(LANGUAGE) -DVERSION='"$(version)"'
113
 
LDFLAGS+=-Xlinker --as-needed $(COVERAGE) $(LINK_FORTIFY) $(strip \
114
 
        ) $(foreach flag,$(LINK_FORTIFY_LD),-Xlinker $(flag))
 
91
CFLAGS+=$(WARN) $(DEBUG) $(FORTIFY) $(SANITIZE) $(COVERAGE) \
 
92
        $(OPTIMIZE) $(LANGUAGE) $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) \
 
93
        $(GPGME_CFLAGS) -DVERSION='"$(version)"'
 
94
LDFLAGS+=-Xlinker --as-needed $(COVERAGE) $(LINK_FORTIFY) $(foreach flag,$(LINK_FORTIFY_LD),-Xlinker $(flag))
115
95
 
116
96
# Commands to format a DocBook <refentry> document into a manual page
117
97
DOCBOOKTOMAN=$(strip cd $(dir $<); xsltproc --nonet --xinclude \
123
103
        /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
124
104
        $(notdir $<); \
125
105
        if locale --all 2>/dev/null | grep --regexp='^en_US\.utf8$$' \
126
 
        && command -v man >/dev/null; then LANG=en_US.UTF-8 \
127
 
        MANWIDTH=80 man --warnings --encoding=UTF-8 --local-file \
128
 
        $(notdir $@); fi >/dev/null)
 
106
        && type man 2>/dev/null; then LANG=en_US.UTF-8 MANWIDTH=80 \
 
107
        man --warnings --encoding=UTF-8 --local-file $(notdir $@); \
 
108
        fi >/dev/null)
129
109
 
130
110
DOCBOOKTOHTML=$(strip xsltproc --nonet --xinclude \
131
111
        --param make.year.ranges                1 \
137
117
        /usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl \
138
118
        $<; $(HTMLPOST) $@)
139
119
# Fix citerefentry links
140
 
HTMLPOST:=$(SED) --in-place \
 
120
HTMLPOST=$(SED) --in-place \
141
121
        --expression='s/\(<a class="citerefentry" href="\)\("><span class="citerefentry"><span class="refentrytitle">\)\([^<]*\)\(<\/span>(\)\([^)]*\)\()<\/span><\/a>\)/\1\3.\5\2\3\4\5\6/g'
142
122
 
143
 
PLUGINS:=plugins.d/password-prompt plugins.d/mandos-client \
 
123
PLUGINS=plugins.d/password-prompt plugins.d/mandos-client \
144
124
        plugins.d/usplash plugins.d/splashy plugins.d/askpass-fifo \
145
125
        plugins.d/plymouth
146
 
PLUGIN_HELPERS:=plugin-helpers/mandos-client-iprouteadddel
147
 
CPROGS:=plugin-runner dracut-module/password-agent $(PLUGINS) \
148
 
        $(PLUGIN_HELPERS)
149
 
PROGS:=mandos mandos-keygen mandos-ctl mandos-monitor $(CPROGS)
150
 
DOCS:=mandos.8 mandos-keygen.8 mandos-monitor.8 mandos-ctl.8 \
 
126
PLUGIN_HELPERS=plugin-helpers/mandos-client-iprouteadddel
 
127
CPROGS=plugin-runner $(PLUGINS) $(PLUGIN_HELPERS)
 
128
PROGS=mandos mandos-keygen mandos-ctl mandos-monitor $(CPROGS)
 
129
DOCS=mandos.8 mandos-keygen.8 mandos-monitor.8 mandos-ctl.8 \
151
130
        mandos.conf.5 mandos-clients.conf.5 plugin-runner.8mandos \
152
 
        dracut-module/password-agent.8mandos \
153
131
        plugins.d/mandos-client.8mandos \
154
132
        plugins.d/password-prompt.8mandos plugins.d/usplash.8mandos \
155
133
        plugins.d/splashy.8mandos plugins.d/askpass-fifo.8mandos \
156
134
        plugins.d/plymouth.8mandos intro.8mandos
157
135
 
158
 
htmldocs:=$(addsuffix .xhtml,$(DOCS))
159
 
 
160
 
objects:=$(addsuffix .o,$(CPROGS))
161
 
 
162
 
.PHONY: all
 
136
htmldocs=$(addsuffix .xhtml,$(DOCS))
 
137
 
 
138
objects=$(addsuffix .o,$(CPROGS))
 
139
 
163
140
all: $(PROGS) mandos.lsm
164
141
 
165
 
.PHONY: doc
166
142
doc: $(DOCS)
167
143
 
168
 
.PHONY: html
169
144
html: $(htmldocs)
170
145
 
171
146
%.5: %.xml common.ent legalnotice.xml
230
205
                overview.xml legalnotice.xml
231
206
        $(DOCBOOKTOHTML)
232
207
 
233
 
dracut-module/password-agent.8mandos: \
234
 
                dracut-module/password-agent.xml common.ent \
235
 
                overview.xml legalnotice.xml
236
 
        $(DOCBOOKTOMAN)
237
 
dracut-module/password-agent.8mandos.xhtml: \
238
 
                dracut-module/password-agent.xml common.ent \
239
 
                overview.xml legalnotice.xml
240
 
        $(DOCBOOKTOHTML)
241
 
 
242
208
plugins.d/mandos-client.8mandos: plugins.d/mandos-client.xml \
243
209
                                        common.ent \
244
210
                                        mandos-options.xml \
287
253
                --expression='s/\(mandos_\)[0-9.]\+\(\.orig\.tar\.gz\)/\1$(version)\2/' \
288
254
                $@)
289
255
 
290
 
# Need to add the GnuTLS, Avahi and GPGME libraries
291
 
plugins.d/mandos-client: CFLAGS += $(GNUTLS_CFLAGS) $(strip \
292
 
        ) $(AVAHI_CFLAGS) $(GPGME_CFLAGS)
293
 
plugins.d/mandos-client: LDLIBS += $(GNUTLS_LIBS) $(strip \
294
 
        ) $(AVAHI_LIBS) $(GPGME_LIBS)
295
 
 
296
 
# Need to add the libnl-route library
297
 
plugin-helpers/mandos-client-iprouteadddel: CFLAGS += $(LIBNL3_CFLAGS)
298
 
plugin-helpers/mandos-client-iprouteadddel: LDLIBS += $(LIBNL3_LIBS)
299
 
 
300
 
# Need to add the GLib and pthread libraries
301
 
dracut-module/password-agent: CFLAGS += $(GLIB_CFLAGS)
302
 
# Note: -lpthread is unnecessary with the GNU C library 2.34 or later
303
 
dracut-module/password-agent: LDLIBS += $(GLIB_LIBS) -lpthread
304
 
 
305
 
.PHONY: clean
 
256
plugins.d/mandos-client: plugins.d/mandos-client.c
 
257
        $(LINK.c) $^ -lrt $(GNUTLS_LIBS) $(AVAHI_LIBS) $(strip\
 
258
                ) $(GPGME_LIBS) $(LOADLIBES) $(LDLIBS) -o $@
 
259
 
 
260
plugin-helpers/mandos-client-iprouteadddel: plugin-helpers/mandos-client-iprouteadddel.c
 
261
        $(LINK.c) $(LIBNL3_CFLAGS) $^ $(LIBNL3_LIBS) $(strip\
 
262
                ) $(LOADLIBES) $(LDLIBS) -o $@
 
263
 
 
264
.PHONY : all doc html clean distclean mostlyclean maintainer-clean \
 
265
        check run-client run-server install install-html \
 
266
        install-server install-client-nokey install-client uninstall \
 
267
        uninstall-server uninstall-client purge purge-server \
 
268
        purge-client
 
269
 
306
270
clean:
307
271
        -rm --force $(CPROGS) $(objects) $(htmldocs) $(DOCS) core
308
272
 
309
 
.PHONY: distclean
310
273
distclean: clean
311
 
.PHONY: mostlyclean
312
274
mostlyclean: clean
313
 
.PHONY: maintainer-clean
314
275
maintainer-clean: clean
315
276
        -rm --force --recursive keydir confdir statedir
316
277
 
317
 
.PHONY: check
318
 
check: all
 
278
check:  all
319
279
        ./mandos --check
320
280
        ./mandos-ctl --check
321
 
        ./mandos-keygen --version
322
 
        ./plugin-runner --version
323
 
        ./plugin-helpers/mandos-client-iprouteadddel --version
324
 
        ./dracut-module/password-agent --test
325
281
 
326
282
# Run the client with a local config and key
327
 
.PHONY: run-client
328
 
run-client: all keydir/seckey.txt keydir/pubkey.txt \
329
 
                        keydir/tls-privkey.pem keydir/tls-pubkey.pem
330
 
        @echo '######################################################'
331
 
        @echo '# The following error messages are harmless and can  #'
332
 
        @echo '#  be safely ignored:                                #'
333
 
        @echo '## From plugin-runner:                               #'
334
 
        @echo '# setgid: Operation not permitted                    #'
335
 
        @echo '# setuid: Operation not permitted                    #'
336
 
        @echo '## From askpass-fifo:                                #'
337
 
        @echo '# mkfifo: Permission denied                          #'
338
 
        @echo '## From mandos-client:                               #'
339
 
        @echo '# Failed to raise privileges: Operation not permi... #'
340
 
        @echo '# Warning: network hook "*" exited with status *     #'
341
 
        @echo '# ioctl SIOCSIFFLAGS +IFF_UP: Operation not permi... #'
342
 
        @echo '# Failed to bring up interface "*": Operation not... #'
343
 
        @echo '#                                                    #'
344
 
        @echo '# (The messages are caused by not running as root,   #'
345
 
        @echo '# but you should NOT run "make run-client" as root   #'
346
 
        @echo '# unless you also unpacked and compiled Mandos as    #'
347
 
        @echo '# root, which is also NOT recommended.)              #'
348
 
        @echo '######################################################'
 
283
run-client: all keydir/seckey.txt keydir/pubkey.txt
 
284
        @echo "###################################################################"
 
285
        @echo "# The following error messages are harmless and can be safely     #"
 
286
        @echo "# ignored.  The messages are caused by not running as root, but   #"
 
287
        @echo "# you should NOT run \"make run-client\" as root unless you also    #"
 
288
        @echo "# unpacked and compiled Mandos as root, which is NOT recommended. #"
 
289
        @echo "# From plugin-runner: setgid: Operation not permitted             #"
 
290
        @echo "#                     setuid: Operation not permitted             #"
 
291
        @echo "# From askpass-fifo:  mkfifo: Permission denied                   #"
 
292
        @echo "# From mandos-client:                                             #"
 
293
        @echo "#             Failed to raise privileges: Operation not permitted #"
 
294
        @echo "#             Warning: network hook \"*\" exited with status *      #"
 
295
        @echo "###################################################################"
349
296
# We set GNOME_KEYRING_CONTROL to block pam_gnome_keyring
350
297
        ./plugin-runner --plugin-dir=plugins.d \
351
298
                --plugin-helper-dir=plugin-helpers \
352
299
                --config-file=plugin-runner.conf \
353
 
                --options-for=mandos-client:--seckey=keydir/seckey.txt,--pubkey=keydir/pubkey.txt,--tls-privkey=keydir/tls-privkey.pem,--tls-pubkey=keydir/tls-pubkey.pem,--network-hook-dir=network-hooks.d \
 
300
                --options-for=mandos-client:--seckey=keydir/seckey.txt,--pubkey=keydir/pubkey.txt,--network-hook-dir=network-hooks.d \
354
301
                --env-for=mandos-client:GNOME_KEYRING_CONTROL= \
355
302
                $(CLIENTARGS)
356
303
 
357
304
# Used by run-client
358
 
keydir/seckey.txt keydir/pubkey.txt keydir/tls-privkey.pem keydir/tls-pubkey.pem: mandos-keygen
 
305
keydir/seckey.txt keydir/pubkey.txt: mandos-keygen
359
306
        install --directory keydir
360
307
        ./mandos-keygen --dir keydir --force
361
 
        if ! [ -e keydir/tls-privkey.pem ]; then \
362
 
                install --mode=u=rw /dev/null keydir/tls-privkey.pem; \
363
 
        fi
364
 
        if ! [ -e keydir/tls-pubkey.pem ]; then \
365
 
                install --mode=u=rw /dev/null keydir/tls-pubkey.pem; \
366
 
        fi
367
308
 
368
309
# Run the server with a local config
369
 
.PHONY: run-server
370
310
run-server: confdir/mandos.conf confdir/clients.conf statedir
371
311
        ./mandos --debug --no-dbus --configdir=confdir \
372
312
                --statedir=statedir $(SERVERARGS)
375
315
confdir/mandos.conf: mandos.conf
376
316
        install --directory confdir
377
317
        install --mode=u=rw,go=r $^ $@
378
 
confdir/clients.conf: clients.conf keydir/seckey.txt keydir/tls-pubkey.pem
 
318
confdir/clients.conf: clients.conf keydir/seckey.txt
379
319
        install --directory confdir
380
320
        install --mode=u=rw $< $@
381
321
# Add a client password
383
323
statedir:
384
324
        install --directory statedir
385
325
 
386
 
.PHONY: install
387
326
install: install-server install-client-nokey
388
327
 
389
 
.PHONY: install-html
390
328
install-html: html
391
329
        install --directory $(htmldir)
392
330
        install --mode=u=rw,go=r --target-directory=$(htmldir) \
393
331
                $(htmldocs)
394
332
 
395
 
.PHONY: install-server
396
333
install-server: doc
397
334
        install --directory $(CONFDIR)
398
335
        if install --directory --mode=u=rwx --owner=$(USER) \
401
338
        elif install --directory --mode=u=rwx $(STATEDIR); then \
402
339
                chown -- $(USER):$(GROUP) $(STATEDIR) || :; \
403
340
        fi
404
 
        if [ "$(TMPFILES)" != "$(DESTDIR)" \
405
 
                        -a -d "$(TMPFILES)" ]; then \
 
341
        if [ "$(TMPFILES)" != "$(DESTDIR)" -a -d "$(TMPFILES)" ]; then \
406
342
                install --mode=u=rw,go=r tmpfiles.d-mandos.conf \
407
343
                        $(TMPFILES)/mandos.conf; \
408
344
        fi
409
 
        if [ "$(SYSUSERS)" != "$(DESTDIR)" \
410
 
                        -a -d "$(SYSUSERS)" ]; then \
411
 
                install --mode=u=rw,go=r sysusers.d-mandos.conf \
412
 
                        $(SYSUSERS)/mandos.conf; \
413
 
        fi
414
345
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
415
346
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
416
347
                mandos-ctl
445
376
        gzip --best --to-stdout intro.8mandos \
446
377
                > $(MANDIR)/man8/intro.8mandos.gz
447
378
 
448
 
.PHONY: install-client-nokey
449
379
install-client-nokey: all doc
450
380
        install --directory $(LIBDIR)/mandos $(CONFDIR)
451
381
        install --directory --mode=u=rwx $(KEYDIR) \
452
382
                $(LIBDIR)/mandos/plugins.d \
453
383
                $(LIBDIR)/mandos/plugin-helpers
454
 
        if [ "$(SYSUSERS)" != "$(DESTDIR)" \
455
 
                        -a -d "$(SYSUSERS)" ]; then \
456
 
                install --mode=u=rw,go=r sysusers.d-mandos.conf \
457
 
                        $(SYSUSERS)/mandos-client.conf; \
458
 
        fi
459
384
        if [ "$(CONFDIR)" != "$(LIBDIR)/mandos" ]; then \
460
385
                install --mode=u=rwx \
461
386
                        --directory "$(CONFDIR)/plugins.d" \
465
390
                "$(CONFDIR)/network-hooks.d"
466
391
        install --mode=u=rwx,go=rx \
467
392
                --target-directory=$(LIBDIR)/mandos plugin-runner
468
 
        install --mode=u=rwx,go=rx \
469
 
                --target-directory=$(LIBDIR)/mandos \
470
 
                mandos-to-cryptroot-unlock
471
393
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
472
394
                mandos-keygen
473
395
        install --mode=u=rwx,go=rx \
493
415
                plugin-helpers/mandos-client-iprouteadddel
494
416
        install initramfs-tools-hook \
495
417
                $(INITRAMFSTOOLS)/hooks/mandos
496
 
        install --mode=u=rw,go=r initramfs-tools-conf \
497
 
                $(INITRAMFSTOOLS)/conf.d/mandos-conf
498
 
        install --mode=u=rw,go=r initramfs-tools-conf-hook \
499
 
                $(INITRAMFSTOOLS)/conf-hooks.d/zz-mandos
 
418
        install --mode=u=rw,go=r initramfs-tools-hook-conf \
 
419
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos
500
420
        install initramfs-tools-script \
501
421
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos
502
 
        install initramfs-tools-script-stop \
503
 
                $(INITRAMFSTOOLS)/scripts/local-premount/mandos
504
 
        install --directory $(DRACUTMODULE)
505
 
        install --mode=u=rw,go=r --target-directory=$(DRACUTMODULE) \
506
 
                dracut-module/ask-password-mandos.path \
507
 
                dracut-module/ask-password-mandos.service
508
 
        install --mode=u=rwxs,go=rx \
509
 
                --target-directory=$(DRACUTMODULE) \
510
 
                dracut-module/module-setup.sh \
511
 
                dracut-module/cmdline-mandos.sh \
512
 
                dracut-module/password-agent
513
422
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
514
423
        gzip --best --to-stdout mandos-keygen.8 \
515
424
                > $(MANDIR)/man8/mandos-keygen.8.gz
527
436
                > $(MANDIR)/man8/askpass-fifo.8mandos.gz
528
437
        gzip --best --to-stdout plugins.d/plymouth.8mandos \
529
438
                > $(MANDIR)/man8/plymouth.8mandos.gz
530
 
        gzip --best --to-stdout dracut-module/password-agent.8mandos \
531
 
                > $(MANDIR)/man8/password-agent.8mandos.gz
 
439
        gzip --best --to-stdout intro.8mandos \
 
440
                > $(MANDIR)/man8/intro.8mandos.gz
532
441
 
533
 
.PHONY: install-client
534
442
install-client: install-client-nokey
535
443
# Post-installation stuff
536
444
        -$(PREFIX)/sbin/mandos-keygen --dir "$(KEYDIR)"
537
 
        if command -v update-initramfs >/dev/null; then \
538
 
            update-initramfs -k all -u; \
539
 
        elif command -v dracut >/dev/null; then \
540
 
            for initrd in $(DESTDIR)/boot/initr*-$(LINUXVERSION); do \
541
 
                if [ -w "$$initrd" ]; then \
542
 
                    chmod go-r "$$initrd"; \
543
 
                    dracut --force "$$initrd"; \
544
 
                fi; \
545
 
            done; \
546
 
        fi
 
445
        update-initramfs -k all -u
547
446
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
548
447
 
549
 
.PHONY: uninstall
550
448
uninstall: uninstall-server uninstall-client
551
449
 
552
 
.PHONY: uninstall-server
553
450
uninstall-server:
554
451
        -rm --force $(PREFIX)/sbin/mandos \
555
452
                $(PREFIX)/sbin/mandos-ctl \
562
459
        update-rc.d -f mandos remove
563
460
        -rmdir $(CONFDIR)
564
461
 
565
 
.PHONY: uninstall-client
566
462
uninstall-client:
567
463
# Refuse to uninstall client if /etc/crypttab is explicitly configured
568
464
# to use it.
579
475
                $(INITRAMFSTOOLS)/hooks/mandos \
580
476
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos \
581
477
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos \
582
 
                $(INITRAMFSTOOLS)/scripts/local-premount/mandos \
583
 
                $(DRACUTMODULE)/ask-password-mandos.path \
584
 
                $(DRACUTMODULE)/ask-password-mandos.service \
585
 
                $(DRACUTMODULE)/module-setup.sh \
586
 
                $(DRACUTMODULE)/cmdline-mandos.sh \
587
 
                $(DRACUTMODULE)/password-agent \
588
478
                $(MANDIR)/man8/mandos-keygen.8.gz \
589
479
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
590
480
                $(MANDIR)/man8/mandos-client.8mandos.gz
593
483
                $(MANDIR)/man8/splashy.8mandos.gz \
594
484
                $(MANDIR)/man8/askpass-fifo.8mandos.gz \
595
485
                $(MANDIR)/man8/plymouth.8mandos.gz \
596
 
                $(MANDIR)/man8/password-agent.8mandos.gz \
597
486
        -rmdir $(LIBDIR)/mandos/plugins.d $(CONFDIR)/plugins.d \
598
 
                 $(LIBDIR)/mandos $(CONFDIR) $(KEYDIR) $(DRACUTMODULE)
599
 
        if command -v update-initramfs >/dev/null; then \
600
 
            update-initramfs -k all -u; \
601
 
        elif command -v dracut >/dev/null; then \
602
 
            for initrd in $(DESTDIR)/boot/initr*-$(LINUXVERSION); do \
603
 
                test -w "$$initrd" && dracut --force "$$initrd"; \
604
 
            done; \
605
 
        fi
 
487
                 $(LIBDIR)/mandos $(CONFDIR) $(KEYDIR)
 
488
        update-initramfs -k all -u
606
489
 
607
 
.PHONY: purge
608
490
purge: purge-server purge-client
609
491
 
610
 
.PHONY: purge-server
611
492
purge-server: uninstall-server
612
493
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
613
494
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
618
499
                $(DESTDIR)/var/run/mandos.pid
619
500
        -rmdir $(CONFDIR)
620
501
 
621
 
.PHONY: purge-client
622
502
purge-client: uninstall-client
623
 
        -shred --remove $(KEYDIR)/seckey.txt $(KEYDIR)/tls-privkey.pem
 
503
        -shred --remove $(KEYDIR)/seckey.txt
624
504
        -rm --force $(CONFDIR)/plugin-runner.conf \
625
 
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt \
626
 
                $(KEYDIR)/tls-pubkey.txt $(KEYDIR)/tls-privkey.txt
 
505
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt
627
506
        -rmdir $(KEYDIR) $(CONFDIR)/plugins.d $(CONFDIR)