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