/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 at recompile
  • Date: 2020-12-03 20:30:45 UTC
  • mto: This revision was merged to the branch mainline in revision 404.
  • Revision ID: teddy@recompile.se-20201203203045-iqd6nq9y5nwalh1x
Minor fix of a test function

In dracut-module/password-agent, the test function
test_send_password_to_socket_EMSGSIZE() (which tests that the
send_password_to_socket() task function aborts properly when getting
EMSGSIZE when writing to the password socket), part of the test code
is supposed to find a message size which definitely does trigger
EMSGSIZE when send()ing to a socket.  Without a "break" in the proper
place, however, the size given is always exactly 1024 bytes too large.

This is very probably not a problem, since a too large message will
still be too large if it is increased by 1024 bytes, and send(2) in
practice checks the size before reading the buffer.  The biggest issue
would be if some version of send(2) would try to look at the last 1024
bytes of the message buffer before checking the message size; this
would then lead to a buffer over-read when running this test function.
(But even then there would be no security implications since the tests
are not run in the normal operation of the program.)

* dracut-module/password-agent.c
  (test_send_password_to_socket_EMSGSIZE): Break out early when ssret
  < 0 and errno == EMSGSIZE; don't allow loop to increase message_size
  again.

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