/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: 2019-08-02 22:16:53 UTC
  • Revision ID: teddy@recompile.se-20190802221653-ic1iko9hbefzwsk7
Fix bug in server Debian package: Fails to start on first install

There has been a very long-standing bug where installation of the
server (the "mandos" Debian package) would fail to start the server
properly right after installation.  It would work on manual (re)start
after installation, or after reboot, and even after package purge and
reinstall, it would then work the first time.  The problem, it turns
out, is when the new "_mandos" user (and corresponding group) is
created, the D-Bus server is not reloaded, and is therefore not aware
of that user, and does not recognize the user and group name in the
/etc/dbus-1/system.d/mandos.conf file.  The Mandos server, when it
tries to start and access the D-Bus, is then not permitted to connect
to its D-Bus bus name, and disables D-Bus use as a fallback measure;
i.e. the server works, but it is not controllable via D-Bus commands
(via mandos-ctl or mandos-monitor).  The next time the D-Bus daemon is
reloaded for any reason, the new user & group would become visible to
the D-Bus daemon and after that, any restart of the Mandos server
would succeed and it would bind to its D-Bus name properly, and
thereby be visible and controllable by mandos-ctl & mandos-monitor.
This was mostly invisible when using sysvinit, but systemd makes the
problem visible since the systemd service file for the Mandos server
is configured to not consider the Mandos server "started" until the
D-Bus name has been bound; this makes the starting of the service wait
for 90 seconds and then fail with a timeout error.

Fixing this should also make the Debian CI autopkgtest tests work.

* debian/mandos.postinst (configure): After creating (or renaming)
                                      user & group, reload D-Bus
                                      daemon (if present).

Show diffs side-by-side

added added

removed removed

Lines of Context:
41
41
#COVERAGE=--coverage
42
42
OPTIMIZE:=-Os -fno-strict-aliasing
43
43
LANGUAGE:=-std=gnu11
44
 
FEATURES:=-D_FILE_OFFSET_BITS=64
45
44
htmldir:=man
46
 
version:=1.8.14
 
45
version:=1.8.5
47
46
SED:=sed
48
47
PKG_CONFIG?=pkg-config
49
48
 
89
88
                        --variable=systemdsystemunitdir)
90
89
TMPFILES:=$(DESTDIR)$(shell $(PKG_CONFIG) systemd \
91
90
                        --variable=tmpfilesdir)
92
 
SYSUSERS:=$(DESTDIR)$(shell $(PKG_CONFIG) systemd \
93
 
                        --variable=sysusersdir)
94
91
 
95
92
GNUTLS_CFLAGS:=$(shell $(PKG_CONFIG) --cflags-only-I gnutls)
96
93
GNUTLS_LIBS:=$(shell $(PKG_CONFIG) --libs gnutls)
105
102
GLIB_LIBS:=$(shell $(PKG_CONFIG) --libs glib-2.0)
106
103
 
107
104
# Do not change these two
108
 
CFLAGS+=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) \
109
 
        $(LANGUAGE) $(FEATURES) -DVERSION='"$(version)"'
 
105
CFLAGS+=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) \
 
106
        $(OPTIMIZE) $(LANGUAGE) -DVERSION='"$(version)"'
110
107
LDFLAGS+=-Xlinker --as-needed $(COVERAGE) $(LINK_FORTIFY) $(strip \
111
108
        ) $(foreach flag,$(LINK_FORTIFY_LD),-Xlinker $(flag))
112
109
 
156
153
 
157
154
objects:=$(addsuffix .o,$(CPROGS))
158
155
 
159
 
.PHONY: all
160
156
all: $(PROGS) mandos.lsm
161
157
 
162
 
.PHONY: doc
163
158
doc: $(DOCS)
164
159
 
165
 
.PHONY: html
166
160
html: $(htmldocs)
167
161
 
168
162
%.5: %.xml common.ent legalnotice.xml
285
279
                $@)
286
280
 
287
281
# 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)
 
282
plugins.d/mandos-client: plugins.d/mandos-client.c
 
283
        $(LINK.c) $^ $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(strip\
 
284
                ) $(GPGME_CFLAGS) $(GNUTLS_LIBS) $(strip\
 
285
                ) $(AVAHI_LIBS) $(GPGME_LIBS) $(LOADLIBES) $(strip\
 
286
                ) $(LDLIBS) -o $@
292
287
 
293
288
# 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)
 
289
plugin-helpers/mandos-client-iprouteadddel: plugin-helpers/mandos-client-iprouteadddel.c
 
290
        $(LINK.c) $(LIBNL3_CFLAGS) $^ $(LIBNL3_LIBS) $(strip\
 
291
                ) $(LOADLIBES) $(LDLIBS) -o $@
296
292
 
297
293
# Need to add the GLib and pthread libraries
298
 
dracut-module/password-agent: CFLAGS += $(GLIB_CFLAGS)
299
 
dracut-module/password-agent: LDLIBS += $(GLIB_LIBS) -lpthread
300
 
 
301
 
.PHONY: clean
 
294
dracut-module/password-agent: dracut-module/password-agent.c
 
295
        $(LINK.c) $(GLIB_CFLAGS) $^ $(GLIB_LIBS) -lpthread $(strip\
 
296
                ) $(LOADLIBES) $(LDLIBS) -o $@
 
297
 
 
298
.PHONY : all doc html clean distclean mostlyclean maintainer-clean \
 
299
        check run-client run-server install install-html \
 
300
        install-server install-client-nokey install-client uninstall \
 
301
        uninstall-server uninstall-client purge purge-server \
 
302
        purge-client
 
303
 
302
304
clean:
303
305
        -rm --force $(CPROGS) $(objects) $(htmldocs) $(DOCS) core
304
306
 
305
 
.PHONY: distclean
306
307
distclean: clean
307
 
.PHONY: mostlyclean
308
308
mostlyclean: clean
309
 
.PHONY: maintainer-clean
310
309
maintainer-clean: clean
311
310
        -rm --force --recursive keydir confdir statedir
312
311
 
313
 
.PHONY: check
314
312
check: all
315
313
        ./mandos --check
316
314
        ./mandos-ctl --check
320
318
        ./dracut-module/password-agent --test
321
319
 
322
320
# Run the client with a local config and key
323
 
.PHONY: run-client
324
321
run-client: all keydir/seckey.txt keydir/pubkey.txt \
325
322
                        keydir/tls-privkey.pem keydir/tls-pubkey.pem
326
323
        @echo '######################################################'
354
351
keydir/seckey.txt keydir/pubkey.txt keydir/tls-privkey.pem keydir/tls-pubkey.pem: mandos-keygen
355
352
        install --directory keydir
356
353
        ./mandos-keygen --dir keydir --force
357
 
        if ! [ -e keydir/tls-privkey.pem ]; then \
358
 
                install --mode=u=rw /dev/null keydir/tls-privkey.pem; \
359
 
        fi
360
 
        if ! [ -e keydir/tls-pubkey.pem ]; then \
361
 
                install --mode=u=rw /dev/null keydir/tls-pubkey.pem; \
362
 
        fi
363
354
 
364
355
# Run the server with a local config
365
 
.PHONY: run-server
366
356
run-server: confdir/mandos.conf confdir/clients.conf statedir
367
357
        ./mandos --debug --no-dbus --configdir=confdir \
368
358
                --statedir=statedir $(SERVERARGS)
379
369
statedir:
380
370
        install --directory statedir
381
371
 
382
 
.PHONY: install
383
372
install: install-server install-client-nokey
384
373
 
385
 
.PHONY: install-html
386
374
install-html: html
387
375
        install --directory $(htmldir)
388
376
        install --mode=u=rw,go=r --target-directory=$(htmldir) \
389
377
                $(htmldocs)
390
378
 
391
 
.PHONY: install-server
392
379
install-server: doc
393
380
        install --directory $(CONFDIR)
394
381
        if install --directory --mode=u=rwx --owner=$(USER) \
402
389
                install --mode=u=rw,go=r tmpfiles.d-mandos.conf \
403
390
                        $(TMPFILES)/mandos.conf; \
404
391
        fi
405
 
        if [ "$(SYSUSERS)" != "$(DESTDIR)" \
406
 
                        -a -d "$(SYSUSERS)" ]; then \
407
 
                install --mode=u=rw,go=r sysusers.d-mandos.conf \
408
 
                        $(SYSUSERS)/mandos.conf; \
409
 
        fi
410
392
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
411
393
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
412
394
                mandos-ctl
441
423
        gzip --best --to-stdout intro.8mandos \
442
424
                > $(MANDIR)/man8/intro.8mandos.gz
443
425
 
444
 
.PHONY: install-client-nokey
445
426
install-client-nokey: all doc
446
427
        install --directory $(LIBDIR)/mandos $(CONFDIR)
447
428
        install --directory --mode=u=rwx $(KEYDIR) \
448
429
                $(LIBDIR)/mandos/plugins.d \
449
430
                $(LIBDIR)/mandos/plugin-helpers
450
 
        if [ "$(SYSUSERS)" != "$(DESTDIR)" \
451
 
                        -a -d "$(SYSUSERS)" ]; then \
452
 
                install --mode=u=rw,go=r sysusers.d-mandos.conf \
453
 
                        $(SYSUSERS)/mandos-client.conf; \
454
 
        fi
455
431
        if [ "$(CONFDIR)" != "$(LIBDIR)/mandos" ]; then \
456
432
                install --mode=u=rwx \
457
433
                        --directory "$(CONFDIR)/plugins.d" \
526
502
        gzip --best --to-stdout dracut-module/password-agent.8mandos \
527
503
                > $(MANDIR)/man8/password-agent.8mandos.gz
528
504
 
529
 
.PHONY: install-client
530
505
install-client: install-client-nokey
531
506
# Post-installation stuff
532
507
        -$(PREFIX)/sbin/mandos-keygen --dir "$(KEYDIR)"
542
517
        fi
543
518
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
544
519
 
545
 
.PHONY: uninstall
546
520
uninstall: uninstall-server uninstall-client
547
521
 
548
 
.PHONY: uninstall-server
549
522
uninstall-server:
550
523
        -rm --force $(PREFIX)/sbin/mandos \
551
524
                $(PREFIX)/sbin/mandos-ctl \
558
531
        update-rc.d -f mandos remove
559
532
        -rmdir $(CONFDIR)
560
533
 
561
 
.PHONY: uninstall-client
562
534
uninstall-client:
563
535
# Refuse to uninstall client if /etc/crypttab is explicitly configured
564
536
# to use it.
600
572
            done; \
601
573
        fi
602
574
 
603
 
.PHONY: purge
604
575
purge: purge-server purge-client
605
576
 
606
 
.PHONY: purge-server
607
577
purge-server: uninstall-server
608
578
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
609
579
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
614
584
                $(DESTDIR)/var/run/mandos.pid
615
585
        -rmdir $(CONFDIR)
616
586
 
617
 
.PHONY: purge-client
618
587
purge-client: uninstall-client
619
588
        -shred --remove $(KEYDIR)/seckey.txt $(KEYDIR)/tls-privkey.pem
620
589
        -rm --force $(CONFDIR)/plugin-runner.conf \