/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.2.3
 
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=$(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
 
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
 
133
122
                 legalnotice.xml
134
123
        $(DOCBOOKTOHTML)
135
124
 
136
 
mandos-monitor.8: mandos-monitor.xml common.ent overview.xml \
137
 
                legalnotice.xml
138
 
        $(DOCBOOKTOMAN)
139
 
mandos-monitor.8.xhtml: mandos-monitor.xml common.ent overview.xml \
140
 
                 legalnotice.xml
141
 
        $(DOCBOOKTOHTML)
142
 
 
143
 
mandos-ctl.8: mandos-ctl.xml common.ent overview.xml \
144
 
                legalnotice.xml
145
 
        $(DOCBOOKTOMAN)
146
 
mandos-ctl.8.xhtml: mandos-ctl.xml common.ent overview.xml \
147
 
                 legalnotice.xml
148
 
        $(DOCBOOKTOHTML)
149
 
 
150
125
mandos.conf.5: mandos.conf.xml common.ent mandos-options.xml \
151
126
                legalnotice.xml
152
127
        $(DOCBOOKTOMAN)
174
149
 
175
150
# Update all these files with version number $(version)
176
151
common.ent: Makefile
177
 
        $(strip $(SED) --in-place \
178
 
                --expression='s/^\(<!ENTITY version "\)[^"]*">$$/\1$(version)">/' \
179
 
                $@)
 
152
        $(SED) --in-place \
 
153
                --expression='s/^\(<ENTITY VERSION "\)[^"]*">$$/\1$(version)"/' \
 
154
                $@
180
155
 
181
156
mandos: Makefile
182
 
        $(strip $(SED) --in-place \
 
157
        $(SED) --in-place \
183
158
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
184
 
                $@)
 
159
                $@
185
160
 
186
161
mandos-keygen: Makefile
187
 
        $(strip $(SED) --in-place \
 
162
        $(SED) --in-place \
188
163
                --expression='s/^\(VERSION="\)[^"]*"$$/\1$(version)"/' \
189
 
                $@)
190
 
 
191
 
mandos-ctl: Makefile
192
 
        $(strip $(SED) --in-place \
193
 
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
194
 
                $@)
195
 
 
196
 
mandos-monitor: Makefile
197
 
        $(strip $(SED) --in-place \
198
 
                --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' \
199
 
                $@)
 
164
                $@
200
165
 
201
166
mandos.lsm: Makefile
202
 
        $(strip $(SED) --in-place \
 
167
        $(SED) --in-place \
203
168
                --expression='s/^\(Version:\).*/\1\t$(version)/' \
204
 
                $@)
205
 
        $(strip $(SED) --in-place \
 
169
                $@
 
170
        $(SED) --in-place \
206
171
                --expression='s/^\(Entered-date:\).*/\1\t$(shell date --rfc-3339=date --reference=Makefile)/' \
207
 
                $@)
208
 
        $(strip $(SED) --in-place \
209
 
                --expression='s/\(mandos_\)[0-9.]\+\(\.orig\.tar\.gz\)/\1$(version)\2/' \
210
 
                $@)
 
172
                $@
211
173
 
212
 
plugins.d/mandos-client: plugins.d/mandos-client.c
213
 
        $(LINK.c) $(GNUTLS_LIBS) $(AVAHI_LIBS) $(GPGME_LIBS) $(strip\
214
 
                ) $(COMMON) $^ $(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 $@
215
177
 
216
178
.PHONY : all doc html clean distclean run-client run-server install \
217
179
        install-server install-client uninstall uninstall-server \
230
192
 
231
193
# Run the client with a local config and key
232
194
run-client: all keydir/seckey.txt keydir/pubkey.txt
233
 
        @echo "###################################################################"
234
 
        @echo "# The following error messages are harmless and can be safely     #"
235
 
        @echo "# ignored.  The messages are caused by not running as root, but   #"
236
 
        @echo "# you should NOT run \"make run-client\" as root unless you also    #"
237
 
        @echo "# unpacked and compiled Mandos as root, which is NOT recommended. #"
238
 
        @echo "# From plugin-runner: setuid: Operation not permitted             #"
239
 
        @echo "# From askpass-fifo:  mkfifo: Permission denied                   #"
240
 
        @echo "# From mandos-client: setuid: Operation not permitted             #"
241
 
        @echo "#                     seteuid: Operation not permitted            #"
242
 
        @echo "#                     klogctl: Operation not permitted            #"
243
 
        @echo "###################################################################"
244
195
        ./plugin-runner --plugin-dir=plugins.d \
245
196
                --config-file=plugin-runner.conf \
246
 
                --options-for=mandos-client:--seckey=keydir/seckey.txt,--pubkey=keydir/pubkey.txt \
247
 
                $(CLIENTARGS)
 
197
                --options-for=mandos-client:--seckey=keydir/seckey.txt,--pubkey=keydir/pubkey.txt
248
198
 
249
199
# Used by run-client
250
200
keydir/seckey.txt keydir/pubkey.txt: mandos-keygen
253
203
 
254
204
# Run the server with a local config
255
205
run-server: confdir/mandos.conf confdir/clients.conf
256
 
        @echo "#################################################################"
257
 
        @echo "# NOTE: Please IGNORE the error about \"Could not open file      #"
258
 
        @echo "# u'/var/run/mandos.pid'\" -  it is harmless and is caused by    #"
259
 
        @echo "# the server not running as root.  Do NOT run \"make run-server\" #"
260
 
        @echo "# server as root if you didn't also unpack and compile it thus. #"
261
 
        @echo "#################################################################"
262
 
        ./mandos --debug --no-dbus --configdir=confdir $(SERVERARGS)
 
206
        ./mandos --debug --configdir=confdir
263
207
 
264
208
# Used by run-server
265
209
confdir/mandos.conf: mandos.conf
281
225
install-server: doc
282
226
        install --directory $(CONFDIR)
283
227
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
284
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
285
 
                mandos-ctl
286
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
287
 
                mandos-monitor
288
228
        install --mode=u=rw,go=r --target-directory=$(CONFDIR) \
289
229
                mandos.conf
290
230
        install --mode=u=rw --target-directory=$(CONFDIR) \
291
231
                clients.conf
292
 
        install --mode=u=rw,go=r dbus-mandos.conf \
293
 
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
294
232
        install --mode=u=rwx,go=rx init.d-mandos \
295
233
                $(DESTDIR)/etc/init.d/mandos
296
234
        install --mode=u=rw,go=r default-mandos \
300
238
        fi
301
239
        gzip --best --to-stdout mandos.8 \
302
240
                > $(MANDIR)/man8/mandos.8.gz
303
 
        gzip --best --to-stdout mandos-monitor.8 \
304
 
                > $(MANDIR)/man8/mandos-monitor.8.gz
305
 
        gzip --best --to-stdout mandos-ctl.8 \
306
 
                > $(MANDIR)/man8/mandos-ctl.8.gz
307
241
        gzip --best --to-stdout mandos.conf.5 \
308
242
                > $(MANDIR)/man5/mandos.conf.5.gz
309
243
        gzip --best --to-stdout mandos-clients.conf.5 \
336
270
        install --mode=u=rwxs,go=rx \
337
271
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
338
272
                plugins.d/askpass-fifo
339
 
        install --mode=u=rwxs,go=rx \
340
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
341
 
                plugins.d/plymouth
342
273
        install initramfs-tools-hook \
343
274
                $(INITRAMFSTOOLS)/hooks/mandos
344
275
        install --mode=u=rw,go=r initramfs-tools-hook-conf \
345
276
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos
346
277
        install initramfs-tools-script \
347
 
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos
 
278
                $(INITRAMFSTOOLS)/scripts/local-top/mandos
348
279
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
349
280
        gzip --best --to-stdout mandos-keygen.8 \
350
281
                > $(MANDIR)/man8/mandos-keygen.8.gz
351
282
        gzip --best --to-stdout plugin-runner.8mandos \
352
283
                > $(MANDIR)/man8/plugin-runner.8mandos.gz
 
284
        gzip --best --to-stdout plugins.d/password-prompt.8mandos \
 
285
                > $(MANDIR)/man8/password-prompt.8mandos.gz
353
286
        gzip --best --to-stdout plugins.d/mandos-client.8mandos \
354
287
                > $(MANDIR)/man8/mandos-client.8mandos.gz
355
 
        gzip --best --to-stdout plugins.d/password-prompt.8mandos \
356
 
                > $(MANDIR)/man8/password-prompt.8mandos.gz
357
288
        gzip --best --to-stdout plugins.d/usplash.8mandos \
358
289
                > $(MANDIR)/man8/usplash.8mandos.gz
359
290
        gzip --best --to-stdout plugins.d/splashy.8mandos \
360
291
                > $(MANDIR)/man8/splashy.8mandos.gz
361
292
        gzip --best --to-stdout plugins.d/askpass-fifo.8mandos \
362
293
                > $(MANDIR)/man8/askpass-fifo.8mandos.gz
363
 
        gzip --best --to-stdout plugins.d/plymouth.8mandos \
364
 
                > $(MANDIR)/man8/plymouth.8mandos.gz
365
294
 
366
295
install-client: install-client-nokey
367
296
# Post-installation stuff
373
302
 
374
303
uninstall-server:
375
304
        -rm --force $(PREFIX)/sbin/mandos \
376
 
                $(PREFIX)/sbin/mandos-ctl \
377
 
                $(PREFIX)/sbin/mandos-monitor \
378
305
                $(MANDIR)/man8/mandos.8.gz \
379
 
                $(MANDIR)/man8/mandos-monitor.8.gz \
380
 
                $(MANDIR)/man8/mandos-ctl.8.gz \
381
306
                $(MANDIR)/man5/mandos.conf.5.gz \
382
307
                $(MANDIR)/man5/mandos-clients.conf.5.gz
383
308
        update-rc.d -f mandos remove
395
320
                $(PREFIX)/lib/mandos/plugins.d/usplash \
396
321
                $(PREFIX)/lib/mandos/plugins.d/splashy \
397
322
                $(PREFIX)/lib/mandos/plugins.d/askpass-fifo \
398
 
                $(PREFIX)/lib/mandos/plugins.d/plymouth \
399
323
                $(INITRAMFSTOOLS)/hooks/mandos \
400
324
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos \
401
 
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos \
 
325
                $(INITRAMFSTOOLS)/scripts/local-top/mandos \
 
326
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
402
327
                $(MANDIR)/man8/mandos-keygen.8.gz \
403
 
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
404
 
                $(MANDIR)/man8/mandos-client.8mandos.gz
405
328
                $(MANDIR)/man8/password-prompt.8mandos.gz \
406
329
                $(MANDIR)/man8/usplash.8mandos.gz \
407
330
                $(MANDIR)/man8/splashy.8mandos.gz \
408
331
                $(MANDIR)/man8/askpass-fifo.8mandos.gz \
409
 
                $(MANDIR)/man8/plymouth.8mandos.gz \
 
332
                $(MANDIR)/man8/mandos-client.8mandos.gz
410
333
        -rmdir $(PREFIX)/lib/mandos/plugins.d $(CONFDIR)/plugins.d \
411
334
                 $(PREFIX)/lib/mandos $(CONFDIR) $(KEYDIR)
412
335
        update-initramfs -k all -u
415
338
 
416
339
purge-server: uninstall-server
417
340
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
418
 
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
419
341
                $(DESTDIR)/etc/default/mandos \
420
342
                $(DESTDIR)/etc/init.d/mandos \
421
343
                $(DESTDIR)/var/run/mandos.pid