/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: 2008-08-16 03:29:08 UTC
  • Revision ID: teddy@fukt.bsnet.se-20080816032908-ihw7c05r2mnyk389
Add feature to specify custom environment variables for plugins.

* plugin-runner.c (plugin): New members "environ" and "envc" to
                            contain possible custom environment.
  (getplugin): Return NULL on failure instead of doing exit(); all
               callers changed.
  (add_to_char_array): New helper function for "add_argument" and
                       "add_environment".
  (addargument): Renamed to "add_argument".  Return bool.  Call
                 "add_to_char_array" to actually do things.
  (add_environment): New; analogous to "add_argument".
  (addcustomargument): Renamed to "add_to_argv" to avoid confusion
                       with "add_argument".
  (main): New options "--global-envs" and "--envs-for" to specify
          custom environment for plugins.  Print environment for
          plugins in debug mode.  Use asprintf instead of strcpy and
          strcat.  Use execve() for plugins with custom environments.
          Free environment for plugin when freeing plugin list.

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