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