/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.20
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) -DVERSION='"$(version)"'
93
 
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)
94
26
 
95
 
# Commands to format a DocBook <refentry> document into a manual page
96
 
DOCBOOKTOMAN=$(strip cd $(dir $<); xsltproc --nonet --xinclude \
 
27
DOCBOOKTOMAN=xsltproc --nonet \
97
28
        --param man.charmap.use.subset          0 \
98
29
        --param make.year.ranges                1 \
99
30
        --param make.single.year.ranges         1 \
100
31
        --param man.output.quietly              1 \
101
 
        --param man.authors.section.enabled     0 \
102
 
        /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
103
 
        $(notdir $<); \
104
 
        if locale --all 2>/dev/null | grep --regexp='^en_US\.utf8$$' \
105
 
        && type man 2>/dev/null; then LANG=en_US.UTF-8 MANWIDTH=80 \
106
 
        man --warnings --encoding=UTF-8 --local-file $(notdir $@); \
107
 
        fi >/dev/null)
108
 
 
109
 
DOCBOOKTOHTML=$(strip xsltproc --nonet --xinclude \
110
 
        --param make.year.ranges                1 \
111
 
        --param make.single.year.ranges         1 \
112
 
        --param man.output.quietly              1 \
113
 
        --param man.authors.section.enabled     0 \
114
 
        --param citerefentry.link               1 \
115
 
        --output $@ \
116
 
        /usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl \
117
 
        $<; $(HTMLPOST) $@)
118
 
# Fix citerefentry links
119
 
HTMLPOST:=$(SED) --in-place \
120
 
        --expression='s/\(<a class="citerefentry" href="\)\("><span class="citerefentry"><span class="refentrytitle">\)\([^<]*\)\(<\/span>(\)\([^)]*\)\()<\/span><\/a>\)/\1\3.\5\2\3\4\5\6/g'
121
 
 
122
 
PLUGINS:=plugins.d/password-prompt plugins.d/mandos-client \
123
 
        plugins.d/usplash plugins.d/splashy plugins.d/askpass-fifo \
124
 
        plugins.d/plymouth
125
 
PLUGIN_HELPERS:=plugin-helpers/mandos-client-iprouteadddel
126
 
CPROGS:=plugin-runner $(PLUGINS) $(PLUGIN_HELPERS)
127
 
PROGS:=mandos mandos-keygen mandos-ctl mandos-monitor $(CPROGS)
128
 
DOCS:=mandos.8 mandos-keygen.8 mandos-monitor.8 mandos-ctl.8 \
129
 
        mandos.conf.5 mandos-clients.conf.5 plugin-runner.8mandos \
130
 
        plugins.d/mandos-client.8mandos \
131
 
        plugins.d/password-prompt.8mandos plugins.d/usplash.8mandos \
132
 
        plugins.d/splashy.8mandos plugins.d/askpass-fifo.8mandos \
133
 
        plugins.d/plymouth.8mandos intro.8mandos
134
 
 
135
 
htmldocs:=$(addsuffix .xhtml,$(DOCS))
136
 
 
137
 
objects:=$(addsuffix .o,$(CPROGS))
138
 
 
139
 
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)
140
44
 
141
45
doc: $(DOCS)
142
46
 
143
 
html: $(htmldocs)
144
 
 
145
 
%.5: %.xml common.ent legalnotice.xml
146
 
        $(DOCBOOKTOMAN)
147
 
%.5.xhtml: %.xml common.ent legalnotice.xml
148
 
        $(DOCBOOKTOHTML)
149
 
 
150
 
%.8: %.xml common.ent legalnotice.xml
151
 
        $(DOCBOOKTOMAN)
152
 
%.8.xhtml: %.xml common.ent legalnotice.xml
153
 
        $(DOCBOOKTOHTML)
154
 
 
155
 
%.8mandos: %.xml common.ent legalnotice.xml
156
 
        $(DOCBOOKTOMAN)
157
 
%.8mandos.xhtml: %.xml common.ent legalnotice.xml
158
 
        $(DOCBOOKTOHTML)
159
 
 
160
 
intro.8mandos: intro.xml common.ent legalnotice.xml
161
 
        $(DOCBOOKTOMAN)
162
 
intro.8mandos.xhtml: intro.xml common.ent legalnotice.xml
163
 
        $(DOCBOOKTOHTML)
164
 
 
165
 
mandos.8: mandos.xml common.ent mandos-options.xml overview.xml \
166
 
                legalnotice.xml
167
 
        $(DOCBOOKTOMAN)
168
 
mandos.8.xhtml: mandos.xml common.ent mandos-options.xml \
169
 
                overview.xml legalnotice.xml
170
 
        $(DOCBOOKTOHTML)
171
 
 
172
 
mandos-keygen.8: mandos-keygen.xml common.ent overview.xml \
173
 
                legalnotice.xml
174
 
        $(DOCBOOKTOMAN)
175
 
mandos-keygen.8.xhtml: mandos-keygen.xml common.ent overview.xml \
176
 
                 legalnotice.xml
177
 
        $(DOCBOOKTOHTML)
178
 
 
179
 
mandos-monitor.8: mandos-monitor.xml common.ent overview.xml \
180
 
                legalnotice.xml
181
 
        $(DOCBOOKTOMAN)
182
 
mandos-monitor.8.xhtml: mandos-monitor.xml common.ent overview.xml \
183
 
                 legalnotice.xml
184
 
        $(DOCBOOKTOHTML)
185
 
 
186
 
mandos-ctl.8: mandos-ctl.xml common.ent overview.xml \
187
 
                legalnotice.xml
188
 
        $(DOCBOOKTOMAN)
189
 
mandos-ctl.8.xhtml: mandos-ctl.xml common.ent overview.xml \
190
 
                 legalnotice.xml
191
 
        $(DOCBOOKTOHTML)
192
 
 
193
 
mandos.conf.5: mandos.conf.xml common.ent mandos-options.xml \
194
 
                legalnotice.xml
195
 
        $(DOCBOOKTOMAN)
196
 
mandos.conf.5.xhtml: mandos.conf.xml common.ent mandos-options.xml \
197
 
                legalnotice.xml
198
 
        $(DOCBOOKTOHTML)
199
 
 
200
 
plugin-runner.8mandos: plugin-runner.xml common.ent overview.xml \
201
 
                legalnotice.xml
202
 
        $(DOCBOOKTOMAN)
203
 
plugin-runner.8mandos.xhtml: plugin-runner.xml common.ent \
204
 
                overview.xml legalnotice.xml
205
 
        $(DOCBOOKTOHTML)
206
 
 
207
 
plugins.d/mandos-client.8mandos: plugins.d/mandos-client.xml \
208
 
                                        common.ent \
209
 
                                        mandos-options.xml \
210
 
                                        overview.xml legalnotice.xml
211
 
        $(DOCBOOKTOMAN)
212
 
plugins.d/mandos-client.8mandos.xhtml: plugins.d/mandos-client.xml \
213
 
                                        common.ent \
214
 
                                        mandos-options.xml \
215
 
                                        overview.xml legalnotice.xml
216
 
        $(DOCBOOKTOHTML)
217
 
 
218
 
# Update all these files with version number $(version)
219
 
common.ent: Makefile
220
 
        $(strip $(SED) --in-place \
221
 
                --expression='s/^\(<!ENTITY version "\)[^"]*">$$/\1$(version)">/' \
222
 
                $@)
223
 
 
224
 
mandos: Makefile
225
 
        $(strip $(SED) --in-place \
226
 
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
227
 
                $@)
228
 
 
229
 
mandos-keygen: Makefile
230
 
        $(strip $(SED) --in-place \
231
 
                --expression='s/^\(VERSION="\)[^"]*"$$/\1$(version)"/' \
232
 
                $@)
233
 
 
234
 
mandos-ctl: Makefile
235
 
        $(strip $(SED) --in-place \
236
 
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
237
 
                $@)
238
 
 
239
 
mandos-monitor: Makefile
240
 
        $(strip $(SED) --in-place \
241
 
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
242
 
                $@)
243
 
 
244
 
mandos.lsm: Makefile
245
 
        $(strip $(SED) --in-place \
246
 
                --expression='s/^\(Version:\).*/\1\t$(version)/' \
247
 
                $@)
248
 
        $(strip $(SED) --in-place \
249
 
                --expression='s/^\(Entered-date:\).*/\1\t$(shell date --rfc-3339=date --reference=Makefile)/' \
250
 
                $@)
251
 
        $(strip $(SED) --in-place \
252
 
                --expression='s/\(mandos_\)[0-9.]\+\(\.orig\.tar\.gz\)/\1$(version)\2/' \
253
 
                $@)
254
 
 
255
 
# Need to add the GnuTLS, Avahi and GPGME libraries, and can't use
256
 
# -fsanitize=leak because GnuTLS and GPGME both leak memory.
257
 
plugins.d/mandos-client: plugins.d/mandos-client.c
258
 
        $(CC) $(filter-out -fsanitize=leak,$(CFLAGS)) $(strip\
259
 
        ) $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(GPGME_CFLAGS) $(strip\
260
 
                ) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH) $^ $(strip\
261
 
                ) -lrt $(GNUTLS_LIBS) $(AVAHI_LIBS) $(strip\
262
 
                ) $(GPGME_LIBS) $(LOADLIBES) $(LDLIBS) -o $@
263
 
 
264
 
plugin-helpers/mandos-client-iprouteadddel: plugin-helpers/mandos-client-iprouteadddel.c
265
 
        $(LINK.c) $(LIBNL3_CFLAGS) $^ $(LIBNL3_LIBS) $(strip\
266
 
                ) $(LOADLIBES) $(LDLIBS) -o $@
267
 
 
268
 
.PHONY : all doc html clean distclean mostlyclean maintainer-clean \
269
 
        check run-client run-server install install-html \
270
 
        install-server install-client-nokey install-client uninstall \
271
 
        uninstall-server uninstall-client purge purge-server \
272
 
        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
273
69
 
274
70
clean:
275
 
        -rm --force $(CPROGS) $(objects) $(htmldocs) $(DOCS) core
 
71
        -rm --force $(PROGS) $(objects) $(DOCS) core
276
72
 
277
73
distclean: clean
278
74
mostlyclean: clean
279
75
maintainer-clean: clean
280
 
        -rm --force --recursive keydir confdir statedir
 
76
        -rm --force --recursive keydir
281
77
 
282
 
check:  all
 
78
check:
283
79
        ./mandos --check
284
 
        ./mandos-ctl --check
285
80
 
286
 
# Run the client with a local config and key
287
 
run-client: all keydir/seckey.txt keydir/pubkey.txt
288
 
        @echo "###################################################################"
289
 
        @echo "# The following error messages are harmless and can be safely     #"
290
 
        @echo "# ignored:                                                        #"
291
 
        @echo "# From plugin-runner: setgid: Operation not permitted             #"
292
 
        @echo "#                     setuid: Operation not permitted             #"
293
 
        @echo "# From askpass-fifo:  mkfifo: Permission denied                   #"
294
 
        @echo "# From mandos-client:                                             #"
295
 
        @echo "#             Failed to raise privileges: Operation not permitted #"
296
 
        @echo "#             Warning: network hook \"*\" exited with status *      #"
297
 
        @echo "#                                                                 #"
298
 
        @echo "# (The messages are caused by not running as root, but you should #"
299
 
        @echo "# NOT run \"make run-client\" as root unless you also unpacked and  #"
300
 
        @echo "# compiled Mandos as root, which is also NOT recommended.)        #"
301
 
        @echo "###################################################################"
302
 
# We set GNOME_KEYRING_CONTROL to block pam_gnome_keyring
 
81
run-client: all
 
82
        -mkdir keydir
 
83
        -./mandos-keygen --dir keydir
303
84
        ./plugin-runner --plugin-dir=plugins.d \
304
 
                --plugin-helper-dir=plugin-helpers \
305
 
                --config-file=plugin-runner.conf \
306
 
                --options-for=mandos-client:--seckey=keydir/seckey.txt,--pubkey=keydir/pubkey.txt,--network-hook-dir=network-hooks.d \
307
 
                --env-for=mandos-client:GNOME_KEYRING_CONTROL= \
308
 
                $(CLIENTARGS)
309
 
 
310
 
# Used by run-client
311
 
keydir/seckey.txt keydir/pubkey.txt: mandos-keygen
312
 
        install --directory keydir
313
 
        ./mandos-keygen --dir keydir --force
314
 
 
315
 
# Run the server with a local config
316
 
run-server: confdir/mandos.conf confdir/clients.conf statedir
317
 
        ./mandos --debug --no-dbus --configdir=confdir \
318
 
                --statedir=statedir $(SERVERARGS)
319
 
 
320
 
# Used by run-server
321
 
confdir/mandos.conf: mandos.conf
322
 
        install --directory confdir
323
 
        install --mode=u=rw,go=r $^ $@
324
 
confdir/clients.conf: clients.conf keydir/seckey.txt
325
 
        install --directory confdir
326
 
        install --mode=u=rw $< $@
327
 
# Add a client password
328
 
        ./mandos-keygen --dir keydir --password --no-ssh >> $@
329
 
statedir:
330
 
        install --directory statedir
331
 
 
332
 
install: install-server install-client-nokey
333
 
 
334
 
install-html: html
335
 
        install --directory $(htmldir)
336
 
        install --mode=u=rw,go=r --target-directory=$(htmldir) \
337
 
                $(htmldocs)
 
85
                --options-for=password-request:--keydir=keydir
 
86
 
 
87
run-server:
 
88
        ./mandos --debug --configdir=.
 
89
 
 
90
install: install-server install-client
338
91
 
339
92
install-server: doc
340
 
        install --directory $(CONFDIR)
341
 
        if install --directory --mode=u=rwx --owner=$(USER) \
342
 
                --group=$(GROUP) $(STATEDIR); then \
343
 
                :; \
344
 
        elif install --directory --mode=u=rwx $(STATEDIR); then \
345
 
                chown -- $(USER):$(GROUP) $(STATEDIR) || :; \
346
 
        fi
347
 
        if [ "$(TMPFILES)" != "$(DESTDIR)" -a -d "$(TMPFILES)" ]; then \
348
 
                install --mode=u=rw,go=r tmpfiles.d-mandos.conf \
349
 
                        $(TMPFILES)/mandos.conf; \
350
 
        fi
351
 
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
352
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
353
 
                mandos-ctl
354
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
355
 
                mandos-monitor
356
 
        install --mode=u=rw,go=r --target-directory=$(CONFDIR) \
357
 
                mandos.conf
358
 
        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) \
359
98
                clients.conf
360
 
        install --mode=u=rw,go=r dbus-mandos.conf \
361
 
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
362
 
        install --mode=u=rwx,go=rx init.d-mandos \
363
 
                $(DESTDIR)/etc/init.d/mandos
364
 
        if [ "$(SYSTEMD)" != "$(DESTDIR)" -a -d "$(SYSTEMD)" ]; then \
365
 
                install --mode=u=rw,go=r mandos.service $(SYSTEMD); \
366
 
        fi
367
 
        install --mode=u=rw,go=r default-mandos \
368
 
                $(DESTDIR)/etc/default/mandos
369
 
        if [ -z $(DESTDIR) ]; then \
370
 
                update-rc.d mandos defaults 25 15;\
371
 
        fi
372
99
        gzip --best --to-stdout mandos.8 \
373
100
                > $(MANDIR)/man8/mandos.8.gz
374
 
        gzip --best --to-stdout mandos-monitor.8 \
375
 
                > $(MANDIR)/man8/mandos-monitor.8.gz
376
 
        gzip --best --to-stdout mandos-ctl.8 \
377
 
                > $(MANDIR)/man8/mandos-ctl.8.gz
378
101
        gzip --best --to-stdout mandos.conf.5 \
379
102
                > $(MANDIR)/man5/mandos.conf.5.gz
380
103
        gzip --best --to-stdout mandos-clients.conf.5 \
381
104
                > $(MANDIR)/man5/mandos-clients.conf.5.gz
382
 
        gzip --best --to-stdout intro.8mandos \
383
 
                > $(MANDIR)/man8/intro.8mandos.gz
384
105
 
385
 
install-client-nokey: all doc
386
 
        install --directory $(LIBDIR)/mandos $(CONFDIR)
387
 
        install --directory --mode=u=rwx $(KEYDIR) \
388
 
                $(LIBDIR)/mandos/plugins.d \
389
 
                $(LIBDIR)/mandos/plugin-helpers
390
 
        if [ "$(CONFDIR)" != "$(LIBDIR)/mandos" ]; then \
391
 
                install --mode=u=rwx \
392
 
                        --directory "$(CONFDIR)/plugins.d" \
393
 
                        "$(CONFDIR)/plugin-helpers"; \
394
 
        fi
395
 
        install --mode=u=rwx,go=rx --directory \
396
 
                "$(CONFDIR)/network-hooks.d"
397
 
        install --mode=u=rwx,go=rx \
398
 
                --target-directory=$(LIBDIR)/mandos plugin-runner
399
 
        install --mode=u=rwx,go=rx \
400
 
                --target-directory=$(LIBDIR)/mandos mandos-to-cryptroot-unlock
401
 
        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 \
402
114
                mandos-keygen
403
 
        install --mode=u=rwx,go=rx \
404
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
 
115
        install --mode=0755 \
 
116
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
405
117
                plugins.d/password-prompt
406
 
        install --mode=u=rwxs,go=rx \
407
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
408
 
                plugins.d/mandos-client
409
 
        install --mode=u=rwxs,go=rx \
410
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
411
 
                plugins.d/usplash
412
 
        install --mode=u=rwxs,go=rx \
413
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
414
 
                plugins.d/splashy
415
 
        install --mode=u=rwxs,go=rx \
416
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
417
 
                plugins.d/askpass-fifo
418
 
        install --mode=u=rwxs,go=rx \
419
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
420
 
                plugins.d/plymouth
421
 
        install --mode=u=rwx,go=rx \
422
 
                --target-directory=$(LIBDIR)/mandos/plugin-helpers \
423
 
                plugin-helpers/mandos-client-iprouteadddel
 
118
        install --mode=4755 \
 
119
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
120
                plugins.d/password-request
424
121
        install initramfs-tools-hook \
425
 
                $(INITRAMFSTOOLS)/hooks/mandos
426
 
        install --mode=u=rw,go=r initramfs-tools-conf \
427
 
                $(INITRAMFSTOOLS)/conf.d/mandos-conf
 
122
                /usr/share/initramfs-tools/hooks/mandos
 
123
        install initramfs-tools-hook-conf \
 
124
                /usr/share/initramfs-tools/conf-hooks.d/mandos
428
125
        install initramfs-tools-script \
429
 
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos
430
 
        install initramfs-tools-script-stop \
431
 
                $(INITRAMFSTOOLS)/scripts/local-premount/mandos
432
 
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
 
126
                /usr/share/initramfs-tools/scripts/local-top/mandos
433
127
        gzip --best --to-stdout mandos-keygen.8 \
434
128
                > $(MANDIR)/man8/mandos-keygen.8.gz
435
129
        gzip --best --to-stdout plugin-runner.8mandos \
436
130
                > $(MANDIR)/man8/plugin-runner.8mandos.gz
437
 
        gzip --best --to-stdout plugins.d/mandos-client.8mandos \
438
 
                > $(MANDIR)/man8/mandos-client.8mandos.gz
439
131
        gzip --best --to-stdout plugins.d/password-prompt.8mandos \
440
132
                > $(MANDIR)/man8/password-prompt.8mandos.gz
441
 
        gzip --best --to-stdout plugins.d/usplash.8mandos \
442
 
                > $(MANDIR)/man8/usplash.8mandos.gz
443
 
        gzip --best --to-stdout plugins.d/splashy.8mandos \
444
 
                > $(MANDIR)/man8/splashy.8mandos.gz
445
 
        gzip --best --to-stdout plugins.d/askpass-fifo.8mandos \
446
 
                > $(MANDIR)/man8/askpass-fifo.8mandos.gz
447
 
        gzip --best --to-stdout plugins.d/plymouth.8mandos \
448
 
                > $(MANDIR)/man8/plymouth.8mandos.gz
449
 
 
450
 
install-client: install-client-nokey
451
 
# Post-installation stuff
452
 
        -$(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
453
136
        update-initramfs -k all -u
454
 
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
455
137
 
456
138
uninstall: uninstall-server uninstall-client
457
139
 
458
 
uninstall-server:
 
140
uninstall-server: $(PREFIX)/sbin/mandos
459
141
        -rm --force $(PREFIX)/sbin/mandos \
460
 
                $(PREFIX)/sbin/mandos-ctl \
461
 
                $(PREFIX)/sbin/mandos-monitor \
462
142
                $(MANDIR)/man8/mandos.8.gz \
463
 
                $(MANDIR)/man8/mandos-monitor.8.gz \
464
 
                $(MANDIR)/man8/mandos-ctl.8.gz \
465
143
                $(MANDIR)/man5/mandos.conf.5.gz \
466
144
                $(MANDIR)/man5/mandos-clients.conf.5.gz
467
 
        update-rc.d -f mandos remove
468
145
        -rmdir $(CONFDIR)
469
146
 
470
147
uninstall-client:
471
148
# Refuse to uninstall client if /etc/crypttab is explicitly configured
472
149
# to use it.
473
150
        ! grep --regexp='^ *[^ #].*keyscript=[^,=]*/mandos/' \
474
 
                $(DESTDIR)/etc/crypttab
 
151
                /etc/crypttab
475
152
        -rm --force $(PREFIX)/sbin/mandos-keygen \
476
 
                $(LIBDIR)/mandos/plugin-runner \
477
 
                $(LIBDIR)/mandos/plugins.d/password-prompt \
478
 
                $(LIBDIR)/mandos/plugins.d/mandos-client \
479
 
                $(LIBDIR)/mandos/plugins.d/usplash \
480
 
                $(LIBDIR)/mandos/plugins.d/splashy \
481
 
                $(LIBDIR)/mandos/plugins.d/askpass-fifo \
482
 
                $(LIBDIR)/mandos/plugins.d/plymouth \
483
 
                $(INITRAMFSTOOLS)/hooks/mandos \
484
 
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos \
485
 
                $(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 \
486
159
                $(MANDIR)/man8/mandos-keygen.8.gz \
487
 
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
488
 
                $(MANDIR)/man8/mandos-client.8mandos.gz
489
160
                $(MANDIR)/man8/password-prompt.8mandos.gz \
490
 
                $(MANDIR)/man8/usplash.8mandos.gz \
491
 
                $(MANDIR)/man8/splashy.8mandos.gz \
492
 
                $(MANDIR)/man8/askpass-fifo.8mandos.gz \
493
 
                $(MANDIR)/man8/plymouth.8mandos.gz \
494
 
        -rmdir $(LIBDIR)/mandos/plugins.d $(CONFDIR)/plugins.d \
495
 
                 $(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)
496
164
        update-initramfs -k all -u
497
165
 
498
166
purge: purge-server purge-client
499
167
 
500
168
purge-server: uninstall-server
501
 
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
502
 
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
503
 
                $(DESTDIR)/etc/default/mandos \
504
 
                $(DESTDIR)/etc/init.d/mandos \
505
 
                $(SYSTEMD)/mandos.service \
506
 
                $(DESTDIR)/run/mandos.pid \
507
 
                $(DESTDIR)/var/run/mandos.pid
 
169
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf
508
170
        -rmdir $(CONFDIR)
509
171
 
510
172
purge-client: uninstall-client
511
 
        -shred --remove $(KEYDIR)/seckey.txt
512
 
        -rm --force $(CONFDIR)/plugin-runner.conf \
513
 
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt
514
 
        -rmdir $(KEYDIR) $(CONFDIR)/plugins.d $(CONFDIR)
 
173
        -rm --force $(CONFDIR)/seckey.txt $(CONFDIR)/pubkey.txt
 
174
        -rmdir $(CONFDIR) $(CONFDIR)/plugins.d