/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.9
 
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 '######################################################'
356
353
        ./mandos-keygen --dir keydir --force
357
354
 
358
355
# Run the server with a local config
359
 
.PHONY: run-server
360
356
run-server: confdir/mandos.conf confdir/clients.conf statedir
361
357
        ./mandos --debug --no-dbus --configdir=confdir \
362
358
                --statedir=statedir $(SERVERARGS)
373
369
statedir:
374
370
        install --directory statedir
375
371
 
376
 
.PHONY: install
377
372
install: install-server install-client-nokey
378
373
 
379
 
.PHONY: install-html
380
374
install-html: html
381
375
        install --directory $(htmldir)
382
376
        install --mode=u=rw,go=r --target-directory=$(htmldir) \
383
377
                $(htmldocs)
384
378
 
385
 
.PHONY: install-server
386
379
install-server: doc
387
380
        install --directory $(CONFDIR)
388
381
        if install --directory --mode=u=rwx --owner=$(USER) \
396
389
                install --mode=u=rw,go=r tmpfiles.d-mandos.conf \
397
390
                        $(TMPFILES)/mandos.conf; \
398
391
        fi
399
 
        if [ "$(SYSUSERS)" != "$(DESTDIR)" \
400
 
                        -a -d "$(SYSUSERS)" ]; then \
401
 
                install --mode=u=rw,go=r sysusers.d-mandos.conf \
402
 
                        $(SYSUSERS)/mandos.conf; \
403
 
        fi
404
392
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
405
393
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
406
394
                mandos-ctl
435
423
        gzip --best --to-stdout intro.8mandos \
436
424
                > $(MANDIR)/man8/intro.8mandos.gz
437
425
 
438
 
.PHONY: install-client-nokey
439
426
install-client-nokey: all doc
440
427
        install --directory $(LIBDIR)/mandos $(CONFDIR)
441
428
        install --directory --mode=u=rwx $(KEYDIR) \
442
429
                $(LIBDIR)/mandos/plugins.d \
443
430
                $(LIBDIR)/mandos/plugin-helpers
444
 
        if [ "$(SYSUSERS)" != "$(DESTDIR)" \
445
 
                        -a -d "$(SYSUSERS)" ]; then \
446
 
                install --mode=u=rw,go=r sysusers.d-mandos.conf \
447
 
                        $(SYSUSERS)/mandos-client.conf; \
448
 
        fi
449
431
        if [ "$(CONFDIR)" != "$(LIBDIR)/mandos" ]; then \
450
432
                install --mode=u=rwx \
451
433
                        --directory "$(CONFDIR)/plugins.d" \
520
502
        gzip --best --to-stdout dracut-module/password-agent.8mandos \
521
503
                > $(MANDIR)/man8/password-agent.8mandos.gz
522
504
 
523
 
.PHONY: install-client
524
505
install-client: install-client-nokey
525
506
# Post-installation stuff
526
507
        -$(PREFIX)/sbin/mandos-keygen --dir "$(KEYDIR)"
536
517
        fi
537
518
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
538
519
 
539
 
.PHONY: uninstall
540
520
uninstall: uninstall-server uninstall-client
541
521
 
542
 
.PHONY: uninstall-server
543
522
uninstall-server:
544
523
        -rm --force $(PREFIX)/sbin/mandos \
545
524
                $(PREFIX)/sbin/mandos-ctl \
552
531
        update-rc.d -f mandos remove
553
532
        -rmdir $(CONFDIR)
554
533
 
555
 
.PHONY: uninstall-client
556
534
uninstall-client:
557
535
# Refuse to uninstall client if /etc/crypttab is explicitly configured
558
536
# to use it.
594
572
            done; \
595
573
        fi
596
574
 
597
 
.PHONY: purge
598
575
purge: purge-server purge-client
599
576
 
600
 
.PHONY: purge-server
601
577
purge-server: uninstall-server
602
578
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
603
579
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
608
584
                $(DESTDIR)/var/run/mandos.pid
609
585
        -rmdir $(CONFDIR)
610
586
 
611
 
.PHONY: purge-client
612
587
purge-client: uninstall-client
613
588
        -shred --remove $(KEYDIR)/seckey.txt $(KEYDIR)/tls-privkey.pem
614
589
        -rm --force $(CONFDIR)/plugin-runner.conf \