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