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