/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: 2015-03-10 18:03:38 UTC
  • Revision ID: teddy@recompile.se-20150310180338-pcxw6r2qmw9k6br9
Add ":!RSA" to GnuTLS priority string, to disallow non-DHE kx.

If Mandos was somehow made to use a non-ephemeral Diffie-Hellman key
exchange algorithm in the TLS handshake, any saved network traffic
could then be decrypted later if the Mandos client key was obtained.
By default, Mandos uses ephemeral DH key exchanges which does not have
this problem, but a non-ephemeral key exchange algorithm was still
enabled by default.  The simplest solution is to simply turn that off,
which ensures that Mandos will always use ephemeral DH key exchanges.

There is a "PFS" priority string specifier, but we can't use it because:

1. Security-wise, it is a mix between "NORMAL" and "SECURE128" - it
   enables a lot more algorithms than "SECURE256".

2. It is only available since GnuTLS 3.2.4.

Thanks to Andreas Fischer <af@bantuX.org> for reporting this issue.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
WARN=-O -Wall -Wformat=2 -Winit-self -Wmissing-include-dirs \
2
 
        -Wswitch-default -Wswitch-enum -Wunused-parameter \
3
 
        -Wstrict-aliasing=2 -Wextra -Wfloat-equal -Wundef -Wshadow \
 
1
WARN=-O -Wall -Wextra -Wdouble-promotion -Wformat=2 -Winit-self \
 
2
        -Wmissing-include-dirs -Wswitch-default -Wswitch-enum \
 
3
        -Wunused -Wuninitialized -Wstrict-overflow=5 \
 
4
        -Wsuggest-attribute=pure -Wsuggest-attribute=const \
 
5
        -Wsuggest-attribute=noreturn -Wfloat-equal -Wundef -Wshadow \
4
6
        -Wunsafe-loop-optimizations -Wpointer-arith \
5
7
        -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings \
6
 
        -Wconversion -Wstrict-prototypes -Wold-style-definition \
7
 
        -Wpacked -Wnested-externs -Wunreachable-code -Winline \
8
 
        -Wvolatile-register-var
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
 
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
#DEBUG=-ggdb3
 
14
# For info about _FORTIFY_SOURCE, see feature_test_macros(7)
 
15
# and <http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html>.
 
16
FORTIFY=-D_FORTIFY_SOURCE=2 -fstack-protector-all -fPIC
 
17
LINK_FORTIFY_LD=-z relro -z now
 
18
LINK_FORTIFY=
 
19
 
 
20
# If BROKEN_PIE is set, do not build with -pie
 
21
ifndef BROKEN_PIE
 
22
FORTIFY += -fPIE
 
23
LINK_FORTIFY += -pie
 
24
endif
13
25
#COVERAGE=--coverage
14
 
OPTIMIZE=-Os
 
26
OPTIMIZE=-Os -fno-strict-aliasing
15
27
LANGUAGE=-std=gnu99
16
 
# PREFIX=/usr/local
17
 
PREFIX=/usr
18
 
# CONFDIR=/usr/local/lib/mandos
19
 
CONFDIR=/etc/mandos
20
 
# MANDIR=/usr/local/man
21
 
MANDIR=/usr/share/man
22
 
 
23
 
GNUTLS_CFLAGS=$(shell libgnutls-config --cflags)
24
 
GNUTLS_LIBS=$(shell libgnutls-config --libs)
 
28
htmldir=man
 
29
version=1.6.9
 
30
SED=sed
 
31
 
 
32
USER=$(firstword $(subst :, ,$(shell getent passwd _mandos || getent passwd nobody || echo 65534)))
 
33
GROUP=$(firstword $(subst :, ,$(shell getent group _mandos || getent group nobody || echo 65534)))
 
34
 
 
35
## Use these settings for a traditional /usr/local install
 
36
# PREFIX=$(DESTDIR)/usr/local
 
37
# CONFDIR=$(DESTDIR)/etc/mandos
 
38
# KEYDIR=$(DESTDIR)/etc/mandos/keys
 
39
# MANDIR=$(PREFIX)/man
 
40
# INITRAMFSTOOLS=$(DESTDIR)/etc/initramfs-tools
 
41
# STATEDIR=$(DESTDIR)/var/lib/mandos
 
42
# LIBDIR=$(PREFIX)/lib
 
43
##
 
44
 
 
45
## These settings are for a package-type install
 
46
PREFIX=$(DESTDIR)/usr
 
47
CONFDIR=$(DESTDIR)/etc/mandos
 
48
KEYDIR=$(DESTDIR)/etc/keys/mandos
 
49
MANDIR=$(PREFIX)/share/man
 
50
INITRAMFSTOOLS=$(DESTDIR)/usr/share/initramfs-tools
 
51
STATEDIR=$(DESTDIR)/var/lib/mandos
 
52
LIBDIR=$(shell \
 
53
        for d in \
 
54
        "/usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null`" \
 
55
        "`rpm --eval='%{_libdir}' 2>/dev/null`" /usr/lib; do \
 
56
                if [ -d "$$d" -a "$$d" = "$${d%/}" ]; then \
 
57
                        echo "$(DESTDIR)$$d"; \
 
58
                        break; \
 
59
                fi; \
 
60
        done)
 
61
##
 
62
 
 
63
SYSTEMD=$(DESTDIR)$(shell pkg-config systemd --variable=systemdsystemunitdir)
 
64
 
 
65
GNUTLS_CFLAGS=$(shell pkg-config --cflags-only-I gnutls)
 
66
GNUTLS_LIBS=$(shell pkg-config --libs gnutls)
25
67
AVAHI_CFLAGS=$(shell pkg-config --cflags-only-I avahi-core)
26
68
AVAHI_LIBS=$(shell pkg-config --libs avahi-core)
27
 
GPGME_CFLAGS=$(shell gpgme-config --cflags)
28
 
GPGME_LIBS=$(shell gpgme-config --libs)
 
69
GPGME_CFLAGS=$(shell gpgme-config --cflags; getconf LFS_CFLAGS)
 
70
GPGME_LIBS=$(shell gpgme-config --libs; getconf LFS_LIBS; \
 
71
        getconf LFS_LDFLAGS)
29
72
 
30
73
# Do not change these two
31
 
CFLAGS=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) \
32
 
        $(LANGUAGE) $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(GPGME_CFLAGS)
33
 
LDFLAGS=$(COVERAGE)
 
74
CFLAGS+=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) \
 
75
        $(LANGUAGE) $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(GPGME_CFLAGS) \
 
76
        -DVERSION='"$(version)"'
 
77
LDFLAGS+=-Xlinker --as-needed $(COVERAGE) $(LINK_FORTIFY) $(foreach flag,$(LINK_FORTIFY_LD),-Xlinker $(flag))
34
78
 
35
 
DOCBOOKTOMAN=xsltproc --nonet \
 
79
# Commands to format a DocBook <refentry> document into a manual page
 
80
DOCBOOKTOMAN=$(strip cd $(dir $<); xsltproc --nonet --xinclude \
36
81
        --param man.charmap.use.subset          0 \
37
82
        --param make.year.ranges                1 \
38
83
        --param make.single.year.ranges         1 \
39
84
        --param man.output.quietly              1 \
40
85
        --param man.authors.section.enabled     0 \
41
 
         /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl
42
 
# DocBook-to-man post-processing to fix a \n escape bug
43
 
MANPOST=sed --in-place --expression='s,\\en,\en,g;s,\\een,\\en,g'
44
 
 
45
 
PLUGINS=plugins.d/password-prompt plugins.d/password-request
46
 
PROGS=plugin-runner $(PLUGINS)
47
 
DOCS=mandos.8 plugin-runner.8mandos mandos-keygen.8 \
48
 
        plugins.d/password-request.8mandos \
49
 
        plugins.d/password-prompt.8mandos mandos.conf.5 \
50
 
        mandos-clients.conf.5
51
 
 
52
 
objects=$(addsuffix .o,$(PROGS))
53
 
 
54
 
all: $(PROGS)
 
86
        /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
 
87
        $(notdir $<); \
 
88
        if locale --all 2>/dev/null | grep --regexp='^en_US\.utf8$$' \
 
89
        && type man 2>/dev/null; then LANG=en_US.UTF-8 MANWIDTH=80 \
 
90
        man --warnings --encoding=UTF-8 --local-file $(notdir $@); \
 
91
        fi >/dev/null)
 
92
 
 
93
DOCBOOKTOHTML=$(strip xsltproc --nonet --xinclude \
 
94
        --param make.year.ranges                1 \
 
95
        --param make.single.year.ranges         1 \
 
96
        --param man.output.quietly              1 \
 
97
        --param man.authors.section.enabled     0 \
 
98
        --param citerefentry.link               1 \
 
99
        --output $@ \
 
100
        /usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl \
 
101
        $<; $(HTMLPOST) $@)
 
102
# Fix citerefentry links
 
103
HTMLPOST=$(SED) --in-place \
 
104
        --expression='s/\(<a class="citerefentry" href="\)\("><span class="citerefentry"><span class="refentrytitle">\)\([^<]*\)\(<\/span>(\)\([^)]*\)\()<\/span><\/a>\)/\1\3.\5\2\3\4\5\6/g'
 
105
 
 
106
PLUGINS=plugins.d/password-prompt plugins.d/mandos-client \
 
107
        plugins.d/usplash plugins.d/splashy plugins.d/askpass-fifo \
 
108
        plugins.d/plymouth
 
109
CPROGS=plugin-runner $(PLUGINS)
 
110
PROGS=mandos mandos-keygen mandos-ctl mandos-monitor $(CPROGS)
 
111
DOCS=mandos.8 mandos-keygen.8 mandos-monitor.8 mandos-ctl.8 \
 
112
        mandos.conf.5 mandos-clients.conf.5 plugin-runner.8mandos \
 
113
        plugins.d/mandos-client.8mandos \
 
114
        plugins.d/password-prompt.8mandos plugins.d/usplash.8mandos \
 
115
        plugins.d/splashy.8mandos plugins.d/askpass-fifo.8mandos \
 
116
        plugins.d/plymouth.8mandos intro.8mandos
 
117
 
 
118
htmldocs=$(addsuffix .xhtml,$(DOCS))
 
119
 
 
120
objects=$(addsuffix .o,$(CPROGS))
 
121
 
 
122
all: $(PROGS) mandos.lsm
55
123
 
56
124
doc: $(DOCS)
57
125
 
58
 
%.5: %.xml
59
 
        cd $(dir $^); $(DOCBOOKTOMAN) $(notdir $^) $(MANPOST) $@
60
 
 
61
 
%.8: %.xml
62
 
        cd $(dir $^); $(DOCBOOKTOMAN) $(notdir $^); $(MANPOST) $@
63
 
 
64
 
%.8mandos: %.xml
65
 
        cd $(dir $^); $(DOCBOOKTOMAN) $(notdir $^) $(MANPOST) $@
66
 
 
67
 
plugins.d/password-request: plugins.d/password-request.o
68
 
        $(LINK.o) $(GNUTLS_LIBS) $(AVAHI_LIBS) $(GPGME_LIBS) \
69
 
                $(COMMON) $^ $(LOADLIBES) $(LDLIBS) -o $@
70
 
 
71
 
.PHONY : all doc clean distclean run-client run-server install \
72
 
        install-server install-client uninstall uninstall-server \
73
 
        uninstall-client purge purge-server purge-client
 
126
html: $(htmldocs)
 
127
 
 
128
%.5: %.xml common.ent legalnotice.xml
 
129
        $(DOCBOOKTOMAN)
 
130
%.5.xhtml: %.xml common.ent legalnotice.xml
 
131
        $(DOCBOOKTOHTML)
 
132
 
 
133
%.8: %.xml common.ent legalnotice.xml
 
134
        $(DOCBOOKTOMAN)
 
135
%.8.xhtml: %.xml common.ent legalnotice.xml
 
136
        $(DOCBOOKTOHTML)
 
137
 
 
138
%.8mandos: %.xml common.ent legalnotice.xml
 
139
        $(DOCBOOKTOMAN)
 
140
%.8mandos.xhtml: %.xml common.ent legalnotice.xml
 
141
        $(DOCBOOKTOHTML)
 
142
 
 
143
intro.8mandos: intro.xml common.ent legalnotice.xml
 
144
        $(DOCBOOKTOMAN)
 
145
intro.8mandos.xhtml: intro.xml common.ent legalnotice.xml
 
146
        $(DOCBOOKTOHTML)
 
147
 
 
148
mandos.8: mandos.xml common.ent mandos-options.xml overview.xml \
 
149
                legalnotice.xml
 
150
        $(DOCBOOKTOMAN)
 
151
mandos.8.xhtml: mandos.xml common.ent mandos-options.xml \
 
152
                overview.xml legalnotice.xml
 
153
        $(DOCBOOKTOHTML)
 
154
 
 
155
mandos-keygen.8: mandos-keygen.xml common.ent overview.xml \
 
156
                legalnotice.xml
 
157
        $(DOCBOOKTOMAN)
 
158
mandos-keygen.8.xhtml: mandos-keygen.xml common.ent overview.xml \
 
159
                 legalnotice.xml
 
160
        $(DOCBOOKTOHTML)
 
161
 
 
162
mandos-monitor.8: mandos-monitor.xml common.ent overview.xml \
 
163
                legalnotice.xml
 
164
        $(DOCBOOKTOMAN)
 
165
mandos-monitor.8.xhtml: mandos-monitor.xml common.ent overview.xml \
 
166
                 legalnotice.xml
 
167
        $(DOCBOOKTOHTML)
 
168
 
 
169
mandos-ctl.8: mandos-ctl.xml common.ent overview.xml \
 
170
                legalnotice.xml
 
171
        $(DOCBOOKTOMAN)
 
172
mandos-ctl.8.xhtml: mandos-ctl.xml common.ent overview.xml \
 
173
                 legalnotice.xml
 
174
        $(DOCBOOKTOHTML)
 
175
 
 
176
mandos.conf.5: mandos.conf.xml common.ent mandos-options.xml \
 
177
                legalnotice.xml
 
178
        $(DOCBOOKTOMAN)
 
179
mandos.conf.5.xhtml: mandos.conf.xml common.ent mandos-options.xml \
 
180
                legalnotice.xml
 
181
        $(DOCBOOKTOHTML)
 
182
 
 
183
plugin-runner.8mandos: plugin-runner.xml common.ent overview.xml \
 
184
                legalnotice.xml
 
185
        $(DOCBOOKTOMAN)
 
186
plugin-runner.8mandos.xhtml: plugin-runner.xml common.ent \
 
187
                overview.xml legalnotice.xml
 
188
        $(DOCBOOKTOHTML)
 
189
 
 
190
plugins.d/mandos-client.8mandos: plugins.d/mandos-client.xml \
 
191
                                        common.ent \
 
192
                                        mandos-options.xml \
 
193
                                        overview.xml legalnotice.xml
 
194
        $(DOCBOOKTOMAN)
 
195
plugins.d/mandos-client.8mandos.xhtml: plugins.d/mandos-client.xml \
 
196
                                        common.ent \
 
197
                                        mandos-options.xml \
 
198
                                        overview.xml legalnotice.xml
 
199
        $(DOCBOOKTOHTML)
 
200
 
 
201
# Update all these files with version number $(version)
 
202
common.ent: Makefile
 
203
        $(strip $(SED) --in-place \
 
204
                --expression='s/^\(<!ENTITY version "\)[^"]*">$$/\1$(version)">/' \
 
205
                $@)
 
206
 
 
207
mandos: Makefile
 
208
        $(strip $(SED) --in-place \
 
209
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
 
210
                $@)
 
211
 
 
212
mandos-keygen: Makefile
 
213
        $(strip $(SED) --in-place \
 
214
                --expression='s/^\(VERSION="\)[^"]*"$$/\1$(version)"/' \
 
215
                $@)
 
216
 
 
217
mandos-ctl: Makefile
 
218
        $(strip $(SED) --in-place \
 
219
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
 
220
                $@)
 
221
 
 
222
mandos-monitor: Makefile
 
223
        $(strip $(SED) --in-place \
 
224
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
 
225
                $@)
 
226
 
 
227
mandos.lsm: Makefile
 
228
        $(strip $(SED) --in-place \
 
229
                --expression='s/^\(Version:\).*/\1\t$(version)/' \
 
230
                $@)
 
231
        $(strip $(SED) --in-place \
 
232
                --expression='s/^\(Entered-date:\).*/\1\t$(shell date --rfc-3339=date --reference=Makefile)/' \
 
233
                $@)
 
234
        $(strip $(SED) --in-place \
 
235
                --expression='s/\(mandos_\)[0-9.]\+\(\.orig\.tar\.gz\)/\1$(version)\2/' \
 
236
                $@)
 
237
 
 
238
plugins.d/mandos-client: plugins.d/mandos-client.c
 
239
        $(LINK.c) $^ -lrt $(GNUTLS_LIBS) $(AVAHI_LIBS) $(strip\
 
240
                ) $(GPGME_LIBS) $(LOADLIBES) $(LDLIBS) -o $@
 
241
 
 
242
.PHONY : all doc html clean distclean mostlyclean maintainer-clean \
 
243
        check run-client run-server install install-html \
 
244
        install-server install-client-nokey install-client uninstall \
 
245
        uninstall-server uninstall-client purge purge-server \
 
246
        purge-client
74
247
 
75
248
clean:
76
 
        -rm --force $(PROGS) $(objects) $(DOCS) core
 
249
        -rm --force $(CPROGS) $(objects) $(htmldocs) $(DOCS) core
77
250
 
78
251
distclean: clean
79
252
mostlyclean: clean
80
253
maintainer-clean: clean
81
 
        -rm --force --recursive keydir
 
254
        -rm --force --recursive keydir confdir statedir
82
255
 
83
 
check:
 
256
check:  all
84
257
        ./mandos --check
 
258
        ./mandos-ctl --check
85
259
 
86
 
run-client: all
87
 
        -mkdir keydir
88
 
        -./mandos-keygen --dir keydir
 
260
# Run the client with a local config and key
 
261
run-client: all keydir/seckey.txt keydir/pubkey.txt
 
262
        @echo "###################################################################"
 
263
        @echo "# The following error messages are harmless and can be safely     #"
 
264
        @echo "# ignored.  The messages are caused by not running as root, but   #"
 
265
        @echo "# you should NOT run \"make run-client\" as root unless you also    #"
 
266
        @echo "# unpacked and compiled Mandos as root, which is NOT recommended. #"
 
267
        @echo "# From plugin-runner: setgid: Operation not permitted             #"
 
268
        @echo "#                     setuid: Operation not permitted             #"
 
269
        @echo "# From askpass-fifo:  mkfifo: Permission denied                   #"
 
270
        @echo "# From mandos-client:                                             #"
 
271
        @echo "#             Failed to raise privileges: Operation not permitted #"
 
272
        @echo "#             Warning: network hook \"*\" exited with status *      #"
 
273
        @echo "###################################################################"
 
274
# We set GNOME_KEYRING_CONTROL to block pam_gnome_keyring
89
275
        ./plugin-runner --plugin-dir=plugins.d \
90
 
                --options-for=password-request:--keydir=keydir
91
 
 
92
 
run-server:
93
 
        ./mandos --debug --configdir=.
94
 
 
95
 
install: install-server install-client
 
276
                --config-file=plugin-runner.conf \
 
277
                --options-for=mandos-client:--seckey=keydir/seckey.txt,--pubkey=keydir/pubkey.txt,--network-hook-dir=network-hooks.d \
 
278
                --env-for=mandos-client:GNOME_KEYRING_CONTROL= \
 
279
                $(CLIENTARGS)
 
280
 
 
281
# Used by run-client
 
282
keydir/seckey.txt keydir/pubkey.txt: mandos-keygen
 
283
        install --directory keydir
 
284
        ./mandos-keygen --dir keydir --force
 
285
 
 
286
# Run the server with a local config
 
287
run-server: confdir/mandos.conf confdir/clients.conf statedir
 
288
        ./mandos --debug --no-dbus --configdir=confdir \
 
289
                --statedir=statedir $(SERVERARGS)
 
290
 
 
291
# Used by run-server
 
292
confdir/mandos.conf: mandos.conf
 
293
        install --directory confdir
 
294
        install --mode=u=rw,go=r $^ $@
 
295
confdir/clients.conf: clients.conf keydir/seckey.txt
 
296
        install --directory confdir
 
297
        install --mode=u=rw $< $@
 
298
# Add a client password
 
299
        ./mandos-keygen --dir keydir --password --no-ssh >> $@
 
300
statedir:
 
301
        install --directory statedir
 
302
 
 
303
install: install-server install-client-nokey
 
304
 
 
305
install-html: html
 
306
        install --directory $(htmldir)
 
307
        install --mode=u=rw,go=r --target-directory=$(htmldir) \
 
308
                $(htmldocs)
96
309
 
97
310
install-server: doc
98
 
        mkdir --mode=0755 --parents $(CONFDIR) $(MANDIR)/man5 \
99
 
                $(MANDIR)/man8
100
 
        install --mode=0755 mandos $(PREFIX)/sbin/mandos
101
 
        install --mode=0644 --target-directory=$(CONFDIR) mandos.conf
102
 
        install --mode=0640 --target-directory=$(CONFDIR) \
 
311
        install --directory $(CONFDIR)
 
312
        if install --directory --mode=u=rwx --owner=$(USER) \
 
313
                --group=$(GROUP) $(STATEDIR); then \
 
314
                :; \
 
315
        elif install --directory --mode=u=rwx $(STATEDIR); then \
 
316
                chown -- $(USER):$(GROUP) $(STATEDIR) || :; \
 
317
        fi
 
318
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
 
319
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
 
320
                mandos-ctl
 
321
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
 
322
                mandos-monitor
 
323
        install --mode=u=rw,go=r --target-directory=$(CONFDIR) \
 
324
                mandos.conf
 
325
        install --mode=u=rw --target-directory=$(CONFDIR) \
103
326
                clients.conf
 
327
        install --mode=u=rw,go=r dbus-mandos.conf \
 
328
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
 
329
        install --mode=u=rwx,go=rx init.d-mandos \
 
330
                $(DESTDIR)/etc/init.d/mandos
 
331
        if [ "$(SYSTEMD)" != "$(DESTDIR)" -a -d "$(SYSTEMD)" ]; then \
 
332
                install --mode=u=rw,go=r mandos.service $(SYSTEMD); \
 
333
        fi
 
334
        install --mode=u=rw,go=r default-mandos \
 
335
                $(DESTDIR)/etc/default/mandos
 
336
        if [ -z $(DESTDIR) ]; then \
 
337
                update-rc.d mandos defaults 25 15;\
 
338
        fi
104
339
        gzip --best --to-stdout mandos.8 \
105
340
                > $(MANDIR)/man8/mandos.8.gz
 
341
        gzip --best --to-stdout mandos-monitor.8 \
 
342
                > $(MANDIR)/man8/mandos-monitor.8.gz
 
343
        gzip --best --to-stdout mandos-ctl.8 \
 
344
                > $(MANDIR)/man8/mandos-ctl.8.gz
106
345
        gzip --best --to-stdout mandos.conf.5 \
107
346
                > $(MANDIR)/man5/mandos.conf.5.gz
108
347
        gzip --best --to-stdout mandos-clients.conf.5 \
109
348
                > $(MANDIR)/man5/mandos-clients.conf.5.gz
 
349
        gzip --best --to-stdout intro.8mandos \
 
350
                > $(MANDIR)/man8/intro.8mandos.gz
110
351
 
111
 
install-client: all doc /usr/share/initramfs-tools/hooks/.
112
 
        mkdir --mode=0755 --parents $(PREFIX)/lib/mandos $(CONFDIR) \
113
 
                $(MANDIR)/man8
114
 
        -mkdir --mode=0700 $(PREFIX)/lib/mandos/plugins.d
115
 
        chmod u=rwx,g=,o= $(PREFIX)/lib/mandos/plugins.d
116
 
        install --mode=0755 --target-directory=$(PREFIX)/lib/mandos \
117
 
                plugin-runner
118
 
        install --mode=0755 --target-directory=$(PREFIX)/sbin \
 
352
install-client-nokey: all doc
 
353
        install --directory $(LIBDIR)/mandos $(CONFDIR)
 
354
        install --directory --mode=u=rwx $(KEYDIR) \
 
355
                $(LIBDIR)/mandos/plugins.d
 
356
        if [ "$(CONFDIR)" != "$(LIBDIR)/mandos" ]; then \
 
357
                install --mode=u=rwx \
 
358
                        --directory "$(CONFDIR)/plugins.d"; \
 
359
        fi
 
360
        install --mode=u=rwx,go=rx --directory \
 
361
                "$(CONFDIR)/network-hooks.d"
 
362
        install --mode=u=rwx,go=rx \
 
363
                --target-directory=$(LIBDIR)/mandos plugin-runner
 
364
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
119
365
                mandos-keygen
120
 
        install --mode=0755 \
121
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
366
        install --mode=u=rwx,go=rx \
 
367
                --target-directory=$(LIBDIR)/mandos/plugins.d \
122
368
                plugins.d/password-prompt
123
 
        install --mode=4755 \
124
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
125
 
                plugins.d/password-request
 
369
        install --mode=u=rwxs,go=rx \
 
370
                --target-directory=$(LIBDIR)/mandos/plugins.d \
 
371
                plugins.d/mandos-client
 
372
        install --mode=u=rwxs,go=rx \
 
373
                --target-directory=$(LIBDIR)/mandos/plugins.d \
 
374
                plugins.d/usplash
 
375
        install --mode=u=rwxs,go=rx \
 
376
                --target-directory=$(LIBDIR)/mandos/plugins.d \
 
377
                plugins.d/splashy
 
378
        install --mode=u=rwxs,go=rx \
 
379
                --target-directory=$(LIBDIR)/mandos/plugins.d \
 
380
                plugins.d/askpass-fifo
 
381
        install --mode=u=rwxs,go=rx \
 
382
                --target-directory=$(LIBDIR)/mandos/plugins.d \
 
383
                plugins.d/plymouth
126
384
        install initramfs-tools-hook \
127
 
                /usr/share/initramfs-tools/hooks/mandos
128
 
        install initramfs-tools-hook-conf \
129
 
                /usr/share/initramfs-tools/conf-hooks.d/mandos
 
385
                $(INITRAMFSTOOLS)/hooks/mandos
 
386
        install --mode=u=rw,go=r initramfs-tools-hook-conf \
 
387
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos
130
388
        install initramfs-tools-script \
131
 
                /usr/share/initramfs-tools/scripts/local-top/mandos
 
389
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos
 
390
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
132
391
        gzip --best --to-stdout mandos-keygen.8 \
133
392
                > $(MANDIR)/man8/mandos-keygen.8.gz
134
393
        gzip --best --to-stdout plugin-runner.8mandos \
135
394
                > $(MANDIR)/man8/plugin-runner.8mandos.gz
 
395
        gzip --best --to-stdout plugins.d/mandos-client.8mandos \
 
396
                > $(MANDIR)/man8/mandos-client.8mandos.gz
136
397
        gzip --best --to-stdout plugins.d/password-prompt.8mandos \
137
398
                > $(MANDIR)/man8/password-prompt.8mandos.gz
138
 
        gzip --best --to-stdout plugins.d/password-request.8mandos \
139
 
                > $(MANDIR)/man8/password-request.8mandos.gz
140
 
        -$(PREFIX)/sbin/mandos-keygen
 
399
        gzip --best --to-stdout plugins.d/usplash.8mandos \
 
400
                > $(MANDIR)/man8/usplash.8mandos.gz
 
401
        gzip --best --to-stdout plugins.d/splashy.8mandos \
 
402
                > $(MANDIR)/man8/splashy.8mandos.gz
 
403
        gzip --best --to-stdout plugins.d/askpass-fifo.8mandos \
 
404
                > $(MANDIR)/man8/askpass-fifo.8mandos.gz
 
405
        gzip --best --to-stdout plugins.d/plymouth.8mandos \
 
406
                > $(MANDIR)/man8/plymouth.8mandos.gz
 
407
 
 
408
install-client: install-client-nokey
 
409
# Post-installation stuff
 
410
        -$(PREFIX)/sbin/mandos-keygen --dir "$(KEYDIR)"
141
411
        update-initramfs -k all -u
 
412
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
142
413
 
143
414
uninstall: uninstall-server uninstall-client
144
415
 
145
 
uninstall-server: $(PREFIX)/sbin/mandos
 
416
uninstall-server:
146
417
        -rm --force $(PREFIX)/sbin/mandos \
 
418
                $(PREFIX)/sbin/mandos-ctl \
 
419
                $(PREFIX)/sbin/mandos-monitor \
147
420
                $(MANDIR)/man8/mandos.8.gz \
 
421
                $(MANDIR)/man8/mandos-monitor.8.gz \
 
422
                $(MANDIR)/man8/mandos-ctl.8.gz \
148
423
                $(MANDIR)/man5/mandos.conf.5.gz \
149
424
                $(MANDIR)/man5/mandos-clients.conf.5.gz
 
425
        update-rc.d -f mandos remove
150
426
        -rmdir $(CONFDIR)
151
427
 
152
428
uninstall-client:
153
429
# Refuse to uninstall client if /etc/crypttab is explicitly configured
154
430
# to use it.
155
431
        ! grep --regexp='^ *[^ #].*keyscript=[^,=]*/mandos/' \
156
 
                /etc/crypttab
 
432
                $(DESTDIR)/etc/crypttab
157
433
        -rm --force $(PREFIX)/sbin/mandos-keygen \
158
 
                $(PREFIX)/lib/mandos/plugin-runner \
159
 
                $(PREFIX)/lib/mandos/plugins.d/password-prompt \
160
 
                $(PREFIX)/lib/mandos/plugins.d/password-request \
161
 
                /usr/share/initramfs-tools/hooks/mandos \
162
 
                /usr/share/initramfs-tools/conf-hooks.d/mandos \
 
434
                $(LIBDIR)/mandos/plugin-runner \
 
435
                $(LIBDIR)/mandos/plugins.d/password-prompt \
 
436
                $(LIBDIR)/mandos/plugins.d/mandos-client \
 
437
                $(LIBDIR)/mandos/plugins.d/usplash \
 
438
                $(LIBDIR)/mandos/plugins.d/splashy \
 
439
                $(LIBDIR)/mandos/plugins.d/askpass-fifo \
 
440
                $(LIBDIR)/mandos/plugins.d/plymouth \
 
441
                $(INITRAMFSTOOLS)/hooks/mandos \
 
442
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos \
 
443
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos \
 
444
                $(MANDIR)/man8/mandos-keygen.8.gz \
163
445
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
164
 
                $(MANDIR)/man8/mandos-keygen.8.gz \
 
446
                $(MANDIR)/man8/mandos-client.8mandos.gz
165
447
                $(MANDIR)/man8/password-prompt.8mandos.gz \
166
 
                $(MANDIR)/man8/password-request.8mandos.gz
167
 
        -rmdir $(PREFIX)/lib/mandos/plugins.d $(CONFDIR)/plugins.d \
168
 
                 $(PREFIX)/lib/mandos $(CONFDIR)
 
448
                $(MANDIR)/man8/usplash.8mandos.gz \
 
449
                $(MANDIR)/man8/splashy.8mandos.gz \
 
450
                $(MANDIR)/man8/askpass-fifo.8mandos.gz \
 
451
                $(MANDIR)/man8/plymouth.8mandos.gz \
 
452
        -rmdir $(LIBDIR)/mandos/plugins.d $(CONFDIR)/plugins.d \
 
453
                 $(LIBDIR)/mandos $(CONFDIR) $(KEYDIR)
169
454
        update-initramfs -k all -u
170
455
 
171
456
purge: purge-server purge-client
172
457
 
173
458
purge-server: uninstall-server
174
 
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf
 
459
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
 
460
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
 
461
                $(DESTDIR)/etc/default/mandos \
 
462
                $(DESTDIR)/etc/init.d/mandos \
 
463
                $(SYSTEMD)/mandos.service \
 
464
                $(DESTDIR)/run/mandos.pid \
 
465
                $(DESTDIR)/var/run/mandos.pid
175
466
        -rmdir $(CONFDIR)
176
467
 
177
468
purge-client: uninstall-client
178
 
        -rm --force $(CONFDIR)/seckey.txt $(CONFDIR)/pubkey.txt
179
 
        -rmdir $(CONFDIR) $(CONFDIR)/plugins.d
 
469
        -shred --remove $(KEYDIR)/seckey.txt
 
470
        -rm --force $(CONFDIR)/plugin-runner.conf \
 
471
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt
 
472
        -rmdir $(KEYDIR) $(CONFDIR)/plugins.d $(CONFDIR)