/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: Björn Påhlsson
  • Date: 2008-07-20 02:52:20 UTC
  • Revision ID: belorn@braxen-20080720025220-r5u0388uy9iu23h6
Added following support:
Pluginbased client handler
rewritten Mandos client
       Avahi instead of udp server discovery
       openpgp encrypted key support
Passprompt stand alone application for direct console input
Added logging for Mandos server

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
 
htmldir:=man
45
 
version:=1.8.5
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)))
52
 
 
53
 
LINUXVERSION:=$(shell uname --kernel-release)
54
 
 
55
 
## Use these settings for a traditional /usr/local install
56
 
# PREFIX:=$(DESTDIR)/usr/local
57
 
# CONFDIR:=$(DESTDIR)/etc/mandos
58
 
# KEYDIR:=$(DESTDIR)/etc/mandos/keys
59
 
# MANDIR:=$(PREFIX)/man
60
 
# INITRAMFSTOOLS:=$(DESTDIR)/etc/initramfs-tools
61
 
# DRACUTMODULE:=$(DESTDIR)/usr/lib/dracut/modules.d/90mandos
62
 
# STATEDIR:=$(DESTDIR)/var/lib/mandos
63
 
# LIBDIR:=$(PREFIX)/lib
64
 
##
65
 
 
66
 
## These settings are for a package-type install
67
 
PREFIX:=$(DESTDIR)/usr
68
 
CONFDIR:=$(DESTDIR)/etc/mandos
69
 
KEYDIR:=$(DESTDIR)/etc/keys/mandos
70
 
MANDIR:=$(PREFIX)/share/man
71
 
INITRAMFSTOOLS:=$(DESTDIR)/usr/share/initramfs-tools
72
 
DRACUTMODULE:=$(DESTDIR)/usr/lib/dracut/modules.d/90mandos
73
 
STATEDIR:=$(DESTDIR)/var/lib/mandos
74
 
LIBDIR:=$(shell \
75
 
        for d in \
76
 
        "/usr/lib/`dpkg-architecture \
77
 
                        -qDEB_HOST_MULTIARCH 2>/dev/null`" \
78
 
        "`rpm --eval='%{_libdir}' 2>/dev/null`" /usr/lib; do \
79
 
                if [ -d "$$d" -a "$$d" = "$${d%/}" ]; then \
80
 
                        echo "$(DESTDIR)$$d"; \
81
 
                        break; \
82
 
                fi; \
83
 
        done)
84
 
##
85
 
 
86
 
SYSTEMD:=$(DESTDIR)$(shell pkg-config systemd \
87
 
                        --variable=systemdsystemunitdir)
88
 
TMPFILES:=$(DESTDIR)$(shell pkg-config systemd --variable=tmpfilesdir)
89
 
 
90
 
GNUTLS_CFLAGS:=$(shell pkg-config --cflags-only-I gnutls)
91
 
GNUTLS_LIBS:=$(shell pkg-config --libs gnutls)
92
 
AVAHI_CFLAGS:=$(shell pkg-config --cflags-only-I avahi-core)
93
 
AVAHI_LIBS:=$(shell pkg-config --libs avahi-core)
94
 
GPGME_CFLAGS:=$(shell gpgme-config --cflags; getconf LFS_CFLAGS)
95
 
GPGME_LIBS:=$(shell gpgme-config --libs; getconf LFS_LIBS; \
96
 
        getconf LFS_LDFLAGS)
97
 
LIBNL3_CFLAGS:=$(shell pkg-config --cflags-only-I libnl-route-3.0)
98
 
LIBNL3_LIBS:=$(shell pkg-config --libs libnl-route-3.0)
99
 
GLIB_CFLAGS:=$(shell pkg-config --cflags glib-2.0)
100
 
GLIB_LIBS:=$(shell pkg-config --libs glib-2.0)
101
 
 
102
 
# Do not change these two
103
 
CFLAGS+=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) \
104
 
        $(OPTIMIZE) $(LANGUAGE) -DVERSION='"$(version)"'
105
 
LDFLAGS+=-Xlinker --as-needed $(COVERAGE) $(LINK_FORTIFY) $(strip \
106
 
        ) $(foreach flag,$(LINK_FORTIFY_LD),-Xlinker $(flag))
107
 
 
108
 
# Commands to format a DocBook <refentry> document into a manual page
109
 
DOCBOOKTOMAN=$(strip cd $(dir $<); xsltproc --nonet --xinclude \
110
 
        --param man.charmap.use.subset          0 \
111
 
        --param make.year.ranges                1 \
112
 
        --param make.single.year.ranges         1 \
113
 
        --param man.output.quietly              1 \
114
 
        --param man.authors.section.enabled     0 \
115
 
        /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
116
 
        $(notdir $<); \
117
 
        if locale --all 2>/dev/null | grep --regexp='^en_US\.utf8$$' \
118
 
        && command -v man >/dev/null; then LANG=en_US.UTF-8 \
119
 
        MANWIDTH=80 man --warnings --encoding=UTF-8 --local-file \
120
 
        $(notdir $@); fi >/dev/null)
121
 
 
122
 
DOCBOOKTOHTML=$(strip xsltproc --nonet --xinclude \
123
 
        --param make.year.ranges                1 \
124
 
        --param make.single.year.ranges         1 \
125
 
        --param man.output.quietly              1 \
126
 
        --param man.authors.section.enabled     0 \
127
 
        --param citerefentry.link               1 \
128
 
        --output $@ \
129
 
        /usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl \
130
 
        $<; $(HTMLPOST) $@)
131
 
# Fix citerefentry links
132
 
HTMLPOST:=$(SED) --in-place \
133
 
        --expression='s/\(<a class="citerefentry" href="\)\("><span class="citerefentry"><span class="refentrytitle">\)\([^<]*\)\(<\/span>(\)\([^)]*\)\()<\/span><\/a>\)/\1\3.\5\2\3\4\5\6/g'
134
 
 
135
 
PLUGINS:=plugins.d/password-prompt plugins.d/mandos-client \
136
 
        plugins.d/usplash plugins.d/splashy plugins.d/askpass-fifo \
137
 
        plugins.d/plymouth
138
 
PLUGIN_HELPERS:=plugin-helpers/mandos-client-iprouteadddel
139
 
CPROGS:=plugin-runner dracut-module/password-agent $(PLUGINS) \
140
 
        $(PLUGIN_HELPERS)
141
 
PROGS:=mandos mandos-keygen mandos-ctl mandos-monitor $(CPROGS)
142
 
DOCS:=mandos.8 mandos-keygen.8 mandos-monitor.8 mandos-ctl.8 \
143
 
        mandos.conf.5 mandos-clients.conf.5 plugin-runner.8mandos \
144
 
        dracut-module/password-agent.8mandos \
145
 
        plugins.d/mandos-client.8mandos \
146
 
        plugins.d/password-prompt.8mandos plugins.d/usplash.8mandos \
147
 
        plugins.d/splashy.8mandos plugins.d/askpass-fifo.8mandos \
148
 
        plugins.d/plymouth.8mandos intro.8mandos
149
 
 
150
 
htmldocs:=$(addsuffix .xhtml,$(DOCS))
151
 
 
152
 
objects:=$(addsuffix .o,$(CPROGS))
153
 
 
154
 
all: $(PROGS) mandos.lsm
155
 
 
156
 
doc: $(DOCS)
157
 
 
158
 
html: $(htmldocs)
159
 
 
160
 
%.5: %.xml common.ent legalnotice.xml
161
 
        $(DOCBOOKTOMAN)
162
 
%.5.xhtml: %.xml common.ent legalnotice.xml
163
 
        $(DOCBOOKTOHTML)
164
 
 
165
 
%.8: %.xml common.ent legalnotice.xml
166
 
        $(DOCBOOKTOMAN)
167
 
%.8.xhtml: %.xml common.ent legalnotice.xml
168
 
        $(DOCBOOKTOHTML)
169
 
 
170
 
%.8mandos: %.xml common.ent legalnotice.xml
171
 
        $(DOCBOOKTOMAN)
172
 
%.8mandos.xhtml: %.xml common.ent legalnotice.xml
173
 
        $(DOCBOOKTOHTML)
174
 
 
175
 
intro.8mandos: intro.xml common.ent legalnotice.xml
176
 
        $(DOCBOOKTOMAN)
177
 
intro.8mandos.xhtml: intro.xml common.ent legalnotice.xml
178
 
        $(DOCBOOKTOHTML)
179
 
 
180
 
mandos.8: mandos.xml common.ent mandos-options.xml overview.xml \
181
 
                legalnotice.xml
182
 
        $(DOCBOOKTOMAN)
183
 
mandos.8.xhtml: mandos.xml common.ent mandos-options.xml \
184
 
                overview.xml legalnotice.xml
185
 
        $(DOCBOOKTOHTML)
186
 
 
187
 
mandos-keygen.8: mandos-keygen.xml common.ent overview.xml \
188
 
                legalnotice.xml
189
 
        $(DOCBOOKTOMAN)
190
 
mandos-keygen.8.xhtml: mandos-keygen.xml common.ent overview.xml \
191
 
                 legalnotice.xml
192
 
        $(DOCBOOKTOHTML)
193
 
 
194
 
mandos-monitor.8: mandos-monitor.xml common.ent overview.xml \
195
 
                legalnotice.xml
196
 
        $(DOCBOOKTOMAN)
197
 
mandos-monitor.8.xhtml: mandos-monitor.xml common.ent overview.xml \
198
 
                 legalnotice.xml
199
 
        $(DOCBOOKTOHTML)
200
 
 
201
 
mandos-ctl.8: mandos-ctl.xml common.ent overview.xml \
202
 
                legalnotice.xml
203
 
        $(DOCBOOKTOMAN)
204
 
mandos-ctl.8.xhtml: mandos-ctl.xml common.ent overview.xml \
205
 
                 legalnotice.xml
206
 
        $(DOCBOOKTOHTML)
207
 
 
208
 
mandos.conf.5: mandos.conf.xml common.ent mandos-options.xml \
209
 
                legalnotice.xml
210
 
        $(DOCBOOKTOMAN)
211
 
mandos.conf.5.xhtml: mandos.conf.xml common.ent mandos-options.xml \
212
 
                legalnotice.xml
213
 
        $(DOCBOOKTOHTML)
214
 
 
215
 
plugin-runner.8mandos: plugin-runner.xml common.ent overview.xml \
216
 
                legalnotice.xml
217
 
        $(DOCBOOKTOMAN)
218
 
plugin-runner.8mandos.xhtml: plugin-runner.xml common.ent \
219
 
                overview.xml legalnotice.xml
220
 
        $(DOCBOOKTOHTML)
221
 
 
222
 
dracut-module/password-agent.8mandos: \
223
 
                dracut-module/password-agent.xml common.ent \
224
 
                overview.xml legalnotice.xml
225
 
        $(DOCBOOKTOMAN)
226
 
dracut-module/password-agent.8mandos.xhtml: \
227
 
                dracut-module/password-agent.xml common.ent \
228
 
                overview.xml legalnotice.xml
229
 
        $(DOCBOOKTOHTML)
230
 
 
231
 
plugins.d/mandos-client.8mandos: plugins.d/mandos-client.xml \
232
 
                                        common.ent \
233
 
                                        mandos-options.xml \
234
 
                                        overview.xml legalnotice.xml
235
 
        $(DOCBOOKTOMAN)
236
 
plugins.d/mandos-client.8mandos.xhtml: plugins.d/mandos-client.xml \
237
 
                                        common.ent \
238
 
                                        mandos-options.xml \
239
 
                                        overview.xml legalnotice.xml
240
 
        $(DOCBOOKTOHTML)
241
 
 
242
 
# Update all these files with version number $(version)
243
 
common.ent: Makefile
244
 
        $(strip $(SED) --in-place \
245
 
                --expression='s/^\(<!ENTITY version "\)[^"]*">$$/\1$(version)">/' \
246
 
                $@)
247
 
 
248
 
mandos: Makefile
249
 
        $(strip $(SED) --in-place \
250
 
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
251
 
                $@)
252
 
 
253
 
mandos-keygen: Makefile
254
 
        $(strip $(SED) --in-place \
255
 
                --expression='s/^\(VERSION="\)[^"]*"$$/\1$(version)"/' \
256
 
                $@)
257
 
 
258
 
mandos-ctl: Makefile
259
 
        $(strip $(SED) --in-place \
260
 
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
261
 
                $@)
262
 
 
263
 
mandos-monitor: Makefile
264
 
        $(strip $(SED) --in-place \
265
 
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
266
 
                $@)
267
 
 
268
 
mandos.lsm: Makefile
269
 
        $(strip $(SED) --in-place \
270
 
                --expression='s/^\(Version:\).*/\1\t$(version)/' \
271
 
                $@)
272
 
        $(strip $(SED) --in-place \
273
 
                --expression='s/^\(Entered-date:\).*/\1\t$(shell date --rfc-3339=date --reference=Makefile)/' \
274
 
                $@)
275
 
        $(strip $(SED) --in-place \
276
 
                --expression='s/\(mandos_\)[0-9.]\+\(\.orig\.tar\.gz\)/\1$(version)\2/' \
277
 
                $@)
278
 
 
279
 
# Need to add the GnuTLS, Avahi and GPGME libraries
280
 
plugins.d/mandos-client: plugins.d/mandos-client.c
281
 
        $(LINK.c) $^ $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(strip\
282
 
                ) $(GPGME_CFLAGS) $(GNUTLS_LIBS) $(strip\
283
 
                ) $(AVAHI_LIBS) $(GPGME_LIBS) $(LOADLIBES) $(strip\
284
 
                ) $(LDLIBS) -o $@
285
 
 
286
 
# Need to add the libnl-route library
287
 
plugin-helpers/mandos-client-iprouteadddel: plugin-helpers/mandos-client-iprouteadddel.c
288
 
        $(LINK.c) $(LIBNL3_CFLAGS) $^ $(LIBNL3_LIBS) $(strip\
289
 
                ) $(LOADLIBES) $(LDLIBS) -o $@
290
 
 
291
 
# Need to add the GLib and pthread libraries
292
 
dracut-module/password-agent: dracut-module/password-agent.c
293
 
        $(LINK.c) $(GLIB_CFLAGS) $^ $(GLIB_LIBS) -lpthread $(strip\
294
 
                ) $(LOADLIBES) $(LDLIBS) -o $@
295
 
 
296
 
.PHONY : all doc html clean distclean mostlyclean maintainer-clean \
297
 
        check run-client run-server install install-html \
298
 
        install-server install-client-nokey install-client uninstall \
299
 
        uninstall-server uninstall-client purge purge-server \
300
 
        purge-client
 
1
CFLAGS="-Wall -std=gnu99"
 
2
LDFLAGS=-lgnutls
 
3
 
 
4
all: plugbasedclient
301
5
 
302
6
clean:
303
 
        -rm --force $(CPROGS) $(objects) $(htmldocs) $(DOCS) core
304
 
 
305
 
distclean: clean
306
 
mostlyclean: clean
307
 
maintainer-clean: clean
308
 
        -rm --force --recursive keydir confdir statedir
309
 
 
310
 
check: all
311
 
        ./mandos --check
312
 
        ./mandos-ctl --check
313
 
        ./mandos-keygen --version
314
 
        ./plugin-runner --version
315
 
        ./plugin-helpers/mandos-client-iprouteadddel --version
316
 
        ./dracut-module/password-agent --test
317
 
 
318
 
# Run the client with a local config and key
319
 
run-client: all keydir/seckey.txt keydir/pubkey.txt \
320
 
                        keydir/tls-privkey.pem keydir/tls-pubkey.pem
321
 
        @echo '######################################################'
322
 
        @echo '# The following error messages are harmless and can  #'
323
 
        @echo '#  be safely ignored:                                #'
324
 
        @echo '## From plugin-runner:                               #'
325
 
        @echo '# setgid: Operation not permitted                    #'
326
 
        @echo '# setuid: Operation not permitted                    #'
327
 
        @echo '## From askpass-fifo:                                #'
328
 
        @echo '# mkfifo: Permission denied                          #'
329
 
        @echo '## From mandos-client:                               #'
330
 
        @echo '# Failed to raise privileges: Operation not permi... #'
331
 
        @echo '# Warning: network hook "*" exited with status *     #'
332
 
        @echo '# ioctl SIOCSIFFLAGS +IFF_UP: Operation not permi... #'
333
 
        @echo '# Failed to bring up interface "*": Operation not... #'
334
 
        @echo '#                                                    #'
335
 
        @echo '# (The messages are caused by not running as root,   #'
336
 
        @echo '# but you should NOT run "make run-client" as root   #'
337
 
        @echo '# unless you also unpacked and compiled Mandos as    #'
338
 
        @echo '# root, which is also NOT recommended.)              #'
339
 
        @echo '######################################################'
340
 
# We set GNOME_KEYRING_CONTROL to block pam_gnome_keyring
341
 
        ./plugin-runner --plugin-dir=plugins.d \
342
 
                --plugin-helper-dir=plugin-helpers \
343
 
                --config-file=plugin-runner.conf \
344
 
                --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 \
345
 
                --env-for=mandos-client:GNOME_KEYRING_CONTROL= \
346
 
                $(CLIENTARGS)
347
 
 
348
 
# Used by run-client
349
 
keydir/seckey.txt keydir/pubkey.txt keydir/tls-privkey.pem keydir/tls-pubkey.pem: mandos-keygen
350
 
        install --directory keydir
351
 
        ./mandos-keygen --dir keydir --force
352
 
 
353
 
# Run the server with a local config
354
 
run-server: confdir/mandos.conf confdir/clients.conf statedir
355
 
        ./mandos --debug --no-dbus --configdir=confdir \
356
 
                --statedir=statedir $(SERVERARGS)
357
 
 
358
 
# Used by run-server
359
 
confdir/mandos.conf: mandos.conf
360
 
        install --directory confdir
361
 
        install --mode=u=rw,go=r $^ $@
362
 
confdir/clients.conf: clients.conf keydir/seckey.txt keydir/tls-pubkey.pem
363
 
        install --directory confdir
364
 
        install --mode=u=rw $< $@
365
 
# Add a client password
366
 
        ./mandos-keygen --dir keydir --password --no-ssh >> $@
367
 
statedir:
368
 
        install --directory statedir
369
 
 
370
 
install: install-server install-client-nokey
371
 
 
372
 
install-html: html
373
 
        install --directory $(htmldir)
374
 
        install --mode=u=rw,go=r --target-directory=$(htmldir) \
375
 
                $(htmldocs)
376
 
 
377
 
install-server: doc
378
 
        install --directory $(CONFDIR)
379
 
        if install --directory --mode=u=rwx --owner=$(USER) \
380
 
                --group=$(GROUP) $(STATEDIR); then \
381
 
                :; \
382
 
        elif install --directory --mode=u=rwx $(STATEDIR); then \
383
 
                chown -- $(USER):$(GROUP) $(STATEDIR) || :; \
384
 
        fi
385
 
        if [ "$(TMPFILES)" != "$(DESTDIR)" \
386
 
                        -a -d "$(TMPFILES)" ]; then \
387
 
                install --mode=u=rw,go=r tmpfiles.d-mandos.conf \
388
 
                        $(TMPFILES)/mandos.conf; \
389
 
        fi
390
 
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
391
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
392
 
                mandos-ctl
393
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
394
 
                mandos-monitor
395
 
        install --mode=u=rw,go=r --target-directory=$(CONFDIR) \
396
 
                mandos.conf
397
 
        install --mode=u=rw --target-directory=$(CONFDIR) \
398
 
                clients.conf
399
 
        install --mode=u=rw,go=r dbus-mandos.conf \
400
 
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
401
 
        install --mode=u=rwx,go=rx init.d-mandos \
402
 
                $(DESTDIR)/etc/init.d/mandos
403
 
        if [ "$(SYSTEMD)" != "$(DESTDIR)" -a -d "$(SYSTEMD)" ]; then \
404
 
                install --mode=u=rw,go=r mandos.service $(SYSTEMD); \
405
 
        fi
406
 
        install --mode=u=rw,go=r default-mandos \
407
 
                $(DESTDIR)/etc/default/mandos
408
 
        if [ -z $(DESTDIR) ]; then \
409
 
                update-rc.d mandos defaults 25 15;\
410
 
        fi
411
 
        gzip --best --to-stdout mandos.8 \
412
 
                > $(MANDIR)/man8/mandos.8.gz
413
 
        gzip --best --to-stdout mandos-monitor.8 \
414
 
                > $(MANDIR)/man8/mandos-monitor.8.gz
415
 
        gzip --best --to-stdout mandos-ctl.8 \
416
 
                > $(MANDIR)/man8/mandos-ctl.8.gz
417
 
        gzip --best --to-stdout mandos.conf.5 \
418
 
                > $(MANDIR)/man5/mandos.conf.5.gz
419
 
        gzip --best --to-stdout mandos-clients.conf.5 \
420
 
                > $(MANDIR)/man5/mandos-clients.conf.5.gz
421
 
        gzip --best --to-stdout intro.8mandos \
422
 
                > $(MANDIR)/man8/intro.8mandos.gz
423
 
 
424
 
install-client-nokey: all doc
425
 
        install --directory $(LIBDIR)/mandos $(CONFDIR)
426
 
        install --directory --mode=u=rwx $(KEYDIR) \
427
 
                $(LIBDIR)/mandos/plugins.d \
428
 
                $(LIBDIR)/mandos/plugin-helpers
429
 
        if [ "$(CONFDIR)" != "$(LIBDIR)/mandos" ]; then \
430
 
                install --mode=u=rwx \
431
 
                        --directory "$(CONFDIR)/plugins.d" \
432
 
                        "$(CONFDIR)/plugin-helpers"; \
433
 
        fi
434
 
        install --mode=u=rwx,go=rx --directory \
435
 
                "$(CONFDIR)/network-hooks.d"
436
 
        install --mode=u=rwx,go=rx \
437
 
                --target-directory=$(LIBDIR)/mandos plugin-runner
438
 
        install --mode=u=rwx,go=rx \
439
 
                --target-directory=$(LIBDIR)/mandos \
440
 
                mandos-to-cryptroot-unlock
441
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
442
 
                mandos-keygen
443
 
        install --mode=u=rwx,go=rx \
444
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
445
 
                plugins.d/password-prompt
446
 
        install --mode=u=rwxs,go=rx \
447
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
448
 
                plugins.d/mandos-client
449
 
        install --mode=u=rwxs,go=rx \
450
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
451
 
                plugins.d/usplash
452
 
        install --mode=u=rwxs,go=rx \
453
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
454
 
                plugins.d/splashy
455
 
        install --mode=u=rwxs,go=rx \
456
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
457
 
                plugins.d/askpass-fifo
458
 
        install --mode=u=rwxs,go=rx \
459
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
460
 
                plugins.d/plymouth
461
 
        install --mode=u=rwx,go=rx \
462
 
                --target-directory=$(LIBDIR)/mandos/plugin-helpers \
463
 
                plugin-helpers/mandos-client-iprouteadddel
464
 
        install initramfs-tools-hook \
465
 
                $(INITRAMFSTOOLS)/hooks/mandos
466
 
        install --mode=u=rw,go=r initramfs-tools-conf \
467
 
                $(INITRAMFSTOOLS)/conf.d/mandos-conf
468
 
        install --mode=u=rw,go=r initramfs-tools-conf-hook \
469
 
                $(INITRAMFSTOOLS)/conf-hooks.d/zz-mandos
470
 
        install initramfs-tools-script \
471
 
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos
472
 
        install initramfs-tools-script-stop \
473
 
                $(INITRAMFSTOOLS)/scripts/local-premount/mandos
474
 
        install --directory $(DRACUTMODULE)
475
 
        install --mode=u=rw,go=r --target-directory=$(DRACUTMODULE) \
476
 
                dracut-module/ask-password-mandos.path \
477
 
                dracut-module/ask-password-mandos.service
478
 
        install --mode=u=rwxs,go=rx \
479
 
                --target-directory=$(DRACUTMODULE) \
480
 
                dracut-module/module-setup.sh \
481
 
                dracut-module/cmdline-mandos.sh \
482
 
                dracut-module/password-agent
483
 
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
484
 
        gzip --best --to-stdout mandos-keygen.8 \
485
 
                > $(MANDIR)/man8/mandos-keygen.8.gz
486
 
        gzip --best --to-stdout plugin-runner.8mandos \
487
 
                > $(MANDIR)/man8/plugin-runner.8mandos.gz
488
 
        gzip --best --to-stdout plugins.d/mandos-client.8mandos \
489
 
                > $(MANDIR)/man8/mandos-client.8mandos.gz
490
 
        gzip --best --to-stdout plugins.d/password-prompt.8mandos \
491
 
                > $(MANDIR)/man8/password-prompt.8mandos.gz
492
 
        gzip --best --to-stdout plugins.d/usplash.8mandos \
493
 
                > $(MANDIR)/man8/usplash.8mandos.gz
494
 
        gzip --best --to-stdout plugins.d/splashy.8mandos \
495
 
                > $(MANDIR)/man8/splashy.8mandos.gz
496
 
        gzip --best --to-stdout plugins.d/askpass-fifo.8mandos \
497
 
                > $(MANDIR)/man8/askpass-fifo.8mandos.gz
498
 
        gzip --best --to-stdout plugins.d/plymouth.8mandos \
499
 
                > $(MANDIR)/man8/plymouth.8mandos.gz
500
 
        gzip --best --to-stdout dracut-module/password-agent.8mandos \
501
 
                > $(MANDIR)/man8/password-agent.8mandos.gz
502
 
 
503
 
install-client: install-client-nokey
504
 
# Post-installation stuff
505
 
        -$(PREFIX)/sbin/mandos-keygen --dir "$(KEYDIR)"
506
 
        if command -v update-initramfs >/dev/null; then \
507
 
            update-initramfs -k all -u; \
508
 
        elif command -v dracut >/dev/null; then \
509
 
            for initrd in $(DESTDIR)/boot/initr*-$(LINUXVERSION); do \
510
 
                if [ -w "$$initrd" ]; then \
511
 
                    chmod go-r "$$initrd"; \
512
 
                    dracut --force "$$initrd"; \
513
 
                fi; \
514
 
            done; \
515
 
        fi
516
 
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
517
 
 
518
 
uninstall: uninstall-server uninstall-client
519
 
 
520
 
uninstall-server:
521
 
        -rm --force $(PREFIX)/sbin/mandos \
522
 
                $(PREFIX)/sbin/mandos-ctl \
523
 
                $(PREFIX)/sbin/mandos-monitor \
524
 
                $(MANDIR)/man8/mandos.8.gz \
525
 
                $(MANDIR)/man8/mandos-monitor.8.gz \
526
 
                $(MANDIR)/man8/mandos-ctl.8.gz \
527
 
                $(MANDIR)/man5/mandos.conf.5.gz \
528
 
                $(MANDIR)/man5/mandos-clients.conf.5.gz
529
 
        update-rc.d -f mandos remove
530
 
        -rmdir $(CONFDIR)
531
 
 
532
 
uninstall-client:
533
 
# Refuse to uninstall client if /etc/crypttab is explicitly configured
534
 
# to use it.
535
 
        ! grep --regexp='^ *[^ #].*keyscript=[^,=]*/mandos/' \
536
 
                $(DESTDIR)/etc/crypttab
537
 
        -rm --force $(PREFIX)/sbin/mandos-keygen \
538
 
                $(LIBDIR)/mandos/plugin-runner \
539
 
                $(LIBDIR)/mandos/plugins.d/password-prompt \
540
 
                $(LIBDIR)/mandos/plugins.d/mandos-client \
541
 
                $(LIBDIR)/mandos/plugins.d/usplash \
542
 
                $(LIBDIR)/mandos/plugins.d/splashy \
543
 
                $(LIBDIR)/mandos/plugins.d/askpass-fifo \
544
 
                $(LIBDIR)/mandos/plugins.d/plymouth \
545
 
                $(INITRAMFSTOOLS)/hooks/mandos \
546
 
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos \
547
 
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos \
548
 
                $(INITRAMFSTOOLS)/scripts/local-premount/mandos \
549
 
                $(DRACUTMODULE)/ask-password-mandos.path \
550
 
                $(DRACUTMODULE)/ask-password-mandos.service \
551
 
                $(DRACUTMODULE)/module-setup.sh \
552
 
                $(DRACUTMODULE)/cmdline-mandos.sh \
553
 
                $(DRACUTMODULE)/password-agent \
554
 
                $(MANDIR)/man8/mandos-keygen.8.gz \
555
 
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
556
 
                $(MANDIR)/man8/mandos-client.8mandos.gz
557
 
                $(MANDIR)/man8/password-prompt.8mandos.gz \
558
 
                $(MANDIR)/man8/usplash.8mandos.gz \
559
 
                $(MANDIR)/man8/splashy.8mandos.gz \
560
 
                $(MANDIR)/man8/askpass-fifo.8mandos.gz \
561
 
                $(MANDIR)/man8/plymouth.8mandos.gz \
562
 
                $(MANDIR)/man8/password-agent.8mandos.gz \
563
 
        -rmdir $(LIBDIR)/mandos/plugins.d $(CONFDIR)/plugins.d \
564
 
                 $(LIBDIR)/mandos $(CONFDIR) $(KEYDIR) $(DRACUTMODULE)
565
 
        if command -v update-initramfs >/dev/null; then \
566
 
            update-initramfs -k all -u; \
567
 
        elif command -v dracut >/dev/null; then \
568
 
            for initrd in $(DESTDIR)/boot/initr*-$(LINUXVERSION); do \
569
 
                test -w "$$initrd" && dracut --force "$$initrd"; \
570
 
            done; \
571
 
        fi
572
 
 
573
 
purge: purge-server purge-client
574
 
 
575
 
purge-server: uninstall-server
576
 
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
577
 
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
578
 
                $(DESTDIR)/etc/default/mandos \
579
 
                $(DESTDIR)/etc/init.d/mandos \
580
 
                $(SYSTEMD)/mandos.service \
581
 
                $(DESTDIR)/run/mandos.pid \
582
 
                $(DESTDIR)/var/run/mandos.pid
583
 
        -rmdir $(CONFDIR)
584
 
 
585
 
purge-client: uninstall-client
586
 
        -shred --remove $(KEYDIR)/seckey.txt $(KEYDIR)/tls-privkey.pem
587
 
        -rm --force $(CONFDIR)/plugin-runner.conf \
588
 
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt \
589
 
                $(KEYDIR)/tls-pubkey.txt $(KEYDIR)/tls-privkey.txt
590
 
        -rmdir $(KEYDIR) $(CONFDIR)/plugins.d $(CONFDIR)
 
7
        rm -f plugbasedclient
 
8
 
 
9
client_debug: client
 
10
        mv -f client client.tmp
 
11
        $(MAKE) client CXXFLAGS="$(CXXFLAGS) -DDEBUG -DCERT_ROOT=\\\"./\\\""
 
12
        mv client client_debug
 
13
        mv client.tmp client