/mandos/release

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/release

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