/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-29 05:53:59 UTC
  • Revision ID: teddy@fukt.bsnet.se-20080829055359-wkdasnyxtylmnxus
* mandos.xml (EXAMPLE): Replaced all occurences of command name with
                        "&COMMANDNAME;".

* plugins.d/password-prompt.c (main): Improved some documentation
                                      strings.  Do perror() of
                                      tcgetattr() fails.  Add debug
                                      output if interrupted by signal.
                                      Loop over write() instead of
                                      using fwrite() when outputting
                                      password.  Add debug output if
                                      getline() returns 0, unless it
                                      was caused by a signal.  Add
                                      exit status code to debug
                                      output.

* plugins.d/password-prompt.xml: Changed all single quotes to double
                                 quotes for consistency.  Removed
                                 <?xml-stylesheet>.
  (ENTITY TIMESTAMP): New.  Automatically updated by Emacs time-stamp
                      by using Emacs local variables.
  (/refentry/refentryinfo/title): Changed to "Mandos Manual".
  (/refentry/refentryinfo/productname): Changed to "Mandos".
  (/refentry/refentryinfo/date): New; set to "&TIMESTAMP;".
  (/refentry/refentryinfo/copyright): Split copyright holders.
  (/refentry/refnamediv/refpurpose): Improved wording.
  (SYNOPSIS): Fix to use correct markup.  Add short options.
  (DESCRIPTION, OPTIONS): Improved wording.
  (OPTIONS): Improved wording.  Use more correct markup.  Document
             short options.
  (EXIT STATUS): Add text.
  (ENVIRONMENT): Document use of "cryptsource" and "crypttarget".
  (FILES): REMOVED.
  (BUGS): Add text.
  (EXAMPLE): Added some examples.
  (SECURITY): Added text.
  (SEE ALSO): Remove reference to mandos(8).  Add reference to
              crypttab(5).

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
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
 
# <https://developerblog.redhat.com/2014/10/16/gcc-undefined-behavior-sanitizer-ubsan/>
18
 
ALL_SANITIZE_OPTIONS:=-fsanitize=address -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.9
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
 
14
OPTIMIZE=-Os
 
15
LANGUAGE=-std=gnu99
 
16
# PREFIX=/usr/local
60
17
PREFIX=$(DESTDIR)/usr
 
18
# CONFDIR=/usr/local/lib/mandos
61
19
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)
 
20
# MANDIR=/usr/local/man
 
21
MANDIR=$(DESTDIR)/usr/share/man
 
22
 
 
23
GNUTLS_CFLAGS=$(shell libgnutls-config --cflags)
 
24
GNUTLS_LIBS=$(shell libgnutls-config --libs)
82
25
AVAHI_CFLAGS=$(shell pkg-config --cflags-only-I avahi-core)
83
26
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)
 
27
GPGME_CFLAGS=$(shell gpgme-config --cflags)
 
28
GPGME_LIBS=$(shell gpgme-config --libs)
89
29
 
90
30
# 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))
 
31
CFLAGS=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) \
 
32
        $(LANGUAGE) $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(GPGME_CFLAGS)
 
33
LDFLAGS=$(COVERAGE)
95
34
 
96
 
# Commands to format a DocBook <refentry> document into a manual page
97
 
DOCBOOKTOMAN=$(strip cd $(dir $<); xsltproc --nonet --xinclude \
 
35
# Commands to format a DocBook refentry document into a manual page
 
36
DOCBOOKTOMAN=cd $(dir $<); xsltproc --nonet --xinclude \
98
37
        --param man.charmap.use.subset          0 \
99
38
        --param make.year.ranges                1 \
100
39
        --param make.single.year.ranges         1 \
101
40
        --param man.output.quietly              1 \
102
41
        --param man.authors.section.enabled     0 \
103
 
        /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
 
42
         /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
104
43
        $(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
 
44
        $(MANPOST) $(notdir $@)
 
45
# DocBook-to-man post-processing to fix a \n escape bug
 
46
MANPOST=sed --in-place --expression='s,\\\\en,\\en,g;s,\\n,\\en,g'
 
47
 
 
48
PLUGINS=plugins.d/password-prompt plugins.d/password-request
 
49
PROGS=plugin-runner $(PLUGINS)
 
50
DOCS=mandos.8 plugin-runner.8mandos mandos-keygen.8 \
 
51
        plugins.d/password-request.8mandos \
 
52
        plugins.d/password-prompt.8mandos mandos.conf.5 \
 
53
        mandos-clients.conf.5
 
54
 
 
55
objects=$(addsuffix .o,$(PROGS))
 
56
 
 
57
all: $(PROGS)
141
58
 
142
59
doc: $(DOCS)
143
60
 
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
 
61
%.5: %.xml
 
62
        $(DOCBOOKTOMAN)
 
63
 
 
64
%.8: %.xml
 
65
        $(DOCBOOKTOMAN)
 
66
 
 
67
%.8mandos: %.xml
 
68
        $(DOCBOOKTOMAN)
 
69
 
 
70
mandos.8: mandos.xml mandos-options.xml
 
71
        $(DOCBOOKTOMAN)
 
72
 
 
73
mandos.conf.5: mandos.conf.xml mandos-options.xml
 
74
        $(DOCBOOKTOMAN)
 
75
 
 
76
plugins.d/password-request: plugins.d/password-request.o
 
77
        $(LINK.o) $(GNUTLS_LIBS) $(AVAHI_LIBS) $(GPGME_LIBS) \
 
78
                $(COMMON) $^ $(LOADLIBES) $(LDLIBS) -o $@
 
79
 
 
80
.PHONY : all doc clean distclean run-client run-server install \
 
81
        install-server install-client uninstall uninstall-server \
 
82
        uninstall-client purge purge-server purge-client
269
83
 
270
84
clean:
271
 
        -rm --force $(CPROGS) $(objects) $(htmldocs) $(DOCS) core
 
85
        -rm --force $(PROGS) $(objects) $(DOCS) core
272
86
 
273
87
distclean: clean
274
88
mostlyclean: clean
275
89
maintainer-clean: clean
276
 
        -rm --force --recursive keydir confdir statedir
 
90
        -rm --force --recursive keydir confdir
277
91
 
278
 
check:  all
 
92
check:
279
93
        ./mandos --check
280
 
        ./mandos-ctl --check
281
94
 
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.  The messages are caused by not running as root, but   #"
287
 
        @echo "# you should NOT run \"make run-client\" as root unless you also    #"
288
 
        @echo "# unpacked and compiled Mandos as root, which is NOT recommended. #"
289
 
        @echo "# From plugin-runner: setgid: Operation not permitted             #"
290
 
        @echo "#                     setuid: Operation not permitted             #"
291
 
        @echo "# From askpass-fifo:  mkfifo: Permission denied                   #"
292
 
        @echo "# From mandos-client:                                             #"
293
 
        @echo "#             Failed to raise privileges: Operation not permitted #"
294
 
        @echo "#             Warning: network hook \"*\" exited with status *      #"
295
 
        @echo "###################################################################"
296
 
# We set GNOME_KEYRING_CONTROL to block pam_gnome_keyring
 
95
# Run the server with a local key
 
96
run-client: all keydir/seckey.txt keydir/pubkey.txt \
 
97
        keydir/secring.gpg keydir/pubring.gpg
297
98
        ./plugin-runner --plugin-dir=plugins.d \
298
 
                --plugin-helper-dir=plugin-helpers \
299
 
                --config-file=plugin-runner.conf \
300
 
                --options-for=mandos-client:--seckey=keydir/seckey.txt,--pubkey=keydir/pubkey.txt,--network-hook-dir=network-hooks.d \
301
 
                --env-for=mandos-client:GNOME_KEYRING_CONTROL= \
302
 
                $(CLIENTARGS)
 
99
                --options-for=password-request:--keydir=keydir
303
100
 
304
101
# Used by run-client
 
102
keydir/secring.gpg: keydir/seckey.txt
 
103
        gpg --homedir $(dir $<) --import $^
 
104
keydir/pubring.gpg: keydir/pubkey.txt
 
105
        gpg --homedir $(dir $<) --import $^
305
106
keydir/seckey.txt keydir/pubkey.txt: mandos-keygen
306
107
        install --directory keydir
307
108
        ./mandos-keygen --dir keydir --force
308
109
 
309
110
# Run the server with a local config
310
 
run-server: confdir/mandos.conf confdir/clients.conf statedir
311
 
        ./mandos --debug --no-dbus --configdir=confdir \
312
 
                --statedir=statedir $(SERVERARGS)
 
111
run-server: confdir/mandos.conf confdir/clients.conf
 
112
        ./mandos --debug --configdir=confdir
313
113
 
314
114
# Used by run-server
315
115
confdir/mandos.conf: mandos.conf
316
116
        install --directory confdir
317
 
        install --mode=u=rw,go=r $^ $@
 
117
        install $^ $@
318
118
confdir/clients.conf: clients.conf keydir/seckey.txt
319
119
        install --directory confdir
320
 
        install --mode=u=rw $< $@
 
120
        install clients.conf $@
321
121
# Add a client password
322
 
        ./mandos-keygen --dir keydir --password --no-ssh >> $@
323
 
statedir:
324
 
        install --directory statedir
325
 
 
326
 
install: install-server install-client-nokey
327
 
 
328
 
install-html: html
329
 
        install --directory $(htmldir)
330
 
        install --mode=u=rw,go=r --target-directory=$(htmldir) \
331
 
                $(htmldocs)
 
122
        ./mandos-keygen --dir keydir --password >> $@
 
123
 
 
124
install: install-server install-client
332
125
 
333
126
install-server: doc
334
 
        install --directory $(CONFDIR)
335
 
        if install --directory --mode=u=rwx --owner=$(USER) \
336
 
                --group=$(GROUP) $(STATEDIR); then \
337
 
                :; \
338
 
        elif install --directory --mode=u=rwx $(STATEDIR); then \
339
 
                chown -- $(USER):$(GROUP) $(STATEDIR) || :; \
340
 
        fi
341
 
        if [ "$(TMPFILES)" != "$(DESTDIR)" -a -d "$(TMPFILES)" ]; then \
342
 
                install --mode=u=rw,go=r tmpfiles.d-mandos.conf \
343
 
                        $(TMPFILES)/mandos.conf; \
344
 
        fi
345
 
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
346
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
347
 
                mandos-ctl
348
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
349
 
                mandos-monitor
350
 
        install --mode=u=rw,go=r --target-directory=$(CONFDIR) \
351
 
                mandos.conf
352
 
        install --mode=u=rw --target-directory=$(CONFDIR) \
 
127
        install --directory --parents $(CONFDIR) $(MANDIR)/man5 \
 
128
                $(MANDIR)/man8
 
129
        install --mode=0755 mandos $(PREFIX)/sbin/mandos
 
130
        install --mode=0644 --target-directory=$(CONFDIR) mandos.conf
 
131
        install --mode=0640 --target-directory=$(CONFDIR) \
353
132
                clients.conf
354
 
        install --mode=u=rw,go=r dbus-mandos.conf \
355
 
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
356
 
        install --mode=u=rwx,go=rx init.d-mandos \
357
 
                $(DESTDIR)/etc/init.d/mandos
358
 
        if [ "$(SYSTEMD)" != "$(DESTDIR)" -a -d "$(SYSTEMD)" ]; then \
359
 
                install --mode=u=rw,go=r mandos.service $(SYSTEMD); \
360
 
        fi
361
 
        install --mode=u=rw,go=r default-mandos \
362
 
                $(DESTDIR)/etc/default/mandos
363
 
        if [ -z $(DESTDIR) ]; then \
364
 
                update-rc.d mandos defaults 25 15;\
365
 
        fi
366
133
        gzip --best --to-stdout mandos.8 \
367
134
                > $(MANDIR)/man8/mandos.8.gz
368
 
        gzip --best --to-stdout mandos-monitor.8 \
369
 
                > $(MANDIR)/man8/mandos-monitor.8.gz
370
 
        gzip --best --to-stdout mandos-ctl.8 \
371
 
                > $(MANDIR)/man8/mandos-ctl.8.gz
372
135
        gzip --best --to-stdout mandos.conf.5 \
373
136
                > $(MANDIR)/man5/mandos.conf.5.gz
374
137
        gzip --best --to-stdout mandos-clients.conf.5 \
375
138
                > $(MANDIR)/man5/mandos-clients.conf.5.gz
376
 
        gzip --best --to-stdout intro.8mandos \
377
 
                > $(MANDIR)/man8/intro.8mandos.gz
378
139
 
379
 
install-client-nokey: all doc
380
 
        install --directory $(LIBDIR)/mandos $(CONFDIR)
381
 
        install --directory --mode=u=rwx $(KEYDIR) \
382
 
                $(LIBDIR)/mandos/plugins.d \
383
 
                $(LIBDIR)/mandos/plugin-helpers
384
 
        if [ "$(CONFDIR)" != "$(LIBDIR)/mandos" ]; then \
385
 
                install --mode=u=rwx \
386
 
                        --directory "$(CONFDIR)/plugins.d" \
387
 
                        "$(CONFDIR)/plugin-helpers"; \
388
 
        fi
389
 
        install --mode=u=rwx,go=rx --directory \
390
 
                "$(CONFDIR)/network-hooks.d"
391
 
        install --mode=u=rwx,go=rx \
392
 
                --target-directory=$(LIBDIR)/mandos plugin-runner
393
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
 
140
install-client: all doc /usr/share/initramfs-tools/hooks/.
 
141
        install --directory --parents $(PREFIX)/lib/mandos \
 
142
                $(CONFDIR) $(MANDIR)/man8
 
143
        install --directory --mode=0700 $(PREFIX)/lib/mandos/plugins.d
 
144
        chmod u=rwx,g=,o= $(PREFIX)/lib/mandos/plugins.d
 
145
        install --mode=0755 --target-directory=$(PREFIX)/lib/mandos \
 
146
                plugin-runner
 
147
        install --mode=0755 --target-directory=$(PREFIX)/sbin \
394
148
                mandos-keygen
395
 
        install --mode=u=rwx,go=rx \
396
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
 
149
        install --mode=0755 \
 
150
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
397
151
                plugins.d/password-prompt
398
 
        install --mode=u=rwxs,go=rx \
399
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
400
 
                plugins.d/mandos-client
401
 
        install --mode=u=rwxs,go=rx \
402
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
403
 
                plugins.d/usplash
404
 
        install --mode=u=rwxs,go=rx \
405
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
406
 
                plugins.d/splashy
407
 
        install --mode=u=rwxs,go=rx \
408
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
409
 
                plugins.d/askpass-fifo
410
 
        install --mode=u=rwxs,go=rx \
411
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
412
 
                plugins.d/plymouth
413
 
        install --mode=u=rwx,go=rx \
414
 
                --target-directory=$(LIBDIR)/mandos/plugin-helpers \
415
 
                plugin-helpers/mandos-client-iprouteadddel
 
152
        install --mode=4755 \
 
153
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
154
                plugins.d/password-request
416
155
        install initramfs-tools-hook \
417
 
                $(INITRAMFSTOOLS)/hooks/mandos
418
 
        install --mode=u=rw,go=r initramfs-tools-hook-conf \
419
 
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos
 
156
                /usr/share/initramfs-tools/hooks/mandos
 
157
        install initramfs-tools-hook-conf \
 
158
                /usr/share/initramfs-tools/conf-hooks.d/mandos
420
159
        install initramfs-tools-script \
421
 
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos
422
 
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
 
160
                /usr/share/initramfs-tools/scripts/local-top/mandos
423
161
        gzip --best --to-stdout mandos-keygen.8 \
424
162
                > $(MANDIR)/man8/mandos-keygen.8.gz
425
163
        gzip --best --to-stdout plugin-runner.8mandos \
426
164
                > $(MANDIR)/man8/plugin-runner.8mandos.gz
427
 
        gzip --best --to-stdout plugins.d/mandos-client.8mandos \
428
 
                > $(MANDIR)/man8/mandos-client.8mandos.gz
429
165
        gzip --best --to-stdout plugins.d/password-prompt.8mandos \
430
166
                > $(MANDIR)/man8/password-prompt.8mandos.gz
431
 
        gzip --best --to-stdout plugins.d/usplash.8mandos \
432
 
                > $(MANDIR)/man8/usplash.8mandos.gz
433
 
        gzip --best --to-stdout plugins.d/splashy.8mandos \
434
 
                > $(MANDIR)/man8/splashy.8mandos.gz
435
 
        gzip --best --to-stdout plugins.d/askpass-fifo.8mandos \
436
 
                > $(MANDIR)/man8/askpass-fifo.8mandos.gz
437
 
        gzip --best --to-stdout plugins.d/plymouth.8mandos \
438
 
                > $(MANDIR)/man8/plymouth.8mandos.gz
439
 
 
440
 
install-client: install-client-nokey
441
 
# Post-installation stuff
442
 
        -$(PREFIX)/sbin/mandos-keygen --dir "$(KEYDIR)"
 
167
        gzip --best --to-stdout plugins.d/password-request.8mandos \
 
168
                > $(MANDIR)/man8/password-request.8mandos.gz
 
169
        -$(PREFIX)/sbin/mandos-keygen
443
170
        update-initramfs -k all -u
444
 
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
445
171
 
446
172
uninstall: uninstall-server uninstall-client
447
173
 
448
 
uninstall-server:
 
174
uninstall-server: $(PREFIX)/sbin/mandos
449
175
        -rm --force $(PREFIX)/sbin/mandos \
450
 
                $(PREFIX)/sbin/mandos-ctl \
451
 
                $(PREFIX)/sbin/mandos-monitor \
452
176
                $(MANDIR)/man8/mandos.8.gz \
453
 
                $(MANDIR)/man8/mandos-monitor.8.gz \
454
 
                $(MANDIR)/man8/mandos-ctl.8.gz \
455
177
                $(MANDIR)/man5/mandos.conf.5.gz \
456
178
                $(MANDIR)/man5/mandos-clients.conf.5.gz
457
 
        update-rc.d -f mandos remove
458
179
        -rmdir $(CONFDIR)
459
180
 
460
181
uninstall-client:
461
182
# Refuse to uninstall client if /etc/crypttab is explicitly configured
462
183
# to use it.
463
184
        ! grep --regexp='^ *[^ #].*keyscript=[^,=]*/mandos/' \
464
 
                $(DESTDIR)/etc/crypttab
 
185
                /etc/crypttab
465
186
        -rm --force $(PREFIX)/sbin/mandos-keygen \
466
 
                $(LIBDIR)/mandos/plugin-runner \
467
 
                $(LIBDIR)/mandos/plugins.d/password-prompt \
468
 
                $(LIBDIR)/mandos/plugins.d/mandos-client \
469
 
                $(LIBDIR)/mandos/plugins.d/usplash \
470
 
                $(LIBDIR)/mandos/plugins.d/splashy \
471
 
                $(LIBDIR)/mandos/plugins.d/askpass-fifo \
472
 
                $(LIBDIR)/mandos/plugins.d/plymouth \
473
 
                $(INITRAMFSTOOLS)/hooks/mandos \
474
 
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos \
475
 
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos \
 
187
                $(PREFIX)/lib/mandos/plugin-runner \
 
188
                $(PREFIX)/lib/mandos/plugins.d/password-prompt \
 
189
                $(PREFIX)/lib/mandos/plugins.d/password-request \
 
190
                /usr/share/initramfs-tools/hooks/mandos \
 
191
                /usr/share/initramfs-tools/conf-hooks.d/mandos \
 
192
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
476
193
                $(MANDIR)/man8/mandos-keygen.8.gz \
477
 
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
478
 
                $(MANDIR)/man8/mandos-client.8mandos.gz
479
194
                $(MANDIR)/man8/password-prompt.8mandos.gz \
480
 
                $(MANDIR)/man8/usplash.8mandos.gz \
481
 
                $(MANDIR)/man8/splashy.8mandos.gz \
482
 
                $(MANDIR)/man8/askpass-fifo.8mandos.gz \
483
 
                $(MANDIR)/man8/plymouth.8mandos.gz \
484
 
        -rmdir $(LIBDIR)/mandos/plugins.d $(CONFDIR)/plugins.d \
485
 
                 $(LIBDIR)/mandos $(CONFDIR) $(KEYDIR)
 
195
                $(MANDIR)/man8/password-request.8mandos.gz
 
196
        -rmdir $(PREFIX)/lib/mandos/plugins.d $(CONFDIR)/plugins.d \
 
197
                 $(PREFIX)/lib/mandos $(CONFDIR)
486
198
        update-initramfs -k all -u
487
199
 
488
200
purge: purge-server purge-client
489
201
 
490
202
purge-server: uninstall-server
491
 
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
492
 
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
493
 
                $(DESTDIR)/etc/default/mandos \
494
 
                $(DESTDIR)/etc/init.d/mandos \
495
 
                $(SYSTEMD)/mandos.service \
496
 
                $(DESTDIR)/run/mandos.pid \
497
 
                $(DESTDIR)/var/run/mandos.pid
 
203
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf
498
204
        -rmdir $(CONFDIR)
499
205
 
500
206
purge-client: uninstall-client
501
 
        -shred --remove $(KEYDIR)/seckey.txt
502
 
        -rm --force $(CONFDIR)/plugin-runner.conf \
503
 
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt
504
 
        -rmdir $(KEYDIR) $(CONFDIR)/plugins.d $(CONFDIR)
 
207
        -rm --force $(CONFDIR)/seckey.txt $(CONFDIR)/pubkey.txt
 
208
        -rmdir $(CONFDIR) $(CONFDIR)/plugins.d