/mandos/trunk

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

« back to all changes in this revision

Viewing changes to Makefile

  • Committer: Teddy Hogeborn
  • Date: 2008-12-10 01:26:02 UTC
  • mfrom: (237.1.2 mandos)
  • Revision ID: teddy@fukt.bsnet.se-20081210012602-vhz3h75xkj24t340
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
 
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))
 
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))
158
89
 
159
90
all: $(PROGS) mandos.lsm
160
91
 
177
108
%.8mandos.xhtml: %.xml common.ent legalnotice.xml
178
109
        $(DOCBOOKTOHTML)
179
110
 
180
 
intro.8mandos: intro.xml common.ent legalnotice.xml
181
 
        $(DOCBOOKTOMAN)
182
 
intro.8mandos.xhtml: intro.xml common.ent legalnotice.xml
183
 
        $(DOCBOOKTOHTML)
184
 
 
185
111
mandos.8: mandos.xml common.ent mandos-options.xml overview.xml \
186
112
                legalnotice.xml
187
113
        $(DOCBOOKTOMAN)
196
122
                 legalnotice.xml
197
123
        $(DOCBOOKTOHTML)
198
124
 
199
 
mandos-monitor.8: mandos-monitor.xml common.ent overview.xml \
200
 
                legalnotice.xml
201
 
        $(DOCBOOKTOMAN)
202
 
mandos-monitor.8.xhtml: mandos-monitor.xml common.ent overview.xml \
203
 
                 legalnotice.xml
204
 
        $(DOCBOOKTOHTML)
205
 
 
206
 
mandos-ctl.8: mandos-ctl.xml common.ent overview.xml \
207
 
                legalnotice.xml
208
 
        $(DOCBOOKTOMAN)
209
 
mandos-ctl.8.xhtml: mandos-ctl.xml common.ent overview.xml \
210
 
                 legalnotice.xml
211
 
        $(DOCBOOKTOHTML)
212
 
 
213
125
mandos.conf.5: mandos.conf.xml common.ent mandos-options.xml \
214
126
                legalnotice.xml
215
127
        $(DOCBOOKTOMAN)
224
136
                overview.xml legalnotice.xml
225
137
        $(DOCBOOKTOHTML)
226
138
 
227
 
dracut-module/password-agent.8mandos: \
228
 
                dracut-module/password-agent.xml common.ent \
229
 
                overview.xml legalnotice.xml
230
 
        $(DOCBOOKTOMAN)
231
 
dracut-module/password-agent.8mandos.xhtml: \
232
 
                dracut-module/password-agent.xml common.ent \
233
 
                overview.xml legalnotice.xml
234
 
        $(DOCBOOKTOHTML)
235
 
 
236
139
plugins.d/mandos-client.8mandos: plugins.d/mandos-client.xml \
237
140
                                        common.ent \
238
141
                                        mandos-options.xml \
246
149
 
247
150
# Update all these files with version number $(version)
248
151
common.ent: Makefile
249
 
        $(strip $(SED) --in-place \
250
 
                --expression='s/^\(<!ENTITY version "\)[^"]*">$$/\1$(version)">/' \
251
 
                $@)
 
152
        $(SED) --in-place \
 
153
                --expression='s/^\(<ENTITY VERSION "\)[^"]*">$$/\1$(version)"/' \
 
154
                $@
252
155
 
253
156
mandos: Makefile
254
 
        $(strip $(SED) --in-place \
 
157
        $(SED) --in-place \
255
158
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
256
 
                $@)
 
159
                $@
257
160
 
258
161
mandos-keygen: Makefile
259
 
        $(strip $(SED) --in-place \
 
162
        $(SED) --in-place \
260
163
                --expression='s/^\(VERSION="\)[^"]*"$$/\1$(version)"/' \
261
 
                $@)
262
 
 
263
 
mandos-ctl: Makefile
264
 
        $(strip $(SED) --in-place \
265
 
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
266
 
                $@)
267
 
 
268
 
mandos-monitor: Makefile
269
 
        $(strip $(SED) --in-place \
270
 
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
271
 
                $@)
 
164
                $@
272
165
 
273
166
mandos.lsm: Makefile
274
 
        $(strip $(SED) --in-place \
 
167
        $(SED) --in-place \
275
168
                --expression='s/^\(Version:\).*/\1\t$(version)/' \
276
 
                $@)
277
 
        $(strip $(SED) --in-place \
 
169
                $@
 
170
        $(SED) --in-place \
278
171
                --expression='s/^\(Entered-date:\).*/\1\t$(shell date --rfc-3339=date --reference=Makefile)/' \
279
 
                $@)
280
 
        $(strip $(SED) --in-place \
281
 
                --expression='s/\(mandos_\)[0-9.]\+\(\.orig\.tar\.gz\)/\1$(version)\2/' \
282
 
                $@)
283
 
 
284
 
# Need to add the GnuTLS, Avahi and GPGME libraries
285
 
plugins.d/mandos-client: plugins.d/mandos-client.c
286
 
        $(LINK.c) $^ $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(strip\
287
 
                ) $(GPGME_CFLAGS) $(GNUTLS_LIBS) $(strip\
288
 
                ) $(AVAHI_LIBS) $(GPGME_LIBS) $(LOADLIBES) $(strip\
289
 
                ) $(LDLIBS) -o $@
290
 
 
291
 
# Need to add the libnl-route library
292
 
plugin-helpers/mandos-client-iprouteadddel: plugin-helpers/mandos-client-iprouteadddel.c
293
 
        $(LINK.c) $(LIBNL3_CFLAGS) $^ $(LIBNL3_LIBS) $(strip\
294
 
                ) $(LOADLIBES) $(LDLIBS) -o $@
295
 
 
296
 
# Need to add the GLib and pthread libraries
297
 
dracut-module/password-agent: dracut-module/password-agent.c
298
 
        $(LINK.c) $(GLIB_CFLAGS) $^ $(GLIB_LIBS) -lpthread $(strip\
299
 
                ) $(LOADLIBES) $(LDLIBS) -o $@
300
 
 
301
 
.PHONY : all doc html clean distclean mostlyclean maintainer-clean \
302
 
        check run-client run-server install install-html \
303
 
        install-server install-client-nokey install-client uninstall \
304
 
        uninstall-server uninstall-client purge purge-server \
305
 
        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
306
181
 
307
182
clean:
308
183
        -rm --force $(CPROGS) $(objects) $(htmldocs) $(DOCS) core
310
185
distclean: clean
311
186
mostlyclean: clean
312
187
maintainer-clean: clean
313
 
        -rm --force --recursive keydir confdir statedir
 
188
        -rm --force --recursive keydir confdir
314
189
 
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
 
run-client: all keydir/seckey.txt keydir/pubkey.txt \
325
 
                        keydir/tls-privkey.pem keydir/tls-pubkey.pem
326
 
        @echo '######################################################'
327
 
        @echo '# The following error messages are harmless and can  #'
328
 
        @echo '#  be safely ignored:                                #'
329
 
        @echo '## From plugin-runner:                               #'
330
 
        @echo '# setgid: Operation not permitted                    #'
331
 
        @echo '# setuid: Operation not permitted                    #'
332
 
        @echo '## From askpass-fifo:                                #'
333
 
        @echo '# mkfifo: Permission denied                          #'
334
 
        @echo '## From mandos-client:                               #'
335
 
        @echo '# Failed to raise privileges: Operation not permi... #'
336
 
        @echo '# Warning: network hook "*" exited with status *     #'
337
 
        @echo '# ioctl SIOCSIFFLAGS +IFF_UP: Operation not permi... #'
338
 
        @echo '# Failed to bring up interface "*": Operation not... #'
339
 
        @echo '#                                                    #'
340
 
        @echo '# (The messages are caused by not running as root,   #'
341
 
        @echo '# but you should NOT run "make run-client" as root   #'
342
 
        @echo '# unless you also unpacked and compiled Mandos as    #'
343
 
        @echo '# root, which is also NOT recommended.)              #'
344
 
        @echo '######################################################'
345
 
# We set GNOME_KEYRING_CONTROL to block pam_gnome_keyring
 
194
run-client: all keydir/seckey.txt keydir/pubkey.txt
346
195
        ./plugin-runner --plugin-dir=plugins.d \
347
 
                --plugin-helper-dir=plugin-helpers \
348
196
                --config-file=plugin-runner.conf \
349
 
                --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 \
350
 
                --env-for=mandos-client:GNOME_KEYRING_CONTROL= \
351
 
                $(CLIENTARGS)
 
197
                --options-for=mandos-client:--seckey=keydir/seckey.txt,--pubkey=keydir/pubkey.txt
352
198
 
353
199
# Used by run-client
354
 
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
355
201
        install --directory keydir
356
202
        ./mandos-keygen --dir keydir --force
357
203
 
358
204
# Run the server with a local config
359
 
run-server: confdir/mandos.conf confdir/clients.conf statedir
360
 
        ./mandos --debug --no-dbus --configdir=confdir \
361
 
                --statedir=statedir $(SERVERARGS)
 
205
run-server: confdir/mandos.conf confdir/clients.conf
 
206
        ./mandos --debug --configdir=confdir
362
207
 
363
208
# Used by run-server
364
209
confdir/mandos.conf: mandos.conf
365
210
        install --directory confdir
366
211
        install --mode=u=rw,go=r $^ $@
367
 
confdir/clients.conf: clients.conf keydir/seckey.txt keydir/tls-pubkey.pem
 
212
confdir/clients.conf: clients.conf keydir/seckey.txt
368
213
        install --directory confdir
369
214
        install --mode=u=rw $< $@
370
215
# Add a client password
371
 
        ./mandos-keygen --dir keydir --password --no-ssh >> $@
372
 
statedir:
373
 
        install --directory statedir
 
216
        ./mandos-keygen --dir keydir --password >> $@
374
217
 
375
218
install: install-server install-client-nokey
376
219
 
381
224
 
382
225
install-server: doc
383
226
        install --directory $(CONFDIR)
384
 
        if install --directory --mode=u=rwx --owner=$(USER) \
385
 
                --group=$(GROUP) $(STATEDIR); then \
386
 
                :; \
387
 
        elif install --directory --mode=u=rwx $(STATEDIR); then \
388
 
                chown -- $(USER):$(GROUP) $(STATEDIR) || :; \
389
 
        fi
390
 
        if [ "$(TMPFILES)" != "$(DESTDIR)" \
391
 
                        -a -d "$(TMPFILES)" ]; then \
392
 
                install --mode=u=rw,go=r tmpfiles.d-mandos.conf \
393
 
                        $(TMPFILES)/mandos.conf; \
394
 
        fi
395
 
        if [ "$(SYSUSERS)" != "$(DESTDIR)" \
396
 
                        -a -d "$(SYSUSERS)" ]; then \
397
 
                install --mode=u=rw,go=r sysusers.d-mandos.conf \
398
 
                        $(SYSUSERS)/mandos.conf; \
399
 
        fi
400
227
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
401
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
402
 
                mandos-ctl
403
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
404
 
                mandos-monitor
405
228
        install --mode=u=rw,go=r --target-directory=$(CONFDIR) \
406
229
                mandos.conf
407
230
        install --mode=u=rw --target-directory=$(CONFDIR) \
408
231
                clients.conf
409
 
        install --mode=u=rw,go=r dbus-mandos.conf \
410
 
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
411
232
        install --mode=u=rwx,go=rx init.d-mandos \
412
233
                $(DESTDIR)/etc/init.d/mandos
413
 
        if [ "$(SYSTEMD)" != "$(DESTDIR)" -a -d "$(SYSTEMD)" ]; then \
414
 
                install --mode=u=rw,go=r mandos.service $(SYSTEMD); \
415
 
        fi
416
234
        install --mode=u=rw,go=r default-mandos \
417
235
                $(DESTDIR)/etc/default/mandos
418
236
        if [ -z $(DESTDIR) ]; then \
420
238
        fi
421
239
        gzip --best --to-stdout mandos.8 \
422
240
                > $(MANDIR)/man8/mandos.8.gz
423
 
        gzip --best --to-stdout mandos-monitor.8 \
424
 
                > $(MANDIR)/man8/mandos-monitor.8.gz
425
 
        gzip --best --to-stdout mandos-ctl.8 \
426
 
                > $(MANDIR)/man8/mandos-ctl.8.gz
427
241
        gzip --best --to-stdout mandos.conf.5 \
428
242
                > $(MANDIR)/man5/mandos.conf.5.gz
429
243
        gzip --best --to-stdout mandos-clients.conf.5 \
430
244
                > $(MANDIR)/man5/mandos-clients.conf.5.gz
431
 
        gzip --best --to-stdout intro.8mandos \
432
 
                > $(MANDIR)/man8/intro.8mandos.gz
433
245
 
434
246
install-client-nokey: all doc
435
 
        install --directory $(LIBDIR)/mandos $(CONFDIR)
 
247
        install --directory $(PREFIX)/lib/mandos $(CONFDIR)
436
248
        install --directory --mode=u=rwx $(KEYDIR) \
437
 
                $(LIBDIR)/mandos/plugins.d \
438
 
                $(LIBDIR)/mandos/plugin-helpers
439
 
        if [ "$(CONFDIR)" != "$(LIBDIR)/mandos" ]; then \
 
249
                $(PREFIX)/lib/mandos/plugins.d
 
250
        if [ "$(CONFDIR)" != "$(PREFIX)/lib/mandos" ]; then \
440
251
                install --mode=u=rwx \
441
 
                        --directory "$(CONFDIR)/plugins.d" \
442
 
                        "$(CONFDIR)/plugin-helpers"; \
 
252
                        --directory "$(CONFDIR)/plugins.d"; \
443
253
        fi
444
 
        install --mode=u=rwx,go=rx --directory \
445
 
                "$(CONFDIR)/network-hooks.d"
446
 
        install --mode=u=rwx,go=rx \
447
 
                --target-directory=$(LIBDIR)/mandos plugin-runner
448
 
        install --mode=u=rwx,go=rx \
449
 
                --target-directory=$(LIBDIR)/mandos \
450
 
                mandos-to-cryptroot-unlock
 
254
        install --mode=u=rwx,go=rx \
 
255
                --target-directory=$(PREFIX)/lib/mandos plugin-runner
451
256
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
452
257
                mandos-keygen
453
258
        install --mode=u=rwx,go=rx \
454
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
 
259
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
455
260
                plugins.d/password-prompt
456
261
        install --mode=u=rwxs,go=rx \
457
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
 
262
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
458
263
                plugins.d/mandos-client
459
264
        install --mode=u=rwxs,go=rx \
460
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
 
265
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
461
266
                plugins.d/usplash
462
267
        install --mode=u=rwxs,go=rx \
463
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
 
268
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
464
269
                plugins.d/splashy
465
270
        install --mode=u=rwxs,go=rx \
466
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
 
271
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
467
272
                plugins.d/askpass-fifo
468
 
        install --mode=u=rwxs,go=rx \
469
 
                --target-directory=$(LIBDIR)/mandos/plugins.d \
470
 
                plugins.d/plymouth
471
 
        install --mode=u=rwx,go=rx \
472
 
                --target-directory=$(LIBDIR)/mandos/plugin-helpers \
473
 
                plugin-helpers/mandos-client-iprouteadddel
474
273
        install initramfs-tools-hook \
475
274
                $(INITRAMFSTOOLS)/hooks/mandos
476
 
        install --mode=u=rw,go=r initramfs-tools-conf \
477
 
                $(INITRAMFSTOOLS)/conf.d/mandos-conf
478
 
        install --mode=u=rw,go=r initramfs-tools-conf-hook \
479
 
                $(INITRAMFSTOOLS)/conf-hooks.d/zz-mandos
 
275
        install --mode=u=rw,go=r initramfs-tools-hook-conf \
 
276
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos
480
277
        install initramfs-tools-script \
481
 
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos
482
 
        install initramfs-tools-script-stop \
483
 
                $(INITRAMFSTOOLS)/scripts/local-premount/mandos
484
 
        install --directory $(DRACUTMODULE)
485
 
        install --mode=u=rw,go=r --target-directory=$(DRACUTMODULE) \
486
 
                dracut-module/ask-password-mandos.path \
487
 
                dracut-module/ask-password-mandos.service
488
 
        install --mode=u=rwxs,go=rx \
489
 
                --target-directory=$(DRACUTMODULE) \
490
 
                dracut-module/module-setup.sh \
491
 
                dracut-module/cmdline-mandos.sh \
492
 
                dracut-module/password-agent
 
278
                $(INITRAMFSTOOLS)/scripts/local-top/mandos
493
279
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
494
280
        gzip --best --to-stdout mandos-keygen.8 \
495
281
                > $(MANDIR)/man8/mandos-keygen.8.gz
496
282
        gzip --best --to-stdout plugin-runner.8mandos \
497
283
                > $(MANDIR)/man8/plugin-runner.8mandos.gz
 
284
        gzip --best --to-stdout plugins.d/password-prompt.8mandos \
 
285
                > $(MANDIR)/man8/password-prompt.8mandos.gz
498
286
        gzip --best --to-stdout plugins.d/mandos-client.8mandos \
499
287
                > $(MANDIR)/man8/mandos-client.8mandos.gz
500
 
        gzip --best --to-stdout plugins.d/password-prompt.8mandos \
501
 
                > $(MANDIR)/man8/password-prompt.8mandos.gz
502
288
        gzip --best --to-stdout plugins.d/usplash.8mandos \
503
289
                > $(MANDIR)/man8/usplash.8mandos.gz
504
290
        gzip --best --to-stdout plugins.d/splashy.8mandos \
505
291
                > $(MANDIR)/man8/splashy.8mandos.gz
506
292
        gzip --best --to-stdout plugins.d/askpass-fifo.8mandos \
507
293
                > $(MANDIR)/man8/askpass-fifo.8mandos.gz
508
 
        gzip --best --to-stdout plugins.d/plymouth.8mandos \
509
 
                > $(MANDIR)/man8/plymouth.8mandos.gz
510
 
        gzip --best --to-stdout dracut-module/password-agent.8mandos \
511
 
                > $(MANDIR)/man8/password-agent.8mandos.gz
512
294
 
513
295
install-client: install-client-nokey
514
296
# Post-installation stuff
515
297
        -$(PREFIX)/sbin/mandos-keygen --dir "$(KEYDIR)"
516
 
        if command -v update-initramfs >/dev/null; then \
517
 
            update-initramfs -k all -u; \
518
 
        elif command -v dracut >/dev/null; then \
519
 
            for initrd in $(DESTDIR)/boot/initr*-$(LINUXVERSION); do \
520
 
                if [ -w "$$initrd" ]; then \
521
 
                    chmod go-r "$$initrd"; \
522
 
                    dracut --force "$$initrd"; \
523
 
                fi; \
524
 
            done; \
525
 
        fi
 
298
        update-initramfs -k all -u
526
299
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
527
300
 
528
301
uninstall: uninstall-server uninstall-client
529
302
 
530
303
uninstall-server:
531
304
        -rm --force $(PREFIX)/sbin/mandos \
532
 
                $(PREFIX)/sbin/mandos-ctl \
533
 
                $(PREFIX)/sbin/mandos-monitor \
534
305
                $(MANDIR)/man8/mandos.8.gz \
535
 
                $(MANDIR)/man8/mandos-monitor.8.gz \
536
 
                $(MANDIR)/man8/mandos-ctl.8.gz \
537
306
                $(MANDIR)/man5/mandos.conf.5.gz \
538
307
                $(MANDIR)/man5/mandos-clients.conf.5.gz
539
308
        update-rc.d -f mandos remove
545
314
        ! grep --regexp='^ *[^ #].*keyscript=[^,=]*/mandos/' \
546
315
                $(DESTDIR)/etc/crypttab
547
316
        -rm --force $(PREFIX)/sbin/mandos-keygen \
548
 
                $(LIBDIR)/mandos/plugin-runner \
549
 
                $(LIBDIR)/mandos/plugins.d/password-prompt \
550
 
                $(LIBDIR)/mandos/plugins.d/mandos-client \
551
 
                $(LIBDIR)/mandos/plugins.d/usplash \
552
 
                $(LIBDIR)/mandos/plugins.d/splashy \
553
 
                $(LIBDIR)/mandos/plugins.d/askpass-fifo \
554
 
                $(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 \
555
323
                $(INITRAMFSTOOLS)/hooks/mandos \
556
324
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos \
557
 
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos \
558
 
                $(INITRAMFSTOOLS)/scripts/local-premount/mandos \
559
 
                $(DRACUTMODULE)/ask-password-mandos.path \
560
 
                $(DRACUTMODULE)/ask-password-mandos.service \
561
 
                $(DRACUTMODULE)/module-setup.sh \
562
 
                $(DRACUTMODULE)/cmdline-mandos.sh \
563
 
                $(DRACUTMODULE)/password-agent \
 
325
                $(INITRAMFSTOOLS)/scripts/local-top/mandos \
 
326
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
564
327
                $(MANDIR)/man8/mandos-keygen.8.gz \
565
 
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
566
 
                $(MANDIR)/man8/mandos-client.8mandos.gz
567
328
                $(MANDIR)/man8/password-prompt.8mandos.gz \
568
329
                $(MANDIR)/man8/usplash.8mandos.gz \
569
330
                $(MANDIR)/man8/splashy.8mandos.gz \
570
331
                $(MANDIR)/man8/askpass-fifo.8mandos.gz \
571
 
                $(MANDIR)/man8/plymouth.8mandos.gz \
572
 
                $(MANDIR)/man8/password-agent.8mandos.gz \
573
 
        -rmdir $(LIBDIR)/mandos/plugins.d $(CONFDIR)/plugins.d \
574
 
                 $(LIBDIR)/mandos $(CONFDIR) $(KEYDIR) $(DRACUTMODULE)
575
 
        if command -v update-initramfs >/dev/null; then \
576
 
            update-initramfs -k all -u; \
577
 
        elif command -v dracut >/dev/null; then \
578
 
            for initrd in $(DESTDIR)/boot/initr*-$(LINUXVERSION); do \
579
 
                test -w "$$initrd" && dracut --force "$$initrd"; \
580
 
            done; \
581
 
        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
582
336
 
583
337
purge: purge-server purge-client
584
338
 
585
339
purge-server: uninstall-server
586
340
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
587
 
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
588
341
                $(DESTDIR)/etc/default/mandos \
589
342
                $(DESTDIR)/etc/init.d/mandos \
590
 
                $(SYSTEMD)/mandos.service \
591
 
                $(DESTDIR)/run/mandos.pid \
592
343
                $(DESTDIR)/var/run/mandos.pid
593
344
        -rmdir $(CONFDIR)
594
345
 
595
346
purge-client: uninstall-client
596
 
        -shred --remove $(KEYDIR)/seckey.txt $(KEYDIR)/tls-privkey.pem
 
347
        -shred --remove $(KEYDIR)/seckey.txt
597
348
        -rm --force $(CONFDIR)/plugin-runner.conf \
598
 
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt \
599
 
                $(KEYDIR)/tls-pubkey.txt $(KEYDIR)/tls-privkey.txt
 
349
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt
600
350
        -rmdir $(KEYDIR) $(CONFDIR)/plugins.d $(CONFDIR)