/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

First version of a somewhat complete D-Bus server interface.  Also
change user/group name to "_mandos".

* debian/mandos.postinst: Rename old "mandos" user and group to
                          "_mandos"; create "_mandos" user and group
                          if none exist.
* debian/mandos-client.postinst: - '' -

* initramfs-tools-hook: Try "_mandos" before "mandos" as user and
                        group name.

* mandos (_datetime_to_dbus_struct): New; was previously local.
  (Client.started): Renamed to "last_started".  All users changed.
  (Client.started): New; boolean.
  (Client.dbus_object_path): New.
  (Client.check_command): Renamed to "checker_command".  All users
                          changed.
  (Client.__init__): Set and use "self.dbus_object_path".  Set
                     "self.started".
  (Client.start): Update "self.started".  Emit "self.PropertyChanged"
                  signals for both "started" and "last_started".
  (Client.stop): Update "self.started".  Emit "self.PropertyChanged"
                 signal for "started".
  (Client.checker_callback): Take additional "command" argument.  All
                             callers changed. Emit
                             "self.PropertyChanged" signal.
  (Client.bump_timeout): Emit "self.PropertyChanged" signal for
                         "last_checked_ok".
  (Client.start_checker): Emit "self.PropertyChanged" signal for
                          "checker_running".
  (Client.stop_checker): Emit "self.PropertyChanged" signal for
                         "checker_running".
  (Client.still_valid): Bug fix: use "getattr(self, started, False)"
                        instead of "self.started" in case this client
                        object is so new that the "started" attribute
                        has not been created yet.
  (Client.IntervalChanged, Client.CheckerIsRunning, Client.GetChecker,
  Client.GetCreated, Client.GetFingerprint, Client.GetHost,
  Client.GetInterval, Client.GetName, Client.GetStarted,
  Client.GetTimeout, Client.StateChanged, Client.TimeoutChanged):
  Removed; all callers changed.
  (Client.CheckerCompleted): Add "condition" and "command" arguments.
                             All callers changed.
  (Client.GetAllProperties, Client.PropertyChanged): New.
  (Client.StillValid): Renamed to "IsStillValid".
  (Client.StartChecker): Changed to its own function to avoid the
                         return value from "Client.start_checker()".
  (Client.Stop): Changed to its own function to avoid the return value
                 from "Client.stop()".
  (main): Try "_mandos" before "mandos" as user and group name.
          Removed inner function "remove_from_clients".  New inner
          class "MandosServer".

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