/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: 2019-07-29 16:35:53 UTC
  • 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=2 -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://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html>
12
 
FORTIFY=-D_FORTIFY_SOURCE=2 -fstack-protector-all -fPIE -pie
13
 
LINK_FORTIFY=-z relro -pie
 
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:=
 
35
 
 
36
# If BROKEN_PIE is set, do not build with -pie
 
37
ifndef BROKEN_PIE
 
38
FORTIFY += -fPIE
 
39
LINK_FORTIFY += -pie
 
40
endif
14
41
#COVERAGE=--coverage
15
 
OPTIMIZE=-Os
16
 
LANGUAGE=-std=gnu99
17
 
htmldir=man
18
 
version=1.0
19
 
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)))
20
52
 
21
53
## Use these settings for a traditional /usr/local install
22
 
# PREFIX=$(DESTDIR)/usr/local
23
 
# CONFDIR=$(DESTDIR)/etc/mandos
24
 
# KEYDIR=$(DESTDIR)/etc/mandos/keys
25
 
# MANDIR=$(PREFIX)/man
26
 
# 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
27
62
##
28
63
 
29
64
## These settings are for a package-type install
30
 
PREFIX=$(DESTDIR)/usr
31
 
CONFDIR=$(DESTDIR)/etc/mandos
32
 
KEYDIR=$(DESTDIR)/etc/keys/mandos
33
 
MANDIR=$(PREFIX)/share/man
34
 
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)
35
81
##
36
82
 
37
 
GNUTLS_CFLAGS=$(shell libgnutls-config --cflags)
38
 
GNUTLS_LIBS=$(shell libgnutls-config --libs)
39
 
AVAHI_CFLAGS=$(shell pkg-config --cflags-only-I avahi-core)
40
 
AVAHI_LIBS=$(shell pkg-config --libs avahi-core)
41
 
GPGME_CFLAGS=$(shell gpgme-config --cflags)
42
 
GPGME_LIBS=$(shell gpgme-config --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; \
 
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)
43
97
 
44
98
# Do not change these two
45
 
CFLAGS=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) \
46
 
        $(LANGUAGE) $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(GPGME_CFLAGS) \
47
 
        -DVERSION='"$(version)"'
48
 
LDFLAGS=$(COVERAGE) $(LINK_FORTIFY)
 
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))
49
103
 
50
104
# Commands to format a DocBook <refentry> document into a manual page
51
 
DOCBOOKTOMAN=cd $(dir $<); xsltproc --nonet --xinclude \
 
105
DOCBOOKTOMAN=$(strip cd $(dir $<); xsltproc --nonet --xinclude \
52
106
        --param man.charmap.use.subset          0 \
53
107
        --param make.year.ranges                1 \
54
108
        --param make.single.year.ranges         1 \
55
109
        --param man.output.quietly              1 \
56
110
        --param man.authors.section.enabled     0 \
57
 
         /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
 
111
        /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
58
112
        $(notdir $<); \
59
 
        $(MANPOST) $(notdir $@)
60
 
# DocBook-to-man post-processing to fix a '\n' escape bug
61
 
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)
62
117
 
63
 
DOCBOOKTOHTML=xsltproc --nonet --xinclude \
 
118
DOCBOOKTOHTML=$(strip xsltproc --nonet --xinclude \
64
119
        --param make.year.ranges                1 \
65
120
        --param make.single.year.ranges         1 \
66
121
        --param man.output.quietly              1 \
68
123
        --param citerefentry.link               1 \
69
124
        --output $@ \
70
125
        /usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl \
71
 
        $<; $(HTMLPOST) $@
 
126
        $<; $(HTMLPOST) $@)
72
127
# Fix citerefentry links
73
 
HTMLPOST=$(SED) --in-place --expression='s/\(<a class="citerefentry" href="\)\("><span class="citerefentry"><span class="refentrytitle">\)\([^<]*\)\(<\/span>(\)\([^)]*\)\()<\/span><\/a>\)/\1\3.\5\2\3\4\5\6/g'
 
128
HTMLPOST:=$(SED) --in-place \
 
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'
74
130
 
75
 
PLUGINS=plugins.d/password-prompt plugins.d/mandos-client \
76
 
        plugins.d/usplash plugins.d/splashy plugins.d/askpass-fifo
77
 
CPROGS=plugin-runner $(PLUGINS)
78
 
PROGS=mandos mandos-keygen $(CPROGS)
79
 
DOCS=mandos.8 plugin-runner.8mandos mandos-keygen.8 \
 
131
PLUGINS:=plugins.d/password-prompt plugins.d/mandos-client \
 
132
        plugins.d/usplash plugins.d/splashy plugins.d/askpass-fifo \
 
133
        plugins.d/plymouth
 
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 \
 
139
        mandos.conf.5 mandos-clients.conf.5 plugin-runner.8mandos \
 
140
        dracut-module/password-agent.8mandos \
80
141
        plugins.d/mandos-client.8mandos \
81
 
        plugins.d/password-prompt.8mandos mandos.conf.5 \
82
 
        plugins.d/usplash.8mandos plugins.d/splashy.8mandos \
83
 
        plugins.d/askpass-fifo.8mandos mandos-clients.conf.5
84
 
 
85
 
htmldocs=$(addsuffix .xhtml,$(DOCS))
86
 
 
87
 
objects=$(addsuffix .o,$(CPROGS))
88
 
 
89
 
all: $(PROGS)
 
142
        plugins.d/password-prompt.8mandos plugins.d/usplash.8mandos \
 
143
        plugins.d/splashy.8mandos plugins.d/askpass-fifo.8mandos \
 
144
        plugins.d/plymouth.8mandos intro.8mandos
 
145
 
 
146
htmldocs:=$(addsuffix .xhtml,$(DOCS))
 
147
 
 
148
objects:=$(addsuffix .o,$(CPROGS))
 
149
 
 
150
all: $(PROGS) mandos.lsm
90
151
 
91
152
doc: $(DOCS)
92
153
 
107
168
%.8mandos.xhtml: %.xml common.ent legalnotice.xml
108
169
        $(DOCBOOKTOHTML)
109
170
 
 
171
intro.8mandos: intro.xml common.ent legalnotice.xml
 
172
        $(DOCBOOKTOMAN)
 
173
intro.8mandos.xhtml: intro.xml common.ent legalnotice.xml
 
174
        $(DOCBOOKTOHTML)
 
175
 
110
176
mandos.8: mandos.xml common.ent mandos-options.xml overview.xml \
111
177
                legalnotice.xml
112
178
        $(DOCBOOKTOMAN)
121
187
                 legalnotice.xml
122
188
        $(DOCBOOKTOHTML)
123
189
 
 
190
mandos-monitor.8: mandos-monitor.xml common.ent overview.xml \
 
191
                legalnotice.xml
 
192
        $(DOCBOOKTOMAN)
 
193
mandos-monitor.8.xhtml: mandos-monitor.xml common.ent overview.xml \
 
194
                 legalnotice.xml
 
195
        $(DOCBOOKTOHTML)
 
196
 
 
197
mandos-ctl.8: mandos-ctl.xml common.ent overview.xml \
 
198
                legalnotice.xml
 
199
        $(DOCBOOKTOMAN)
 
200
mandos-ctl.8.xhtml: mandos-ctl.xml common.ent overview.xml \
 
201
                 legalnotice.xml
 
202
        $(DOCBOOKTOHTML)
 
203
 
124
204
mandos.conf.5: mandos.conf.xml common.ent mandos-options.xml \
125
205
                legalnotice.xml
126
206
        $(DOCBOOKTOMAN)
135
215
                overview.xml legalnotice.xml
136
216
        $(DOCBOOKTOHTML)
137
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
 
138
227
plugins.d/mandos-client.8mandos: plugins.d/mandos-client.xml \
139
228
                                        common.ent \
140
229
                                        mandos-options.xml \
148
237
 
149
238
# Update all these files with version number $(version)
150
239
common.ent: Makefile
151
 
        $(SED) --in-place --expression='s/^\(<ENTITY VERSION "\)[^"]*">$$/\1$(version)"/' $@
 
240
        $(strip $(SED) --in-place \
 
241
                --expression='s/^\(<!ENTITY version "\)[^"]*">$$/\1$(version)">/' \
 
242
                $@)
152
243
 
153
244
mandos: Makefile
154
 
        $(SED) --in-place --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' $@
 
245
        $(strip $(SED) --in-place \
 
246
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
 
247
                $@)
155
248
 
156
249
mandos-keygen: Makefile
157
 
        $(SED) --in-place --expression='s/^\(VERSION="\)[^"]*"$$/\1$(version)"/' $@
158
 
 
159
 
plugins.d/mandos-client: plugins.d/mandos-client.o
160
 
        $(LINK.o) $(GNUTLS_LIBS) $(AVAHI_LIBS) $(GPGME_LIBS) \
161
 
                $(COMMON) $^ $(LOADLIBES) $(LDLIBS) -o $@
162
 
 
163
 
.PHONY : all doc html clean distclean run-client run-server install \
164
 
        install-server install-client uninstall uninstall-server \
165
 
        uninstall-client purge purge-server purge-client
 
250
        $(strip $(SED) --in-place \
 
251
                --expression='s/^\(VERSION="\)[^"]*"$$/\1$(version)"/' \
 
252
                $@)
 
253
 
 
254
mandos-ctl: Makefile
 
255
        $(strip $(SED) --in-place \
 
256
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
 
257
                $@)
 
258
 
 
259
mandos-monitor: Makefile
 
260
        $(strip $(SED) --in-place \
 
261
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
 
262
                $@)
 
263
 
 
264
mandos.lsm: Makefile
 
265
        $(strip $(SED) --in-place \
 
266
                --expression='s/^\(Version:\).*/\1\t$(version)/' \
 
267
                $@)
 
268
        $(strip $(SED) --in-place \
 
269
                --expression='s/^\(Entered-date:\).*/\1\t$(shell date --rfc-3339=date --reference=Makefile)/' \
 
270
                $@)
 
271
        $(strip $(SED) --in-place \
 
272
                --expression='s/\(mandos_\)[0-9.]\+\(\.orig\.tar\.gz\)/\1$(version)\2/' \
 
273
                $@)
 
274
 
 
275
# Need to add the GnuTLS, Avahi and GPGME libraries
 
276
plugins.d/mandos-client: plugins.d/mandos-client.c
 
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
166
297
 
167
298
clean:
168
299
        -rm --force $(CPROGS) $(objects) $(htmldocs) $(DOCS) core
170
301
distclean: clean
171
302
mostlyclean: clean
172
303
maintainer-clean: clean
173
 
        -rm --force --recursive keydir confdir
 
304
        -rm --force --recursive keydir confdir statedir
174
305
 
175
 
check:  all
 
306
check: all
176
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
177
313
 
178
314
# Run the client with a local config and key
179
 
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
 
316
        @echo "###################################################################"
 
317
        @echo "# The following error messages are harmless and can be safely     #"
 
318
        @echo "# ignored:                                                        #"
 
319
        @echo "# From plugin-runner: setgid: Operation not permitted             #"
 
320
        @echo "#                     setuid: Operation not permitted             #"
 
321
        @echo "# From askpass-fifo:  mkfifo: Permission denied                   #"
 
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.)        #"
 
329
        @echo "###################################################################"
 
330
# We set GNOME_KEYRING_CONTROL to block pam_gnome_keyring
180
331
        ./plugin-runner --plugin-dir=plugins.d \
 
332
                --plugin-helper-dir=plugin-helpers \
181
333
                --config-file=plugin-runner.conf \
182
 
                --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= \
 
336
                $(CLIENTARGS)
183
337
 
184
338
# Used by run-client
185
 
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
186
340
        install --directory keydir
187
341
        ./mandos-keygen --dir keydir --force
188
342
 
189
343
# Run the server with a local config
190
 
run-server: confdir/mandos.conf confdir/clients.conf
191
 
        ./mandos --debug --configdir=confdir
 
344
run-server: confdir/mandos.conf confdir/clients.conf statedir
 
345
        ./mandos --debug --no-dbus --configdir=confdir \
 
346
                --statedir=statedir $(SERVERARGS)
192
347
 
193
348
# Used by run-server
194
349
confdir/mandos.conf: mandos.conf
195
350
        install --directory confdir
196
351
        install --mode=u=rw,go=r $^ $@
197
 
confdir/clients.conf: clients.conf keydir/seckey.txt
 
352
confdir/clients.conf: clients.conf keydir/seckey.txt keydir/tls-pubkey.pem
198
353
        install --directory confdir
199
354
        install --mode=u=rw $< $@
200
355
# Add a client password
201
 
        ./mandos-keygen --dir keydir --password >> $@
 
356
        ./mandos-keygen --dir keydir --password --no-ssh >> $@
 
357
statedir:
 
358
        install --directory statedir
202
359
 
203
360
install: install-server install-client-nokey
204
361
 
205
 
install-html: $(htmldocs)
 
362
install-html: html
206
363
        install --directory $(htmldir)
207
364
        install --mode=u=rw,go=r --target-directory=$(htmldir) \
208
365
                $(htmldocs)
209
366
 
210
367
install-server: doc
211
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
212
379
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
 
380
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
 
381
                mandos-ctl
 
382
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
 
383
                mandos-monitor
213
384
        install --mode=u=rw,go=r --target-directory=$(CONFDIR) \
214
385
                mandos.conf
215
386
        install --mode=u=rw --target-directory=$(CONFDIR) \
216
387
                clients.conf
 
388
        install --mode=u=rw,go=r dbus-mandos.conf \
 
389
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
217
390
        install --mode=u=rwx,go=rx init.d-mandos \
218
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
219
395
        install --mode=u=rw,go=r default-mandos \
220
396
                $(DESTDIR)/etc/default/mandos
221
397
        if [ -z $(DESTDIR) ]; then \
223
399
        fi
224
400
        gzip --best --to-stdout mandos.8 \
225
401
                > $(MANDIR)/man8/mandos.8.gz
 
402
        gzip --best --to-stdout mandos-monitor.8 \
 
403
                > $(MANDIR)/man8/mandos-monitor.8.gz
 
404
        gzip --best --to-stdout mandos-ctl.8 \
 
405
                > $(MANDIR)/man8/mandos-ctl.8.gz
226
406
        gzip --best --to-stdout mandos.conf.5 \
227
407
                > $(MANDIR)/man5/mandos.conf.5.gz
228
408
        gzip --best --to-stdout mandos-clients.conf.5 \
229
409
                > $(MANDIR)/man5/mandos-clients.conf.5.gz
 
410
        gzip --best --to-stdout intro.8mandos \
 
411
                > $(MANDIR)/man8/intro.8mandos.gz
230
412
 
231
413
install-client-nokey: all doc
232
 
        install --directory $(PREFIX)/lib/mandos $(CONFDIR)
 
414
        install --directory $(LIBDIR)/mandos $(CONFDIR)
233
415
        install --directory --mode=u=rwx $(KEYDIR) \
234
 
                $(PREFIX)/lib/mandos/plugins.d
235
 
        if [ "$(CONFDIR)" != "$(PREFIX)/lib/mandos" ]; then \
 
416
                $(LIBDIR)/mandos/plugins.d \
 
417
                $(LIBDIR)/mandos/plugin-helpers
 
418
        if [ "$(CONFDIR)" != "$(LIBDIR)/mandos" ]; then \
236
419
                install --mode=u=rwx \
237
 
                        --directory "$(CONFDIR)/plugins.d"; \
 
420
                        --directory "$(CONFDIR)/plugins.d" \
 
421
                        "$(CONFDIR)/plugin-helpers"; \
238
422
        fi
239
 
        install --mode=u=rwx,go=rx \
240
 
                --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
241
429
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
242
430
                mandos-keygen
243
431
        install --mode=u=rwx,go=rx \
244
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
432
                --target-directory=$(LIBDIR)/mandos/plugins.d \
245
433
                plugins.d/password-prompt
246
434
        install --mode=u=rwxs,go=rx \
247
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
435
                --target-directory=$(LIBDIR)/mandos/plugins.d \
248
436
                plugins.d/mandos-client
249
437
        install --mode=u=rwxs,go=rx \
250
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
438
                --target-directory=$(LIBDIR)/mandos/plugins.d \
251
439
                plugins.d/usplash
252
440
        install --mode=u=rwxs,go=rx \
253
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
441
                --target-directory=$(LIBDIR)/mandos/plugins.d \
254
442
                plugins.d/splashy
255
443
        install --mode=u=rwxs,go=rx \
256
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
444
                --target-directory=$(LIBDIR)/mandos/plugins.d \
257
445
                plugins.d/askpass-fifo
 
446
        install --mode=u=rwxs,go=rx \
 
447
                --target-directory=$(LIBDIR)/mandos/plugins.d \
 
448
                plugins.d/plymouth
 
449
        install --mode=u=rwx,go=rx \
 
450
                --target-directory=$(LIBDIR)/mandos/plugin-helpers \
 
451
                plugin-helpers/mandos-client-iprouteadddel
258
452
        install initramfs-tools-hook \
259
453
                $(INITRAMFSTOOLS)/hooks/mandos
260
 
        install --mode=u=rw,go=r initramfs-tools-hook-conf \
261
 
                $(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
262
458
        install initramfs-tools-script \
263
 
                $(INITRAMFSTOOLS)/scripts/local-top/mandos
 
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
264
471
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
265
472
        gzip --best --to-stdout mandos-keygen.8 \
266
473
                > $(MANDIR)/man8/mandos-keygen.8.gz
267
474
        gzip --best --to-stdout plugin-runner.8mandos \
268
475
                > $(MANDIR)/man8/plugin-runner.8mandos.gz
 
476
        gzip --best --to-stdout plugins.d/mandos-client.8mandos \
 
477
                > $(MANDIR)/man8/mandos-client.8mandos.gz
269
478
        gzip --best --to-stdout plugins.d/password-prompt.8mandos \
270
479
                > $(MANDIR)/man8/password-prompt.8mandos.gz
271
 
        gzip --best --to-stdout plugins.d/mandos-client.8mandos \
272
 
                > $(MANDIR)/man8/mandos-client.8mandos.gz
273
480
        gzip --best --to-stdout plugins.d/usplash.8mandos \
274
481
                > $(MANDIR)/man8/usplash.8mandos.gz
275
482
        gzip --best --to-stdout plugins.d/splashy.8mandos \
276
483
                > $(MANDIR)/man8/splashy.8mandos.gz
277
484
        gzip --best --to-stdout plugins.d/askpass-fifo.8mandos \
278
485
                > $(MANDIR)/man8/askpass-fifo.8mandos.gz
 
486
        gzip --best --to-stdout plugins.d/plymouth.8mandos \
 
487
                > $(MANDIR)/man8/plymouth.8mandos.gz
 
488
        gzip --best --to-stdout dracut-module/password-agent.8mandos \
 
489
                > $(MANDIR)/man8/password-agent.8mandos.gz
279
490
 
280
491
install-client: install-client-nokey
281
492
# Post-installation stuff
282
493
        -$(PREFIX)/sbin/mandos-keygen --dir "$(KEYDIR)"
283
 
        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
284
504
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
285
505
 
286
506
uninstall: uninstall-server uninstall-client
287
507
 
288
508
uninstall-server:
289
509
        -rm --force $(PREFIX)/sbin/mandos \
 
510
                $(PREFIX)/sbin/mandos-ctl \
 
511
                $(PREFIX)/sbin/mandos-monitor \
290
512
                $(MANDIR)/man8/mandos.8.gz \
 
513
                $(MANDIR)/man8/mandos-monitor.8.gz \
 
514
                $(MANDIR)/man8/mandos-ctl.8.gz \
291
515
                $(MANDIR)/man5/mandos.conf.5.gz \
292
516
                $(MANDIR)/man5/mandos-clients.conf.5.gz
293
517
        update-rc.d -f mandos remove
299
523
        ! grep --regexp='^ *[^ #].*keyscript=[^,=]*/mandos/' \
300
524
                $(DESTDIR)/etc/crypttab
301
525
        -rm --force $(PREFIX)/sbin/mandos-keygen \
302
 
                $(PREFIX)/lib/mandos/plugin-runner \
303
 
                $(PREFIX)/lib/mandos/plugins.d/password-prompt \
304
 
                $(PREFIX)/lib/mandos/plugins.d/mandos-client \
305
 
                $(PREFIX)/lib/mandos/plugins.d/usplash \
306
 
                $(PREFIX)/lib/mandos/plugins.d/splashy \
307
 
                $(PREFIX)/lib/mandos/plugins.d/askpass-fifo \
 
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 \
308
533
                $(INITRAMFSTOOLS)/hooks/mandos \
309
534
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos \
310
 
                $(INITRAMFSTOOLS)/scripts/local-top/mandos \
 
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 \
 
542
                $(MANDIR)/man8/mandos-keygen.8.gz \
311
543
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
312
 
                $(MANDIR)/man8/mandos-keygen.8.gz \
 
544
                $(MANDIR)/man8/mandos-client.8mandos.gz
313
545
                $(MANDIR)/man8/password-prompt.8mandos.gz \
314
546
                $(MANDIR)/man8/usplash.8mandos.gz \
315
547
                $(MANDIR)/man8/splashy.8mandos.gz \
316
548
                $(MANDIR)/man8/askpass-fifo.8mandos.gz \
317
 
                $(MANDIR)/man8/mandos-client.8mandos.gz
318
 
        -rmdir $(PREFIX)/lib/mandos/plugins.d $(CONFDIR)/plugins.d \
319
 
                 $(PREFIX)/lib/mandos $(CONFDIR) $(KEYDIR)
320
 
        update-initramfs -k all -u
 
549
                $(MANDIR)/man8/plymouth.8mandos.gz \
 
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
321
560
 
322
561
purge: purge-server purge-client
323
562
 
324
563
purge-server: uninstall-server
325
564
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
 
565
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
326
566
                $(DESTDIR)/etc/default/mandos \
327
567
                $(DESTDIR)/etc/init.d/mandos \
 
568
                $(SYSTEMD)/mandos.service \
 
569
                $(DESTDIR)/run/mandos.pid \
328
570
                $(DESTDIR)/var/run/mandos.pid
329
571
        -rmdir $(CONFDIR)
330
572
 
331
573
purge-client: uninstall-client
332
 
        -shred --remove $(KEYDIR)/seckey.txt
 
574
        -shred --remove $(KEYDIR)/seckey.txt $(KEYDIR)/tls-privkey.pem
333
575
        -rm --force $(CONFDIR)/plugin-runner.conf \
334
 
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt
 
576
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt \
 
577
                $(KEYDIR)/tls-pubkey.txt $(KEYDIR)/tls-privkey.txt
335
578
        -rmdir $(KEYDIR) $(CONFDIR)/plugins.d $(CONFDIR)