/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
1
WARN=-O -Wall -Wformat=2 -Winit-self -Wmissing-include-dirs \
2
2
        -Wswitch-default -Wswitch-enum -Wunused-parameter \
3
 
        -Wstrict-aliasing=1 -Wextra -Wfloat-equal -Wundef -Wshadow \
 
3
        -Wstrict-aliasing=2 -Wextra -Wfloat-equal -Wundef -Wshadow \
4
4
        -Wunsafe-loop-optimizations -Wpointer-arith \
5
5
        -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings \
6
6
        -Wconversion -Wstrict-prototypes -Wold-style-definition \
8
8
#       -Wunreachable-code 
9
9
#DEBUG=-ggdb3
10
10
# For info about _FORTIFY_SOURCE, see
11
 
# <http://www.kernel.org/doc/man-pages/online/pages/man7/feature_test_macros.7.html>
12
 
# and <http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html>.
13
 
FORTIFY=-D_FORTIFY_SOURCE=2 -fstack-protector-all -fPIC
14
 
LINK_FORTIFY_LD=-z relro -z now
15
 
LINK_FORTIFY=
16
 
 
17
 
# If BROKEN_PIE is set, do not build with -pie
18
 
ifndef BROKEN_PIE
19
 
FORTIFY += -fPIE
20
 
LINK_FORTIFY += -pie
21
 
endif
 
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
22
14
#COVERAGE=--coverage
23
15
OPTIMIZE=-Os
24
16
LANGUAGE=-std=gnu99
25
17
htmldir=man
26
 
version=1.3.1
 
18
version=1.0.2
27
19
SED=sed
28
20
 
29
21
## Use these settings for a traditional /usr/local install
42
34
INITRAMFSTOOLS=$(DESTDIR)/usr/share/initramfs-tools
43
35
##
44
36
 
45
 
GNUTLS_CFLAGS=$(shell pkg-config --cflags-only-I gnutls)
46
 
GNUTLS_LIBS=$(shell pkg-config --libs gnutls)
 
37
GNUTLS_CFLAGS=$(shell libgnutls-config --cflags)
 
38
GNUTLS_LIBS=$(shell libgnutls-config --libs)
47
39
AVAHI_CFLAGS=$(shell pkg-config --cflags-only-I avahi-core)
48
40
AVAHI_LIBS=$(shell pkg-config --libs avahi-core)
49
 
GPGME_CFLAGS=$(shell gpgme-config --cflags; getconf LFS_CFLAGS)
50
 
GPGME_LIBS=$(shell gpgme-config --libs; getconf LFS_LIBS; \
51
 
        getconf LFS_LDFLAGS)
 
41
GPGME_CFLAGS=$(shell gpgme-config --cflags)
 
42
GPGME_LIBS=$(shell gpgme-config --libs)
52
43
 
53
44
# Do not change these two
54
45
CFLAGS=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) \
55
46
        $(LANGUAGE) $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(GPGME_CFLAGS) \
56
47
        -DVERSION='"$(version)"'
57
 
LDFLAGS=-Xlinker --as-needed $(COVERAGE) $(LINK_FORTIFY) $(foreach flag,$(LINK_FORTIFY_LD),-Xlinker $(flag))
 
48
LDFLAGS=$(COVERAGE) $(LINK_FORTIFY)
58
49
 
59
50
# Commands to format a DocBook <refentry> document into a manual page
60
 
DOCBOOKTOMAN=$(strip cd $(dir $<); xsltproc --nonet --xinclude \
 
51
DOCBOOKTOMAN=cd $(dir $<); xsltproc --nonet --xinclude \
61
52
        --param man.charmap.use.subset          0 \
62
53
        --param make.year.ranges                1 \
63
54
        --param make.single.year.ranges         1 \
65
56
        --param man.authors.section.enabled     0 \
66
57
         /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
67
58
        $(notdir $<); \
68
 
        $(MANPOST) $(notdir $@))
 
59
        $(MANPOST) $(notdir $@)
69
60
# DocBook-to-man post-processing to fix a '\n' escape bug
70
61
MANPOST=$(SED) --in-place --expression='s,\\\\en,\\en,g;s,\\n,\\en,g'
71
62
 
72
 
DOCBOOKTOHTML=$(strip xsltproc --nonet --xinclude \
 
63
DOCBOOKTOHTML=xsltproc --nonet --xinclude \
73
64
        --param make.year.ranges                1 \
74
65
        --param make.single.year.ranges         1 \
75
66
        --param man.output.quietly              1 \
77
68
        --param citerefentry.link               1 \
78
69
        --output $@ \
79
70
        /usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl \
80
 
        $<; $(HTMLPOST) $@)
 
71
        $<; $(HTMLPOST) $@
81
72
# Fix citerefentry links
82
73
HTMLPOST=$(SED) --in-place \
83
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'
84
75
 
85
76
PLUGINS=plugins.d/password-prompt plugins.d/mandos-client \
86
 
        plugins.d/usplash plugins.d/splashy plugins.d/askpass-fifo \
87
 
        plugins.d/plymouth
 
77
        plugins.d/usplash plugins.d/splashy plugins.d/askpass-fifo
88
78
CPROGS=plugin-runner $(PLUGINS)
89
 
PROGS=mandos mandos-keygen mandos-ctl mandos-monitor $(CPROGS)
90
 
DOCS=mandos.8 mandos-keygen.8 mandos-monitor.8 mandos-ctl.8 \
91
 
        mandos.conf.5 mandos-clients.conf.5 plugin-runner.8mandos \
 
79
PROGS=mandos mandos-keygen $(CPROGS)
 
80
DOCS=mandos.8 plugin-runner.8mandos mandos-keygen.8 \
92
81
        plugins.d/mandos-client.8mandos \
93
 
        plugins.d/password-prompt.8mandos plugins.d/usplash.8mandos \
94
 
        plugins.d/splashy.8mandos plugins.d/askpass-fifo.8mandos \
95
 
        plugins.d/plymouth.8mandos intro.8mandos
 
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
96
85
 
97
86
htmldocs=$(addsuffix .xhtml,$(DOCS))
98
87
 
119
108
%.8mandos.xhtml: %.xml common.ent legalnotice.xml
120
109
        $(DOCBOOKTOHTML)
121
110
 
122
 
intro.8mandos: intro.xml common.ent legalnotice.xml
123
 
        $(DOCBOOKTOMAN)
124
 
intro.8mandos.xhtml: intro.xml common.ent legalnotice.xml
125
 
        $(DOCBOOKTOHTML)
126
 
 
127
111
mandos.8: mandos.xml common.ent mandos-options.xml overview.xml \
128
112
                legalnotice.xml
129
113
        $(DOCBOOKTOMAN)
138
122
                 legalnotice.xml
139
123
        $(DOCBOOKTOHTML)
140
124
 
141
 
mandos-monitor.8: mandos-monitor.xml common.ent overview.xml \
142
 
                legalnotice.xml
143
 
        $(DOCBOOKTOMAN)
144
 
mandos-monitor.8.xhtml: mandos-monitor.xml common.ent overview.xml \
145
 
                 legalnotice.xml
146
 
        $(DOCBOOKTOHTML)
147
 
 
148
 
mandos-ctl.8: mandos-ctl.xml common.ent overview.xml \
149
 
                legalnotice.xml
150
 
        $(DOCBOOKTOMAN)
151
 
mandos-ctl.8.xhtml: mandos-ctl.xml common.ent overview.xml \
152
 
                 legalnotice.xml
153
 
        $(DOCBOOKTOHTML)
154
 
 
155
125
mandos.conf.5: mandos.conf.xml common.ent mandos-options.xml \
156
126
                legalnotice.xml
157
127
        $(DOCBOOKTOMAN)
179
149
 
180
150
# Update all these files with version number $(version)
181
151
common.ent: Makefile
182
 
        $(strip $(SED) --in-place \
183
 
                --expression='s/^\(<!ENTITY version "\)[^"]*">$$/\1$(version)">/' \
184
 
                $@)
 
152
        $(SED) --in-place \
 
153
                --expression='s/^\(<ENTITY VERSION "\)[^"]*">$$/\1$(version)"/' \
 
154
                $@
185
155
 
186
156
mandos: Makefile
187
 
        $(strip $(SED) --in-place \
 
157
        $(SED) --in-place \
188
158
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
189
 
                $@)
 
159
                $@
190
160
 
191
161
mandos-keygen: Makefile
192
 
        $(strip $(SED) --in-place \
 
162
        $(SED) --in-place \
193
163
                --expression='s/^\(VERSION="\)[^"]*"$$/\1$(version)"/' \
194
 
                $@)
195
 
 
196
 
mandos-ctl: Makefile
197
 
        $(strip $(SED) --in-place \
198
 
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
199
 
                $@)
200
 
 
201
 
mandos-monitor: Makefile
202
 
        $(strip $(SED) --in-place \
203
 
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
204
 
                $@)
 
164
                $@
205
165
 
206
166
mandos.lsm: Makefile
207
 
        $(strip $(SED) --in-place \
 
167
        $(SED) --in-place \
208
168
                --expression='s/^\(Version:\).*/\1\t$(version)/' \
209
 
                $@)
210
 
        $(strip $(SED) --in-place \
 
169
                $@
 
170
        $(SED) --in-place \
211
171
                --expression='s/^\(Entered-date:\).*/\1\t$(shell date --rfc-3339=date --reference=Makefile)/' \
212
 
                $@)
213
 
        $(strip $(SED) --in-place \
214
 
                --expression='s/\(mandos_\)[0-9.]\+\(\.orig\.tar\.gz\)/\1$(version)\2/' \
215
 
                $@)
 
172
                $@
216
173
 
217
 
plugins.d/mandos-client: plugins.d/mandos-client.c
218
 
        $(LINK.c) $^ -lrt $(GNUTLS_LIBS) $(AVAHI_LIBS) $(strip\
219
 
                ) $(GPGME_LIBS) $(LOADLIBES) $(LDLIBS) -o $@
 
174
plugins.d/mandos-client: plugins.d/mandos-client.o
 
175
        $(LINK.o) $(GNUTLS_LIBS) $(AVAHI_LIBS) $(GPGME_LIBS) \
 
176
                $(COMMON) $^ $(LOADLIBES) $(LDLIBS) -o $@
220
177
 
221
178
.PHONY : all doc html clean distclean run-client run-server install \
222
179
        install-server install-client uninstall uninstall-server \
235
192
 
236
193
# Run the client with a local config and key
237
194
run-client: all keydir/seckey.txt keydir/pubkey.txt
238
 
        @echo "###################################################################"
239
 
        @echo "# The following error messages are harmless and can be safely     #"
240
 
        @echo "# ignored.  The messages are caused by not running as root, but   #"
241
 
        @echo "# you should NOT run \"make run-client\" as root unless you also    #"
242
 
        @echo "# unpacked and compiled Mandos as root, which is NOT recommended. #"
243
 
        @echo "# From plugin-runner: setuid: Operation not permitted             #"
244
 
        @echo "# From askpass-fifo:  mkfifo: Permission denied                   #"
245
 
        @echo "# From mandos-client: setuid: Operation not permitted             #"
246
 
        @echo "#                     seteuid: Operation not permitted            #"
247
 
        @echo "#                     klogctl: Operation not permitted            #"
248
 
        @echo "###################################################################"
249
195
        ./plugin-runner --plugin-dir=plugins.d \
250
196
                --config-file=plugin-runner.conf \
251
 
                --options-for=mandos-client:--seckey=keydir/seckey.txt,--pubkey=keydir/pubkey.txt \
252
 
                $(CLIENTARGS)
 
197
                --options-for=mandos-client:--seckey=keydir/seckey.txt,--pubkey=keydir/pubkey.txt
253
198
 
254
199
# Used by run-client
255
200
keydir/seckey.txt keydir/pubkey.txt: mandos-keygen
258
203
 
259
204
# Run the server with a local config
260
205
run-server: confdir/mandos.conf confdir/clients.conf
261
 
        @echo "#################################################################"
262
 
        @echo "# NOTE: Please IGNORE the error about \"Could not open file      #"
263
 
        @echo "# u'/var/run/mandos.pid'\" -  it is harmless and is caused by    #"
264
 
        @echo "# the server not running as root.  Do NOT run \"make run-server\" #"
265
 
        @echo "# server as root if you didn't also unpack and compile it thus. #"
266
 
        @echo "#################################################################"
267
 
        ./mandos --debug --no-dbus --configdir=confdir $(SERVERARGS)
 
206
        ./mandos --debug --configdir=confdir
268
207
 
269
208
# Used by run-server
270
209
confdir/mandos.conf: mandos.conf
286
225
install-server: doc
287
226
        install --directory $(CONFDIR)
288
227
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
289
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
290
 
                mandos-ctl
291
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
292
 
                mandos-monitor
293
228
        install --mode=u=rw,go=r --target-directory=$(CONFDIR) \
294
229
                mandos.conf
295
230
        install --mode=u=rw --target-directory=$(CONFDIR) \
296
231
                clients.conf
297
 
        install --mode=u=rw,go=r dbus-mandos.conf \
298
 
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
299
232
        install --mode=u=rwx,go=rx init.d-mandos \
300
233
                $(DESTDIR)/etc/init.d/mandos
301
234
        install --mode=u=rw,go=r default-mandos \
305
238
        fi
306
239
        gzip --best --to-stdout mandos.8 \
307
240
                > $(MANDIR)/man8/mandos.8.gz
308
 
        gzip --best --to-stdout mandos-monitor.8 \
309
 
                > $(MANDIR)/man8/mandos-monitor.8.gz
310
 
        gzip --best --to-stdout mandos-ctl.8 \
311
 
                > $(MANDIR)/man8/mandos-ctl.8.gz
312
241
        gzip --best --to-stdout mandos.conf.5 \
313
242
                > $(MANDIR)/man5/mandos.conf.5.gz
314
243
        gzip --best --to-stdout mandos-clients.conf.5 \
341
270
        install --mode=u=rwxs,go=rx \
342
271
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
343
272
                plugins.d/askpass-fifo
344
 
        install --mode=u=rwxs,go=rx \
345
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
346
 
                plugins.d/plymouth
347
273
        install initramfs-tools-hook \
348
274
                $(INITRAMFSTOOLS)/hooks/mandos
349
275
        install --mode=u=rw,go=r initramfs-tools-hook-conf \
350
276
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos
351
277
        install initramfs-tools-script \
352
 
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos
 
278
                $(INITRAMFSTOOLS)/scripts/local-top/mandos
353
279
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
354
280
        gzip --best --to-stdout mandos-keygen.8 \
355
281
                > $(MANDIR)/man8/mandos-keygen.8.gz
356
282
        gzip --best --to-stdout plugin-runner.8mandos \
357
283
                > $(MANDIR)/man8/plugin-runner.8mandos.gz
 
284
        gzip --best --to-stdout plugins.d/password-prompt.8mandos \
 
285
                > $(MANDIR)/man8/password-prompt.8mandos.gz
358
286
        gzip --best --to-stdout plugins.d/mandos-client.8mandos \
359
287
                > $(MANDIR)/man8/mandos-client.8mandos.gz
360
 
        gzip --best --to-stdout plugins.d/password-prompt.8mandos \
361
 
                > $(MANDIR)/man8/password-prompt.8mandos.gz
362
288
        gzip --best --to-stdout plugins.d/usplash.8mandos \
363
289
                > $(MANDIR)/man8/usplash.8mandos.gz
364
290
        gzip --best --to-stdout plugins.d/splashy.8mandos \
365
291
                > $(MANDIR)/man8/splashy.8mandos.gz
366
292
        gzip --best --to-stdout plugins.d/askpass-fifo.8mandos \
367
293
                > $(MANDIR)/man8/askpass-fifo.8mandos.gz
368
 
        gzip --best --to-stdout plugins.d/plymouth.8mandos \
369
 
                > $(MANDIR)/man8/plymouth.8mandos.gz
370
294
 
371
295
install-client: install-client-nokey
372
296
# Post-installation stuff
378
302
 
379
303
uninstall-server:
380
304
        -rm --force $(PREFIX)/sbin/mandos \
381
 
                $(PREFIX)/sbin/mandos-ctl \
382
 
                $(PREFIX)/sbin/mandos-monitor \
383
305
                $(MANDIR)/man8/mandos.8.gz \
384
 
                $(MANDIR)/man8/mandos-monitor.8.gz \
385
 
                $(MANDIR)/man8/mandos-ctl.8.gz \
386
306
                $(MANDIR)/man5/mandos.conf.5.gz \
387
307
                $(MANDIR)/man5/mandos-clients.conf.5.gz
388
308
        update-rc.d -f mandos remove
400
320
                $(PREFIX)/lib/mandos/plugins.d/usplash \
401
321
                $(PREFIX)/lib/mandos/plugins.d/splashy \
402
322
                $(PREFIX)/lib/mandos/plugins.d/askpass-fifo \
403
 
                $(PREFIX)/lib/mandos/plugins.d/plymouth \
404
323
                $(INITRAMFSTOOLS)/hooks/mandos \
405
324
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos \
406
 
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos \
 
325
                $(INITRAMFSTOOLS)/scripts/local-top/mandos \
 
326
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
407
327
                $(MANDIR)/man8/mandos-keygen.8.gz \
408
 
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
409
 
                $(MANDIR)/man8/mandos-client.8mandos.gz
410
328
                $(MANDIR)/man8/password-prompt.8mandos.gz \
411
329
                $(MANDIR)/man8/usplash.8mandos.gz \
412
330
                $(MANDIR)/man8/splashy.8mandos.gz \
413
331
                $(MANDIR)/man8/askpass-fifo.8mandos.gz \
414
 
                $(MANDIR)/man8/plymouth.8mandos.gz \
 
332
                $(MANDIR)/man8/mandos-client.8mandos.gz
415
333
        -rmdir $(PREFIX)/lib/mandos/plugins.d $(CONFDIR)/plugins.d \
416
334
                 $(PREFIX)/lib/mandos $(CONFDIR) $(KEYDIR)
417
335
        update-initramfs -k all -u
420
338
 
421
339
purge-server: uninstall-server
422
340
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
423
 
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
424
341
                $(DESTDIR)/etc/default/mandos \
425
342
                $(DESTDIR)/etc/init.d/mandos \
426
343
                $(DESTDIR)/var/run/mandos.pid