/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

  • Committer: Teddy Hogeborn
  • Date: 2019-07-29 16:35:53 UTC
  • mto: This revision was merged to the branch mainline in revision 384.
  • Revision ID: teddy@recompile.se-20190729163553-1i442i2cbx64c537
Make tests and man page examples match

Make the tests test_manual_page_example[1-5] match exactly what is
written in the manual page, and add comments to manual page as
reminders to keep tests and manual page examples in sync.

* mandos-ctl (Test_commands_from_options.test_manual_page_example_1):
  Remove "--verbose" option, since the manual does not have it as the
  first example, and change assertion to match.
* mandos-ctl.xml (EXAMPLE): Add comments to all examples documenting
  which test function they correspond to.  Also remove unnecessary
  quotes from option arguments in fourth example, and clarify language
  slightly in fifth example.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
WARN=-O -Wall -Wformat=2 -Winit-self -Wmissing-include-dirs \
2
 
        -Wswitch-default -Wswitch-enum -Wunused-parameter \
3
 
        -Wstrict-aliasing=1 -Wextra -Wfloat-equal -Wundef -Wshadow \
 
1
WARN:=-O -Wall -Wextra -Wdouble-promotion -Wformat=2 -Winit-self \
 
2
        -Wmissing-include-dirs -Wswitch-default -Wswitch-enum \
 
3
        -Wunused -Wuninitialized -Wstrict-overflow=5 \
 
4
        -Wsuggest-attribute=pure -Wsuggest-attribute=const \
 
5
        -Wsuggest-attribute=noreturn -Wfloat-equal -Wundef -Wshadow \
4
6
        -Wunsafe-loop-optimizations -Wpointer-arith \
5
7
        -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings \
6
 
        -Wconversion -Wstrict-prototypes -Wold-style-definition \
7
 
        -Wpacked -Wnested-externs -Winline -Wvolatile-register-var
8
 
#       -Wunreachable-code
9
 
#DEBUG=-ggdb3
10
 
# For info about _FORTIFY_SOURCE, see
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=
 
8
        -Wconversion -Wlogical-op -Waggregate-return \
 
9
        -Wstrict-prototypes -Wold-style-definition \
 
10
        -Wmissing-format-attribute -Wnormalized=nfc -Wpacked \
 
11
        -Wredundant-decls -Wnested-externs -Winline -Wvla \
 
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)))
 
19
# <https://developerblog.redhat.com/2014/10/16/gcc-undefined-behavior-sanitizer-ubsan/>
 
20
ALL_SANITIZE_OPTIONS:=-fsanitize=leak -fsanitize=undefined \
 
21
        -fsanitize=shift -fsanitize=integer-divide-by-zero \
 
22
        -fsanitize=unreachable -fsanitize=vla-bound -fsanitize=null \
 
23
        -fsanitize=return -fsanitize=signed-integer-overflow \
 
24
        -fsanitize=bounds -fsanitize=alignment \
 
25
        -fsanitize=object-size -fsanitize=float-divide-by-zero \
 
26
        -fsanitize=float-cast-overflow -fsanitize=nonnull-attribute \
 
27
        -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:=-D_FORTIFY_SOURCE=2 -fstack-protector-all -fPIC
 
33
LINK_FORTIFY_LD:=-z relro -z now
 
34
LINK_FORTIFY:=
16
35
 
17
36
# If BROKEN_PIE is set, do not build with -pie
18
37
ifndef BROKEN_PIE
20
39
LINK_FORTIFY += -pie
21
40
endif
22
41
#COVERAGE=--coverage
23
 
OPTIMIZE=-Os
24
 
LANGUAGE=-std=gnu99
25
 
htmldir=man
26
 
version=1.4.0
27
 
SED=sed
 
42
OPTIMIZE:=-Os -fno-strict-aliasing
 
43
LANGUAGE:=-std=gnu11
 
44
htmldir:=man
 
45
version:=1.8.4
 
46
SED:=sed
 
47
 
 
48
USER:=$(firstword $(subst :, ,$(shell getent passwd _mandos \
 
49
        || getent passwd nobody || echo 65534)))
 
50
GROUP:=$(firstword $(subst :, ,$(shell getent group _mandos \
 
51
        || getent group nogroup || echo 65534)))
28
52
 
29
53
## Use these settings for a traditional /usr/local install
30
 
# PREFIX=$(DESTDIR)/usr/local
31
 
# CONFDIR=$(DESTDIR)/etc/mandos
32
 
# KEYDIR=$(DESTDIR)/etc/mandos/keys
33
 
# MANDIR=$(PREFIX)/man
34
 
# INITRAMFSTOOLS=$(DESTDIR)/etc/initramfs-tools
 
54
# PREFIX:=$(DESTDIR)/usr/local
 
55
# CONFDIR:=$(DESTDIR)/etc/mandos
 
56
# KEYDIR:=$(DESTDIR)/etc/mandos/keys
 
57
# MANDIR:=$(PREFIX)/man
 
58
# INITRAMFSTOOLS:=$(DESTDIR)/etc/initramfs-tools
 
59
# DRACUTMODULE:=$(DESTDIR)/usr/lib/dracut/modules.d/90mandos
 
60
# STATEDIR:=$(DESTDIR)/var/lib/mandos
 
61
# LIBDIR:=$(PREFIX)/lib
35
62
##
36
63
 
37
64
## These settings are for a package-type install
38
 
PREFIX=$(DESTDIR)/usr
39
 
CONFDIR=$(DESTDIR)/etc/mandos
40
 
KEYDIR=$(DESTDIR)/etc/keys/mandos
41
 
MANDIR=$(PREFIX)/share/man
42
 
INITRAMFSTOOLS=$(DESTDIR)/usr/share/initramfs-tools
 
65
PREFIX:=$(DESTDIR)/usr
 
66
CONFDIR:=$(DESTDIR)/etc/mandos
 
67
KEYDIR:=$(DESTDIR)/etc/keys/mandos
 
68
MANDIR:=$(PREFIX)/share/man
 
69
INITRAMFSTOOLS:=$(DESTDIR)/usr/share/initramfs-tools
 
70
DRACUTMODULE:=$(DESTDIR)/usr/lib/dracut/modules.d/90mandos
 
71
STATEDIR:=$(DESTDIR)/var/lib/mandos
 
72
LIBDIR:=$(shell \
 
73
        for d in \
 
74
        "/usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null`" \
 
75
        "`rpm --eval='%{_libdir}' 2>/dev/null`" /usr/lib; do \
 
76
                if [ -d "$$d" -a "$$d" = "$${d%/}" ]; then \
 
77
                        echo "$(DESTDIR)$$d"; \
 
78
                        break; \
 
79
                fi; \
 
80
        done)
43
81
##
44
82
 
45
 
GNUTLS_CFLAGS=$(shell pkg-config --cflags-only-I gnutls)
46
 
GNUTLS_LIBS=$(shell pkg-config --libs gnutls)
47
 
AVAHI_CFLAGS=$(shell pkg-config --cflags-only-I avahi-core)
48
 
AVAHI_LIBS=$(shell pkg-config --libs avahi-core)
49
 
GPGME_CFLAGS=$(shell gpgme-config --cflags; getconf LFS_CFLAGS)
50
 
GPGME_LIBS=$(shell gpgme-config --libs; getconf LFS_LIBS; \
 
83
SYSTEMD:=$(DESTDIR)$(shell pkg-config systemd --variable=systemdsystemunitdir)
 
84
TMPFILES:=$(DESTDIR)$(shell pkg-config systemd --variable=tmpfilesdir)
 
85
 
 
86
GNUTLS_CFLAGS:=$(shell pkg-config --cflags-only-I gnutls)
 
87
GNUTLS_LIBS:=$(shell pkg-config --libs gnutls)
 
88
AVAHI_CFLAGS:=$(shell pkg-config --cflags-only-I avahi-core)
 
89
AVAHI_LIBS:=$(shell pkg-config --libs avahi-core)
 
90
GPGME_CFLAGS:=$(shell gpgme-config --cflags; getconf LFS_CFLAGS)
 
91
GPGME_LIBS:=$(shell gpgme-config --libs; getconf LFS_LIBS; \
51
92
        getconf LFS_LDFLAGS)
 
93
LIBNL3_CFLAGS:=$(shell pkg-config --cflags-only-I libnl-route-3.0)
 
94
LIBNL3_LIBS:=$(shell pkg-config --libs libnl-route-3.0)
 
95
GLIB_CFLAGS:=$(shell pkg-config --cflags glib-2.0)
 
96
GLIB_LIBS:=$(shell pkg-config --libs glib-2.0)
52
97
 
53
98
# Do not change these two
54
 
CFLAGS=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) \
55
 
        $(LANGUAGE) $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(GPGME_CFLAGS) \
56
 
        -DVERSION='"$(version)"'
57
 
LDFLAGS=-Xlinker --as-needed $(COVERAGE) $(LINK_FORTIFY) $(foreach flag,$(LINK_FORTIFY_LD),-Xlinker $(flag))
 
99
CFLAGS+=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) \
 
100
        $(OPTIMIZE) $(LANGUAGE) -DVERSION='"$(version)"'
 
101
LDFLAGS+=-Xlinker --as-needed $(COVERAGE) $(LINK_FORTIFY) $(strip \
 
102
        ) $(foreach flag,$(LINK_FORTIFY_LD),-Xlinker $(flag))
58
103
 
59
104
# Commands to format a DocBook <refentry> document into a manual page
60
105
DOCBOOKTOMAN=$(strip cd $(dir $<); xsltproc --nonet --xinclude \
63
108
        --param make.single.year.ranges         1 \
64
109
        --param man.output.quietly              1 \
65
110
        --param man.authors.section.enabled     0 \
66
 
         /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
 
111
        /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
67
112
        $(notdir $<); \
68
 
        $(MANPOST) $(notdir $@))
69
 
# DocBook-to-man post-processing to fix a '\n' escape bug
70
 
MANPOST=$(SED) --in-place --expression='s,\\\\en,\\en,g;s,\\n,\\en,g'
 
113
        if locale --all 2>/dev/null | grep --regexp='^en_US\.utf8$$' \
 
114
        && command -v man >/dev/null; then LANG=en_US.UTF-8 \
 
115
        MANWIDTH=80 man --warnings --encoding=UTF-8 --local-file \
 
116
        $(notdir $@); fi >/dev/null)
71
117
 
72
118
DOCBOOKTOHTML=$(strip xsltproc --nonet --xinclude \
73
119
        --param make.year.ranges                1 \
79
125
        /usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl \
80
126
        $<; $(HTMLPOST) $@)
81
127
# Fix citerefentry links
82
 
HTMLPOST=$(SED) --in-place \
 
128
HTMLPOST:=$(SED) --in-place \
83
129
        --expression='s/\(<a class="citerefentry" href="\)\("><span class="citerefentry"><span class="refentrytitle">\)\([^<]*\)\(<\/span>(\)\([^)]*\)\()<\/span><\/a>\)/\1\3.\5\2\3\4\5\6/g'
84
130
 
85
 
PLUGINS=plugins.d/password-prompt plugins.d/mandos-client \
 
131
PLUGINS:=plugins.d/password-prompt plugins.d/mandos-client \
86
132
        plugins.d/usplash plugins.d/splashy plugins.d/askpass-fifo \
87
133
        plugins.d/plymouth
88
 
CPROGS=plugin-runner $(PLUGINS)
89
 
PROGS=mandos mandos-keygen mandos-ctl mandos-monitor $(CPROGS)
90
 
DOCS=mandos.8 mandos-keygen.8 mandos-monitor.8 mandos-ctl.8 \
 
134
PLUGIN_HELPERS:=plugin-helpers/mandos-client-iprouteadddel
 
135
CPROGS:=plugin-runner dracut-module/password-agent $(PLUGINS) \
 
136
        $(PLUGIN_HELPERS)
 
137
PROGS:=mandos mandos-keygen mandos-ctl mandos-monitor $(CPROGS)
 
138
DOCS:=mandos.8 mandos-keygen.8 mandos-monitor.8 mandos-ctl.8 \
91
139
        mandos.conf.5 mandos-clients.conf.5 plugin-runner.8mandos \
 
140
        dracut-module/password-agent.8mandos \
92
141
        plugins.d/mandos-client.8mandos \
93
142
        plugins.d/password-prompt.8mandos plugins.d/usplash.8mandos \
94
143
        plugins.d/splashy.8mandos plugins.d/askpass-fifo.8mandos \
95
144
        plugins.d/plymouth.8mandos intro.8mandos
96
145
 
97
 
htmldocs=$(addsuffix .xhtml,$(DOCS))
 
146
htmldocs:=$(addsuffix .xhtml,$(DOCS))
98
147
 
99
 
objects=$(addsuffix .o,$(CPROGS))
 
148
objects:=$(addsuffix .o,$(CPROGS))
100
149
 
101
150
all: $(PROGS) mandos.lsm
102
151
 
166
215
                overview.xml legalnotice.xml
167
216
        $(DOCBOOKTOHTML)
168
217
 
 
218
dracut-module/password-agent.8mandos: \
 
219
                dracut-module/password-agent.xml common.ent \
 
220
                overview.xml legalnotice.xml
 
221
        $(DOCBOOKTOMAN)
 
222
dracut-module/password-agent.8mandos.xhtml: \
 
223
                dracut-module/password-agent.xml common.ent \
 
224
                overview.xml legalnotice.xml
 
225
        $(DOCBOOKTOHTML)
 
226
 
169
227
plugins.d/mandos-client.8mandos: plugins.d/mandos-client.xml \
170
228
                                        common.ent \
171
229
                                        mandos-options.xml \
214
272
                --expression='s/\(mandos_\)[0-9.]\+\(\.orig\.tar\.gz\)/\1$(version)\2/' \
215
273
                $@)
216
274
 
 
275
# Need to add the GnuTLS, Avahi and GPGME libraries
217
276
plugins.d/mandos-client: plugins.d/mandos-client.c
218
 
        $(LINK.c) $^ -lrt $(GNUTLS_LIBS) $(AVAHI_LIBS) $(strip\
219
 
                ) $(GPGME_LIBS) $(LOADLIBES) $(LDLIBS) -o $@
220
 
 
221
 
.PHONY : all doc html clean distclean run-client run-server install \
222
 
        install-server install-client uninstall uninstall-server \
223
 
        uninstall-client purge purge-server purge-client
 
277
        $(LINK.c) $^ $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(strip\
 
278
                ) $(GPGME_CFLAGS) $(GNUTLS_LIBS) $(strip\
 
279
                ) $(AVAHI_LIBS) $(GPGME_LIBS) $(LOADLIBES) $(strip\
 
280
                ) $(LDLIBS) -o $@
 
281
 
 
282
# Need to add the libnl-route library
 
283
plugin-helpers/mandos-client-iprouteadddel: plugin-helpers/mandos-client-iprouteadddel.c
 
284
        $(LINK.c) $(LIBNL3_CFLAGS) $^ $(LIBNL3_LIBS) $(strip\
 
285
                ) $(LOADLIBES) $(LDLIBS) -o $@
 
286
 
 
287
# Need to add the GLib and pthread libraries
 
288
dracut-module/password-agent: dracut-module/password-agent.c
 
289
        $(LINK.c) $(GLIB_CFLAGS) $^ $(GLIB_LIBS) -lpthread $(strip\
 
290
                ) $(LOADLIBES) $(LDLIBS) -o $@
 
291
 
 
292
.PHONY : all doc html clean distclean mostlyclean maintainer-clean \
 
293
        check run-client run-server install install-html \
 
294
        install-server install-client-nokey install-client uninstall \
 
295
        uninstall-server uninstall-client purge purge-server \
 
296
        purge-client
224
297
 
225
298
clean:
226
299
        -rm --force $(CPROGS) $(objects) $(htmldocs) $(DOCS) core
228
301
distclean: clean
229
302
mostlyclean: clean
230
303
maintainer-clean: clean
231
 
        -rm --force --recursive keydir confdir
 
304
        -rm --force --recursive keydir confdir statedir
232
305
 
233
 
check:  all
 
306
check: all
234
307
        ./mandos --check
 
308
        ./mandos-ctl --check
 
309
        ./mandos-keygen --version
 
310
        ./plugin-runner --version
 
311
        ./plugin-helpers/mandos-client-iprouteadddel --version
 
312
        ./dracut-module/password-agent --test
235
313
 
236
314
# Run the client with a local config and key
237
 
run-client: all keydir/seckey.txt keydir/pubkey.txt
 
315
run-client: all keydir/seckey.txt keydir/pubkey.txt keydir/tls-privkey.pem keydir/tls-pubkey.pem
238
316
        @echo "###################################################################"
239
317
        @echo "# The following error messages are harmless and can be safely     #"
240
 
        @echo "# ignored.  The messages are caused by not running as root, but   #"
241
 
        @echo "# you should NOT run \"make run-client\" as root unless you also    #"
242
 
        @echo "# unpacked and compiled Mandos as root, which is NOT recommended. #"
243
 
        @echo "# From plugin-runner: setuid: Operation not permitted             #"
 
318
        @echo "# ignored:                                                        #"
 
319
        @echo "# From plugin-runner: setgid: Operation not permitted             #"
 
320
        @echo "#                     setuid: Operation not permitted             #"
244
321
        @echo "# From askpass-fifo:  mkfifo: Permission denied                   #"
245
 
        @echo "# From mandos-client: setuid: Operation not permitted             #"
246
 
        @echo "#                     seteuid: Operation not permitted            #"
247
 
        @echo "#                     klogctl: Operation not permitted            #"
 
322
        @echo "# From mandos-client:                                             #"
 
323
        @echo "#             Failed to raise privileges: Operation not permitted #"
 
324
        @echo "#             Warning: network hook \"*\" exited with status *      #"
 
325
        @echo "#                                                                 #"
 
326
        @echo "# (The messages are caused by not running as root, but you should #"
 
327
        @echo "# NOT run \"make run-client\" as root unless you also unpacked and  #"
 
328
        @echo "# compiled Mandos as root, which is also NOT recommended.)        #"
248
329
        @echo "###################################################################"
 
330
# We set GNOME_KEYRING_CONTROL to block pam_gnome_keyring
249
331
        ./plugin-runner --plugin-dir=plugins.d \
 
332
                --plugin-helper-dir=plugin-helpers \
250
333
                --config-file=plugin-runner.conf \
251
 
                --options-for=mandos-client:--seckey=keydir/seckey.txt,--pubkey=keydir/pubkey.txt \
 
334
                --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 \
 
335
                --env-for=mandos-client:GNOME_KEYRING_CONTROL= \
252
336
                $(CLIENTARGS)
253
337
 
254
338
# Used by run-client
255
 
keydir/seckey.txt keydir/pubkey.txt: mandos-keygen
 
339
keydir/seckey.txt keydir/pubkey.txt keydir/tls-privkey.pem keydir/tls-pubkey.pem: mandos-keygen
256
340
        install --directory keydir
257
341
        ./mandos-keygen --dir keydir --force
258
342
 
259
343
# Run the server with a local config
260
 
run-server: confdir/mandos.conf confdir/clients.conf
261
 
        @echo "#################################################################"
262
 
        @echo "# NOTE: Please IGNORE the error about \"Could not open file      #"
263
 
        @echo "# u'/var/run/mandos.pid'\" -  it is harmless and is caused by    #"
264
 
        @echo "# the server not running as root.  Do NOT run \"make run-server\" #"
265
 
        @echo "# server as root if you didn't also unpack and compile it thus. #"
266
 
        @echo "#################################################################"
267
 
        ./mandos --debug --no-dbus --configdir=confdir $(SERVERARGS)
 
344
run-server: confdir/mandos.conf confdir/clients.conf statedir
 
345
        ./mandos --debug --no-dbus --configdir=confdir \
 
346
                --statedir=statedir $(SERVERARGS)
268
347
 
269
348
# Used by run-server
270
349
confdir/mandos.conf: mandos.conf
271
350
        install --directory confdir
272
351
        install --mode=u=rw,go=r $^ $@
273
 
confdir/clients.conf: clients.conf keydir/seckey.txt
 
352
confdir/clients.conf: clients.conf keydir/seckey.txt keydir/tls-pubkey.pem
274
353
        install --directory confdir
275
354
        install --mode=u=rw $< $@
276
355
# Add a client password
277
 
        ./mandos-keygen --dir keydir --password >> $@
 
356
        ./mandos-keygen --dir keydir --password --no-ssh >> $@
 
357
statedir:
 
358
        install --directory statedir
278
359
 
279
360
install: install-server install-client-nokey
280
361
 
285
366
 
286
367
install-server: doc
287
368
        install --directory $(CONFDIR)
 
369
        if install --directory --mode=u=rwx --owner=$(USER) \
 
370
                --group=$(GROUP) $(STATEDIR); then \
 
371
                :; \
 
372
        elif install --directory --mode=u=rwx $(STATEDIR); then \
 
373
                chown -- $(USER):$(GROUP) $(STATEDIR) || :; \
 
374
        fi
 
375
        if [ "$(TMPFILES)" != "$(DESTDIR)" -a -d "$(TMPFILES)" ]; then \
 
376
                install --mode=u=rw,go=r tmpfiles.d-mandos.conf \
 
377
                        $(TMPFILES)/mandos.conf; \
 
378
        fi
288
379
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
289
380
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
290
381
                mandos-ctl
298
389
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
299
390
        install --mode=u=rwx,go=rx init.d-mandos \
300
391
                $(DESTDIR)/etc/init.d/mandos
 
392
        if [ "$(SYSTEMD)" != "$(DESTDIR)" -a -d "$(SYSTEMD)" ]; then \
 
393
                install --mode=u=rw,go=r mandos.service $(SYSTEMD); \
 
394
        fi
301
395
        install --mode=u=rw,go=r default-mandos \
302
396
                $(DESTDIR)/etc/default/mandos
303
397
        if [ -z $(DESTDIR) ]; then \
313
407
                > $(MANDIR)/man5/mandos.conf.5.gz
314
408
        gzip --best --to-stdout mandos-clients.conf.5 \
315
409
                > $(MANDIR)/man5/mandos-clients.conf.5.gz
 
410
        gzip --best --to-stdout intro.8mandos \
 
411
                > $(MANDIR)/man8/intro.8mandos.gz
316
412
 
317
413
install-client-nokey: all doc
318
 
        install --directory $(PREFIX)/lib/mandos $(CONFDIR)
 
414
        install --directory $(LIBDIR)/mandos $(CONFDIR)
319
415
        install --directory --mode=u=rwx $(KEYDIR) \
320
 
                $(PREFIX)/lib/mandos/plugins.d
321
 
        if [ "$(CONFDIR)" != "$(PREFIX)/lib/mandos" ]; then \
 
416
                $(LIBDIR)/mandos/plugins.d \
 
417
                $(LIBDIR)/mandos/plugin-helpers
 
418
        if [ "$(CONFDIR)" != "$(LIBDIR)/mandos" ]; then \
322
419
                install --mode=u=rwx \
323
 
                        --directory "$(CONFDIR)/plugins.d"; \
 
420
                        --directory "$(CONFDIR)/plugins.d" \
 
421
                        "$(CONFDIR)/plugin-helpers"; \
324
422
        fi
325
 
        install --mode=u=rwx,go=rx \
326
 
                --target-directory=$(PREFIX)/lib/mandos plugin-runner
 
423
        install --mode=u=rwx,go=rx --directory \
 
424
                "$(CONFDIR)/network-hooks.d"
 
425
        install --mode=u=rwx,go=rx \
 
426
                --target-directory=$(LIBDIR)/mandos plugin-runner
 
427
        install --mode=u=rwx,go=rx \
 
428
                --target-directory=$(LIBDIR)/mandos mandos-to-cryptroot-unlock
327
429
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
328
430
                mandos-keygen
329
431
        install --mode=u=rwx,go=rx \
330
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
432
                --target-directory=$(LIBDIR)/mandos/plugins.d \
331
433
                plugins.d/password-prompt
332
434
        install --mode=u=rwxs,go=rx \
333
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
435
                --target-directory=$(LIBDIR)/mandos/plugins.d \
334
436
                plugins.d/mandos-client
335
437
        install --mode=u=rwxs,go=rx \
336
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
438
                --target-directory=$(LIBDIR)/mandos/plugins.d \
337
439
                plugins.d/usplash
338
440
        install --mode=u=rwxs,go=rx \
339
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
441
                --target-directory=$(LIBDIR)/mandos/plugins.d \
340
442
                plugins.d/splashy
341
443
        install --mode=u=rwxs,go=rx \
342
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
444
                --target-directory=$(LIBDIR)/mandos/plugins.d \
343
445
                plugins.d/askpass-fifo
344
446
        install --mode=u=rwxs,go=rx \
345
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
447
                --target-directory=$(LIBDIR)/mandos/plugins.d \
346
448
                plugins.d/plymouth
 
449
        install --mode=u=rwx,go=rx \
 
450
                --target-directory=$(LIBDIR)/mandos/plugin-helpers \
 
451
                plugin-helpers/mandos-client-iprouteadddel
347
452
        install initramfs-tools-hook \
348
453
                $(INITRAMFSTOOLS)/hooks/mandos
349
 
        install --mode=u=rw,go=r initramfs-tools-hook-conf \
350
 
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos
 
454
        install --mode=u=rw,go=r initramfs-tools-conf \
 
455
                $(INITRAMFSTOOLS)/conf.d/mandos-conf
 
456
        install --mode=u=rw,go=r initramfs-tools-conf-hook \
 
457
                $(INITRAMFSTOOLS)/conf-hooks.d/zz-mandos
351
458
        install initramfs-tools-script \
352
459
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos
 
460
        install initramfs-tools-script-stop \
 
461
                $(INITRAMFSTOOLS)/scripts/local-premount/mandos
 
462
        install --directory $(DRACUTMODULE)
 
463
        install --mode=u=rw,go=r --target-directory=$(DRACUTMODULE) \
 
464
                dracut-module/ask-password-mandos.path \
 
465
                dracut-module/ask-password-mandos.service
 
466
        install --mode=u=rwxs,go=rx \
 
467
                --target-directory=$(DRACUTMODULE) \
 
468
                dracut-module/module-setup.sh \
 
469
                dracut-module/cmdline-mandos.sh \
 
470
                dracut-module/password-agent
353
471
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
354
472
        gzip --best --to-stdout mandos-keygen.8 \
355
473
                > $(MANDIR)/man8/mandos-keygen.8.gz
367
485
                > $(MANDIR)/man8/askpass-fifo.8mandos.gz
368
486
        gzip --best --to-stdout plugins.d/plymouth.8mandos \
369
487
                > $(MANDIR)/man8/plymouth.8mandos.gz
 
488
        gzip --best --to-stdout dracut-module/password-agent.8mandos \
 
489
                > $(MANDIR)/man8/password-agent.8mandos.gz
370
490
 
371
491
install-client: install-client-nokey
372
492
# Post-installation stuff
373
493
        -$(PREFIX)/sbin/mandos-keygen --dir "$(KEYDIR)"
374
 
        update-initramfs -k all -u
 
494
        if command -v update-initramfs >/dev/null; then \
 
495
            update-initramfs -k all -u; \
 
496
        elif command -v dracut >/dev/null; then \
 
497
            for initrd in $(DESTDIR)/boot/initr*-$(shell uname --kernel-release); do \
 
498
                if [ -w "$$initrd" ]; then \
 
499
                    chmod go-r "$$initrd"; \
 
500
                    dracut --force "$$initrd"; \
 
501
                fi; \
 
502
            done; \
 
503
        fi
375
504
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
376
505
 
377
506
uninstall: uninstall-server uninstall-client
394
523
        ! grep --regexp='^ *[^ #].*keyscript=[^,=]*/mandos/' \
395
524
                $(DESTDIR)/etc/crypttab
396
525
        -rm --force $(PREFIX)/sbin/mandos-keygen \
397
 
                $(PREFIX)/lib/mandos/plugin-runner \
398
 
                $(PREFIX)/lib/mandos/plugins.d/password-prompt \
399
 
                $(PREFIX)/lib/mandos/plugins.d/mandos-client \
400
 
                $(PREFIX)/lib/mandos/plugins.d/usplash \
401
 
                $(PREFIX)/lib/mandos/plugins.d/splashy \
402
 
                $(PREFIX)/lib/mandos/plugins.d/askpass-fifo \
403
 
                $(PREFIX)/lib/mandos/plugins.d/plymouth \
 
526
                $(LIBDIR)/mandos/plugin-runner \
 
527
                $(LIBDIR)/mandos/plugins.d/password-prompt \
 
528
                $(LIBDIR)/mandos/plugins.d/mandos-client \
 
529
                $(LIBDIR)/mandos/plugins.d/usplash \
 
530
                $(LIBDIR)/mandos/plugins.d/splashy \
 
531
                $(LIBDIR)/mandos/plugins.d/askpass-fifo \
 
532
                $(LIBDIR)/mandos/plugins.d/plymouth \
404
533
                $(INITRAMFSTOOLS)/hooks/mandos \
405
534
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos \
406
535
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos \
 
536
                $(INITRAMFSTOOLS)/scripts/local-premount/mandos \
 
537
                $(DRACUTMODULE)/ask-password-mandos.path \
 
538
                $(DRACUTMODULE)/ask-password-mandos.service \
 
539
                $(DRACUTMODULE)/module-setup.sh \
 
540
                $(DRACUTMODULE)/cmdline-mandos.sh \
 
541
                $(DRACUTMODULE)/password-agent \
407
542
                $(MANDIR)/man8/mandos-keygen.8.gz \
408
543
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
409
544
                $(MANDIR)/man8/mandos-client.8mandos.gz
412
547
                $(MANDIR)/man8/splashy.8mandos.gz \
413
548
                $(MANDIR)/man8/askpass-fifo.8mandos.gz \
414
549
                $(MANDIR)/man8/plymouth.8mandos.gz \
415
 
        -rmdir $(PREFIX)/lib/mandos/plugins.d $(CONFDIR)/plugins.d \
416
 
                 $(PREFIX)/lib/mandos $(CONFDIR) $(KEYDIR)
417
 
        update-initramfs -k all -u
 
550
                $(MANDIR)/man8/password-agent.8mandos.gz \
 
551
        -rmdir $(LIBDIR)/mandos/plugins.d $(CONFDIR)/plugins.d \
 
552
                 $(LIBDIR)/mandos $(CONFDIR) $(KEYDIR) $(DRACUTMODULE)
 
553
        if command -v update-initramfs >/dev/null; then \
 
554
            update-initramfs -k all -u; \
 
555
        elif command -v dracut >/dev/null; then \
 
556
            for initrd in $(DESTDIR)/boot/initr*-$(shell uname --kernel-release); do \
 
557
                test -w "$$initrd" && dracut --force "$$initrd"; \
 
558
            done; \
 
559
        fi
418
560
 
419
561
purge: purge-server purge-client
420
562
 
423
565
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
424
566
                $(DESTDIR)/etc/default/mandos \
425
567
                $(DESTDIR)/etc/init.d/mandos \
 
568
                $(SYSTEMD)/mandos.service \
 
569
                $(DESTDIR)/run/mandos.pid \
426
570
                $(DESTDIR)/var/run/mandos.pid
427
571
        -rmdir $(CONFDIR)
428
572
 
429
573
purge-client: uninstall-client
430
 
        -shred --remove $(KEYDIR)/seckey.txt
 
574
        -shred --remove $(KEYDIR)/seckey.txt $(KEYDIR)/tls-privkey.pem
431
575
        -rm --force $(CONFDIR)/plugin-runner.conf \
432
 
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt
 
576
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt \
 
577
                $(KEYDIR)/tls-pubkey.txt $(KEYDIR)/tls-privkey.txt
433
578
        -rmdir $(KEYDIR) $(CONFDIR)/plugins.d $(CONFDIR)