/mandos/release

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/release

« back to all changes in this revision

Viewing changes to Makefile

  • Committer: Teddy Hogeborn
  • Date: 2008-07-20 06:33:48 UTC
  • Revision ID: teddy@fukt.bsnet.se-20080720063348-jscgy5p0itrgvlo8
* mandos-clients.conf ([foo]): Uncommented.
  ([foo]/secret): New.
  ([foo]/secfile): Commented out.
  ([foo]/checker): Changed to "fping -q -- %%(fqdn)s".
  ([foo]/timeout): New.

* server.py: New modeline for Python and Emacs.  Set a logging format.
  (Client.__init__): Bug fix: Choose either the value from the options
                     object or pass the argument through string_to_delta
                     for both "timeout" and "interval".
  (Client.checker_callback): Bug fix: Do not log spurious "Checker for
                             <foo> failed" messages.
  (Client.start_checker): Moved "Starting checker" log message down to
                          just before actually starting the subprocess.
                          Do not redirect the subprocesses' stdout to a
                          pipe.
  (peer_certificate, fingerprint): Added docstrings.
  (entry_group_state_changed): Call "killme()" instead of
                               "main_loop.quit()".
  (daemon, killme): New functions.
  (exitstatus, main_loop_started): New global variables.
  (__main__): Removed the "--cert", "--key", "--ca", and "--crl"
              options.  Removed the sleep command from the default
              checker.  Add a console logger in debug mode.  Call
              "killme()" instead of "main_loop.quit()" when there are no
              more clients.  Call "daemon()" if not in debug mode.
              Register "cleanup()" to run at exit.  Ignore some
              signals.  Catch DBusException to detect another running
              server and exit cleanly.  Exit with "exitstatus".
  (cleanup): New function.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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 \
6
 
        -Wunsafe-loop-optimizations -Wpointer-arith \
7
 
        -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings \
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
41
 
#COVERAGE=--coverage
42
 
OPTIMIZE:=-Os -fno-strict-aliasing
43
 
LANGUAGE:=-std=gnu11
44
 
FEATURES:=-D_FILE_OFFSET_BITS=64
45
 
htmldir:=man
46
 
version:=1.8.9
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)
56
 
 
57
 
## Use these settings for a traditional /usr/local install
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
66
 
##
67
 
 
68
 
## These settings are for a package-type install
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 \
77
 
        for d in \
78
 
        "/usr/lib/`dpkg-architecture \
79
 
                        -qDEB_HOST_MULTIARCH 2>/dev/null`" \
80
 
        "`rpm --eval='%{_libdir}' 2>/dev/null`" /usr/lib; do \
81
 
                if [ -d "$$d" -a "$$d" = "$${d%/}" ]; then \
82
 
                        echo "$(DESTDIR)$$d"; \
83
 
                        break; \
84
 
                fi; \
85
 
        done)
86
 
##
87
 
 
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)
94
 
 
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; \
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)
106
 
 
107
 
# Do not change these two
108
 
CFLAGS+=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) \
109
 
        $(LANGUAGE) $(FEATURES) -DVERSION='"$(version)"'
110
 
LDFLAGS+=-Xlinker --as-needed $(COVERAGE) $(LINK_FORTIFY) $(strip \
111
 
        ) $(foreach flag,$(LINK_FORTIFY_LD),-Xlinker $(flag))
112
 
 
113
 
# Commands to format a DocBook <refentry> document into a manual page
114
 
DOCBOOKTOMAN=$(strip cd $(dir $<); xsltproc --nonet --xinclude \
115
 
        --param man.charmap.use.subset          0 \
116
 
        --param make.year.ranges                1 \
117
 
        --param make.single.year.ranges         1 \
118
 
        --param man.output.quietly              1 \
119
 
        --param man.authors.section.enabled     0 \
120
 
        /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
121
 
        $(notdir $<); \
122
 
        if locale --all 2>/dev/null | grep --regexp='^en_US\.utf8$$' \
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)
126
 
 
127
 
DOCBOOKTOHTML=$(strip xsltproc --nonet --xinclude \
128
 
        --param make.year.ranges                1 \
129
 
        --param make.single.year.ranges         1 \
130
 
        --param man.output.quietly              1 \
131
 
        --param man.authors.section.enabled     0 \
132
 
        --param citerefentry.link               1 \
133
 
        --output $@ \
134
 
        /usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl \
135
 
        $<; $(HTMLPOST) $@)
136
 
# Fix citerefentry links
137
 
HTMLPOST:=$(SED) --in-place \
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'
139
 
 
140
 
PLUGINS:=plugins.d/password-prompt plugins.d/mandos-client \
141
 
        plugins.d/usplash plugins.d/splashy plugins.d/askpass-fifo \
142
 
        plugins.d/plymouth
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 \
148
 
        mandos.conf.5 mandos-clients.conf.5 plugin-runner.8mandos \
149
 
        dracut-module/password-agent.8mandos \
150
 
        plugins.d/mandos-client.8mandos \
151
 
        plugins.d/password-prompt.8mandos plugins.d/usplash.8mandos \
152
 
        plugins.d/splashy.8mandos plugins.d/askpass-fifo.8mandos \
153
 
        plugins.d/plymouth.8mandos intro.8mandos
154
 
 
155
 
htmldocs:=$(addsuffix .xhtml,$(DOCS))
156
 
 
157
 
objects:=$(addsuffix .o,$(CPROGS))
158
 
 
159
 
.PHONY: all
160
 
all: $(PROGS) mandos.lsm
161
 
 
162
 
.PHONY: doc
163
 
doc: $(DOCS)
164
 
 
165
 
.PHONY: html
166
 
html: $(htmldocs)
167
 
 
168
 
%.5: %.xml common.ent legalnotice.xml
169
 
        $(DOCBOOKTOMAN)
170
 
%.5.xhtml: %.xml common.ent legalnotice.xml
171
 
        $(DOCBOOKTOHTML)
172
 
 
173
 
%.8: %.xml common.ent legalnotice.xml
174
 
        $(DOCBOOKTOMAN)
175
 
%.8.xhtml: %.xml common.ent legalnotice.xml
176
 
        $(DOCBOOKTOHTML)
177
 
 
178
 
%.8mandos: %.xml common.ent legalnotice.xml
179
 
        $(DOCBOOKTOMAN)
180
 
%.8mandos.xhtml: %.xml common.ent legalnotice.xml
181
 
        $(DOCBOOKTOHTML)
182
 
 
183
 
intro.8mandos: intro.xml common.ent legalnotice.xml
184
 
        $(DOCBOOKTOMAN)
185
 
intro.8mandos.xhtml: intro.xml common.ent legalnotice.xml
186
 
        $(DOCBOOKTOHTML)
187
 
 
188
 
mandos.8: mandos.xml common.ent mandos-options.xml overview.xml \
189
 
                legalnotice.xml
190
 
        $(DOCBOOKTOMAN)
191
 
mandos.8.xhtml: mandos.xml common.ent mandos-options.xml \
192
 
                overview.xml legalnotice.xml
193
 
        $(DOCBOOKTOHTML)
194
 
 
195
 
mandos-keygen.8: mandos-keygen.xml common.ent overview.xml \
196
 
                legalnotice.xml
197
 
        $(DOCBOOKTOMAN)
198
 
mandos-keygen.8.xhtml: mandos-keygen.xml common.ent overview.xml \
199
 
                 legalnotice.xml
200
 
        $(DOCBOOKTOHTML)
201
 
 
202
 
mandos-monitor.8: mandos-monitor.xml common.ent overview.xml \
203
 
                legalnotice.xml
204
 
        $(DOCBOOKTOMAN)
205
 
mandos-monitor.8.xhtml: mandos-monitor.xml common.ent overview.xml \
206
 
                 legalnotice.xml
207
 
        $(DOCBOOKTOHTML)
208
 
 
209
 
mandos-ctl.8: mandos-ctl.xml common.ent overview.xml \
210
 
                legalnotice.xml
211
 
        $(DOCBOOKTOMAN)
212
 
mandos-ctl.8.xhtml: mandos-ctl.xml common.ent overview.xml \
213
 
                 legalnotice.xml
214
 
        $(DOCBOOKTOHTML)
215
 
 
216
 
mandos.conf.5: mandos.conf.xml common.ent mandos-options.xml \
217
 
                legalnotice.xml
218
 
        $(DOCBOOKTOMAN)
219
 
mandos.conf.5.xhtml: mandos.conf.xml common.ent mandos-options.xml \
220
 
                legalnotice.xml
221
 
        $(DOCBOOKTOHTML)
222
 
 
223
 
plugin-runner.8mandos: plugin-runner.xml common.ent overview.xml \
224
 
                legalnotice.xml
225
 
        $(DOCBOOKTOMAN)
226
 
plugin-runner.8mandos.xhtml: plugin-runner.xml common.ent \
227
 
                overview.xml legalnotice.xml
228
 
        $(DOCBOOKTOHTML)
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
 
 
239
 
plugins.d/mandos-client.8mandos: plugins.d/mandos-client.xml \
240
 
                                        common.ent \
241
 
                                        mandos-options.xml \
242
 
                                        overview.xml legalnotice.xml
243
 
        $(DOCBOOKTOMAN)
244
 
plugins.d/mandos-client.8mandos.xhtml: plugins.d/mandos-client.xml \
245
 
                                        common.ent \
246
 
                                        mandos-options.xml \
247
 
                                        overview.xml legalnotice.xml
248
 
        $(DOCBOOKTOHTML)
249
 
 
250
 
# Update all these files with version number $(version)
251
 
common.ent: Makefile
252
 
        $(strip $(SED) --in-place \
253
 
                --expression='s/^\(<!ENTITY version "\)[^"]*">$$/\1$(version)">/' \
254
 
                $@)
255
 
 
256
 
mandos: Makefile
257
 
        $(strip $(SED) --in-place \
258
 
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
259
 
                $@)
260
 
 
261
 
mandos-keygen: Makefile
262
 
        $(strip $(SED) --in-place \
263
 
                --expression='s/^\(VERSION="\)[^"]*"$$/\1$(version)"/' \
264
 
                $@)
265
 
 
266
 
mandos-ctl: Makefile
267
 
        $(strip $(SED) --in-place \
268
 
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
269
 
                $@)
270
 
 
271
 
mandos-monitor: Makefile
272
 
        $(strip $(SED) --in-place \
273
 
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
274
 
                $@)
275
 
 
276
 
mandos.lsm: Makefile
277
 
        $(strip $(SED) --in-place \
278
 
                --expression='s/^\(Version:\).*/\1\t$(version)/' \
279
 
                $@)
280
 
        $(strip $(SED) --in-place \
281
 
                --expression='s/^\(Entered-date:\).*/\1\t$(shell date --rfc-3339=date --reference=Makefile)/' \
282
 
                $@)
283
 
        $(strip $(SED) --in-place \
284
 
                --expression='s/\(mandos_\)[0-9.]\+\(\.orig\.tar\.gz\)/\1$(version)\2/' \
285
 
                $@)
286
 
 
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
 
1
CFLAGS=-Wall -g -std=gnu99
 
2
LDFLAGS=-lgnutls
 
3
 
 
4
all: plugbasedclient
 
5
 
302
6
clean:
303
 
        -rm --force $(CPROGS) $(objects) $(htmldocs) $(DOCS) core
304
 
 
305
 
.PHONY: distclean
306
 
distclean: clean
307
 
.PHONY: mostlyclean
308
 
mostlyclean: clean
309
 
.PHONY: maintainer-clean
310
 
maintainer-clean: clean
311
 
        -rm --force --recursive keydir confdir statedir
312
 
 
313
 
.PHONY: check
314
 
check: all
315
 
        ./mandos --check
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
321
 
 
322
 
# Run the client with a local config and key
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
346
 
        ./plugin-runner --plugin-dir=plugins.d \
347
 
                --plugin-helper-dir=plugin-helpers \
348
 
                --config-file=plugin-runner.conf \
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= \
351
 
                $(CLIENTARGS)
352
 
 
353
 
# Used by run-client
354
 
keydir/seckey.txt keydir/pubkey.txt keydir/tls-privkey.pem keydir/tls-pubkey.pem: mandos-keygen
355
 
        install --directory keydir
356
 
        ./mandos-keygen --dir keydir --force
357
 
 
358
 
# Run the server with a local config
359
 
.PHONY: run-server
360
 
run-server: confdir/mandos.conf confdir/clients.conf statedir
361
 
        ./mandos --debug --no-dbus --configdir=confdir \
362
 
                --statedir=statedir $(SERVERARGS)
363
 
 
364
 
# Used by run-server
365
 
confdir/mandos.conf: mandos.conf
366
 
        install --directory confdir
367
 
        install --mode=u=rw,go=r $^ $@
368
 
confdir/clients.conf: clients.conf keydir/seckey.txt keydir/tls-pubkey.pem
369
 
        install --directory confdir
370
 
        install --mode=u=rw $< $@
371
 
# Add a client password
372
 
        ./mandos-keygen --dir keydir --password --no-ssh >> $@
373
 
statedir:
374
 
        install --directory statedir
375
 
 
376
 
.PHONY: install
377
 
install: install-server install-client-nokey
378
 
 
379
 
.PHONY: install-html
380
 
install-html: html
381
 
        install --directory $(htmldir)
382
 
        install --mode=u=rw,go=r --target-directory=$(htmldir) \
383
 
                $(htmldocs)
384
 
 
385
 
.PHONY: install-server
386
 
install-server: doc
387
 
        install --directory $(CONFDIR)
388
 
        if install --directory --mode=u=rwx --owner=$(USER) \
389
 
                --group=$(GROUP) $(STATEDIR); then \
390
 
                :; \
391
 
        elif install --directory --mode=u=rwx $(STATEDIR); then \
392
 
                chown -- $(USER):$(GROUP) $(STATEDIR) || :; \
393
 
        fi
394
 
        if [ "$(TMPFILES)" != "$(DESTDIR)" \
395
 
                        -a -d "$(TMPFILES)" ]; then \
396
 
                install --mode=u=rw,go=r tmpfiles.d-mandos.conf \
397
 
                        $(TMPFILES)/mandos.conf; \
398
 
        fi
399
 
        if [ "$(SYSUSERS)" != "$(DESTDIR)" \
400
 
                        -a -d "$(SYSUSERS)" ]; then \
401
 
                install --mode=u=rw,go=r sysusers.d-mandos.conf \
402
 
                        $(SYSUSERS)/mandos.conf; \
403
 
        fi
404
 
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
405
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
406
 
                mandos-ctl
407
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
408
 
                mandos-monitor
409
 
        install --mode=u=rw,go=r --target-directory=$(CONFDIR) \
410
 
                mandos.conf
411
 
        install --mode=u=rw --target-directory=$(CONFDIR) \
412
 
                clients.conf
413
 
        install --mode=u=rw,go=r dbus-mandos.conf \
414
 
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
415
 
        install --mode=u=rwx,go=rx init.d-mandos \
416
 
                $(DESTDIR)/etc/init.d/mandos
417
 
        if [ "$(SYSTEMD)" != "$(DESTDIR)" -a -d "$(SYSTEMD)" ]; then \
418
 
                install --mode=u=rw,go=r mandos.service $(SYSTEMD); \
419
 
        fi
420
 
        install --mode=u=rw,go=r default-mandos \
421
 
                $(DESTDIR)/etc/default/mandos
422
 
        if [ -z $(DESTDIR) ]; then \
423
 
                update-rc.d mandos defaults 25 15;\
424
 
        fi
425
 
        gzip --best --to-stdout mandos.8 \
426
 
                > $(MANDIR)/man8/mandos.8.gz
427
 
        gzip --best --to-stdout mandos-monitor.8 \
428
 
                > $(MANDIR)/man8/mandos-monitor.8.gz
429
 
        gzip --best --to-stdout mandos-ctl.8 \
430
 
                > $(MANDIR)/man8/mandos-ctl.8.gz
431
 
        gzip --best --to-stdout mandos.conf.5 \
432
 
                > $(MANDIR)/man5/mandos.conf.5.gz
433
 
        gzip --best --to-stdout mandos-clients.conf.5 \
434
 
                > $(MANDIR)/man5/mandos-clients.conf.5.gz
435
 
        gzip --best --to-stdout intro.8mandos \
436
 
                > $(MANDIR)/man8/intro.8mandos.gz
437
 
 
438
 
.PHONY: install-client-nokey
439
 
install-client-nokey: all doc
440
 
        install --directory $(LIBDIR)/mandos $(CONFDIR)
441
 
        install --directory --mode=u=rwx $(KEYDIR) \
442
 
                $(LIBDIR)/mandos/plugins.d \
443
 
                $(LIBDIR)/mandos/plugin-helpers
444
 
        if [ "$(SYSUSERS)" != "$(DESTDIR)" \
445
 
                        -a -d "$(SYSUSERS)" ]; then \
446
 
                install --mode=u=rw,go=r sysusers.d-mandos.conf \
447
 
                        $(SYSUSERS)/mandos-client.conf; \
448
 
        fi
449
 
        if [ "$(CONFDIR)" != "$(LIBDIR)/mandos" ]; then \
450
 
                install --mode=u=rwx \
451
 
                        --directory "$(CONFDIR)/plugins.d" \
452
 
                        "$(CONFDIR)/plugin-helpers"; \
453
 
        fi
454
 
        install --mode=u=rwx,go=rx --directory \
455
 
                "$(CONFDIR)/network-hooks.d"
456
 
        install --mode=u=rwx,go=rx \
457
 
                --target-directory=$(LIBDIR)/mandos plugin-runner
458
 
        install --mode=u=rwx,go=rx \
459
 
                --target-directory=$(LIBDIR)/mandos \
460
 
                mandos-to-cryptroot-unlock
461
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
462
 
                mandos-keygen
463
 
        install --mode=u=rwx,go=rx \
464
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
465
 
                plugins.d/password-prompt
466
 
        install --mode=u=rwxs,go=rx \
467
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
468
 
                plugins.d/mandos-client
469
 
        install --mode=u=rwxs,go=rx \
470
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
471
 
                plugins.d/usplash
472
 
        install --mode=u=rwxs,go=rx \
473
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
474
 
                plugins.d/splashy
475
 
        install --mode=u=rwxs,go=rx \
476
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
477
 
                plugins.d/askpass-fifo
478
 
        install --mode=u=rwxs,go=rx \
479
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
480
 
                plugins.d/plymouth
481
 
        install --mode=u=rwx,go=rx \
482
 
                --target-directory=$(LIBDIR)/mandos/plugin-helpers \
483
 
                plugin-helpers/mandos-client-iprouteadddel
484
 
        install initramfs-tools-hook \
485
 
                $(INITRAMFSTOOLS)/hooks/mandos
486
 
        install --mode=u=rw,go=r initramfs-tools-conf \
487
 
                $(INITRAMFSTOOLS)/conf.d/mandos-conf
488
 
        install --mode=u=rw,go=r initramfs-tools-conf-hook \
489
 
                $(INITRAMFSTOOLS)/conf-hooks.d/zz-mandos
490
 
        install initramfs-tools-script \
491
 
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos
492
 
        install initramfs-tools-script-stop \
493
 
                $(INITRAMFSTOOLS)/scripts/local-premount/mandos
494
 
        install --directory $(DRACUTMODULE)
495
 
        install --mode=u=rw,go=r --target-directory=$(DRACUTMODULE) \
496
 
                dracut-module/ask-password-mandos.path \
497
 
                dracut-module/ask-password-mandos.service
498
 
        install --mode=u=rwxs,go=rx \
499
 
                --target-directory=$(DRACUTMODULE) \
500
 
                dracut-module/module-setup.sh \
501
 
                dracut-module/cmdline-mandos.sh \
502
 
                dracut-module/password-agent
503
 
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
504
 
        gzip --best --to-stdout mandos-keygen.8 \
505
 
                > $(MANDIR)/man8/mandos-keygen.8.gz
506
 
        gzip --best --to-stdout plugin-runner.8mandos \
507
 
                > $(MANDIR)/man8/plugin-runner.8mandos.gz
508
 
        gzip --best --to-stdout plugins.d/mandos-client.8mandos \
509
 
                > $(MANDIR)/man8/mandos-client.8mandos.gz
510
 
        gzip --best --to-stdout plugins.d/password-prompt.8mandos \
511
 
                > $(MANDIR)/man8/password-prompt.8mandos.gz
512
 
        gzip --best --to-stdout plugins.d/usplash.8mandos \
513
 
                > $(MANDIR)/man8/usplash.8mandos.gz
514
 
        gzip --best --to-stdout plugins.d/splashy.8mandos \
515
 
                > $(MANDIR)/man8/splashy.8mandos.gz
516
 
        gzip --best --to-stdout plugins.d/askpass-fifo.8mandos \
517
 
                > $(MANDIR)/man8/askpass-fifo.8mandos.gz
518
 
        gzip --best --to-stdout plugins.d/plymouth.8mandos \
519
 
                > $(MANDIR)/man8/plymouth.8mandos.gz
520
 
        gzip --best --to-stdout dracut-module/password-agent.8mandos \
521
 
                > $(MANDIR)/man8/password-agent.8mandos.gz
522
 
 
523
 
.PHONY: install-client
524
 
install-client: install-client-nokey
525
 
# Post-installation stuff
526
 
        -$(PREFIX)/sbin/mandos-keygen --dir "$(KEYDIR)"
527
 
        if command -v update-initramfs >/dev/null; then \
528
 
            update-initramfs -k all -u; \
529
 
        elif command -v dracut >/dev/null; then \
530
 
            for initrd in $(DESTDIR)/boot/initr*-$(LINUXVERSION); do \
531
 
                if [ -w "$$initrd" ]; then \
532
 
                    chmod go-r "$$initrd"; \
533
 
                    dracut --force "$$initrd"; \
534
 
                fi; \
535
 
            done; \
536
 
        fi
537
 
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
538
 
 
539
 
.PHONY: uninstall
540
 
uninstall: uninstall-server uninstall-client
541
 
 
542
 
.PHONY: uninstall-server
543
 
uninstall-server:
544
 
        -rm --force $(PREFIX)/sbin/mandos \
545
 
                $(PREFIX)/sbin/mandos-ctl \
546
 
                $(PREFIX)/sbin/mandos-monitor \
547
 
                $(MANDIR)/man8/mandos.8.gz \
548
 
                $(MANDIR)/man8/mandos-monitor.8.gz \
549
 
                $(MANDIR)/man8/mandos-ctl.8.gz \
550
 
                $(MANDIR)/man5/mandos.conf.5.gz \
551
 
                $(MANDIR)/man5/mandos-clients.conf.5.gz
552
 
        update-rc.d -f mandos remove
553
 
        -rmdir $(CONFDIR)
554
 
 
555
 
.PHONY: uninstall-client
556
 
uninstall-client:
557
 
# Refuse to uninstall client if /etc/crypttab is explicitly configured
558
 
# to use it.
559
 
        ! grep --regexp='^ *[^ #].*keyscript=[^,=]*/mandos/' \
560
 
                $(DESTDIR)/etc/crypttab
561
 
        -rm --force $(PREFIX)/sbin/mandos-keygen \
562
 
                $(LIBDIR)/mandos/plugin-runner \
563
 
                $(LIBDIR)/mandos/plugins.d/password-prompt \
564
 
                $(LIBDIR)/mandos/plugins.d/mandos-client \
565
 
                $(LIBDIR)/mandos/plugins.d/usplash \
566
 
                $(LIBDIR)/mandos/plugins.d/splashy \
567
 
                $(LIBDIR)/mandos/plugins.d/askpass-fifo \
568
 
                $(LIBDIR)/mandos/plugins.d/plymouth \
569
 
                $(INITRAMFSTOOLS)/hooks/mandos \
570
 
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos \
571
 
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos \
572
 
                $(INITRAMFSTOOLS)/scripts/local-premount/mandos \
573
 
                $(DRACUTMODULE)/ask-password-mandos.path \
574
 
                $(DRACUTMODULE)/ask-password-mandos.service \
575
 
                $(DRACUTMODULE)/module-setup.sh \
576
 
                $(DRACUTMODULE)/cmdline-mandos.sh \
577
 
                $(DRACUTMODULE)/password-agent \
578
 
                $(MANDIR)/man8/mandos-keygen.8.gz \
579
 
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
580
 
                $(MANDIR)/man8/mandos-client.8mandos.gz
581
 
                $(MANDIR)/man8/password-prompt.8mandos.gz \
582
 
                $(MANDIR)/man8/usplash.8mandos.gz \
583
 
                $(MANDIR)/man8/splashy.8mandos.gz \
584
 
                $(MANDIR)/man8/askpass-fifo.8mandos.gz \
585
 
                $(MANDIR)/man8/plymouth.8mandos.gz \
586
 
                $(MANDIR)/man8/password-agent.8mandos.gz \
587
 
        -rmdir $(LIBDIR)/mandos/plugins.d $(CONFDIR)/plugins.d \
588
 
                 $(LIBDIR)/mandos $(CONFDIR) $(KEYDIR) $(DRACUTMODULE)
589
 
        if command -v update-initramfs >/dev/null; then \
590
 
            update-initramfs -k all -u; \
591
 
        elif command -v dracut >/dev/null; then \
592
 
            for initrd in $(DESTDIR)/boot/initr*-$(LINUXVERSION); do \
593
 
                test -w "$$initrd" && dracut --force "$$initrd"; \
594
 
            done; \
595
 
        fi
596
 
 
597
 
.PHONY: purge
598
 
purge: purge-server purge-client
599
 
 
600
 
.PHONY: purge-server
601
 
purge-server: uninstall-server
602
 
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
603
 
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
604
 
                $(DESTDIR)/etc/default/mandos \
605
 
                $(DESTDIR)/etc/init.d/mandos \
606
 
                $(SYSTEMD)/mandos.service \
607
 
                $(DESTDIR)/run/mandos.pid \
608
 
                $(DESTDIR)/var/run/mandos.pid
609
 
        -rmdir $(CONFDIR)
610
 
 
611
 
.PHONY: purge-client
612
 
purge-client: uninstall-client
613
 
        -shred --remove $(KEYDIR)/seckey.txt $(KEYDIR)/tls-privkey.pem
614
 
        -rm --force $(CONFDIR)/plugin-runner.conf \
615
 
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt \
616
 
                $(KEYDIR)/tls-pubkey.txt $(KEYDIR)/tls-privkey.txt
617
 
        -rmdir $(KEYDIR) $(CONFDIR)/plugins.d $(CONFDIR)
 
7
        rm -f plugbasedclient