/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 at recompile
  • Date: 2020-12-03 20:30:45 UTC
  • Revision ID: teddy@recompile.se-20201203203045-iqd6nq9y5nwalh1x
Minor fix of a test function

In dracut-module/password-agent, the test function
test_send_password_to_socket_EMSGSIZE() (which tests that the
send_password_to_socket() task function aborts properly when getting
EMSGSIZE when writing to the password socket), part of the test code
is supposed to find a message size which definitely does trigger
EMSGSIZE when send()ing to a socket.  Without a "break" in the proper
place, however, the size given is always exactly 1024 bytes too large.

This is very probably not a problem, since a too large message will
still be too large if it is increased by 1024 bytes, and send(2) in
practice checks the size before reading the buffer.  The biggest issue
would be if some version of send(2) would try to look at the last 1024
bytes of the message buffer before checking the message size; this
would then lead to a buffer over-read when running this test function.
(But even then there would be no security implications since the tests
are not run in the normal operation of the program.)

* dracut-module/password-agent.c
  (test_send_password_to_socket_EMSGSIZE): Break out early when ssret
  < 0 and errno == EMSGSIZE; don't allow loop to increase message_size
  again.

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
44
45
htmldir:=man
45
 
version:=1.8.4
 
46
version:=1.8.13
46
47
SED:=sed
 
48
PKG_CONFIG?=pkg-config
47
49
 
48
50
USER:=$(firstword $(subst :, ,$(shell getent passwd _mandos \
49
51
        || getent passwd nobody || echo 65534)))
50
52
GROUP:=$(firstword $(subst :, ,$(shell getent group _mandos \
51
53
        || getent group nogroup || echo 65534)))
52
54
 
 
55
LINUXVERSION:=$(shell uname --kernel-release)
 
56
 
53
57
## Use these settings for a traditional /usr/local install
54
58
# PREFIX:=$(DESTDIR)/usr/local
55
59
# CONFDIR:=$(DESTDIR)/etc/mandos
56
60
# KEYDIR:=$(DESTDIR)/etc/mandos/keys
57
61
# MANDIR:=$(PREFIX)/man
58
62
# INITRAMFSTOOLS:=$(DESTDIR)/etc/initramfs-tools
 
63
# DRACUTMODULE:=$(DESTDIR)/usr/lib/dracut/modules.d/90mandos
59
64
# STATEDIR:=$(DESTDIR)/var/lib/mandos
60
65
# LIBDIR:=$(PREFIX)/lib
61
66
##
66
71
KEYDIR:=$(DESTDIR)/etc/keys/mandos
67
72
MANDIR:=$(PREFIX)/share/man
68
73
INITRAMFSTOOLS:=$(DESTDIR)/usr/share/initramfs-tools
 
74
DRACUTMODULE:=$(DESTDIR)/usr/lib/dracut/modules.d/90mandos
69
75
STATEDIR:=$(DESTDIR)/var/lib/mandos
70
76
LIBDIR:=$(shell \
71
77
        for d in \
72
 
        "/usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null`" \
 
78
        "/usr/lib/`dpkg-architecture \
 
79
                        -qDEB_HOST_MULTIARCH 2>/dev/null`" \
73
80
        "`rpm --eval='%{_libdir}' 2>/dev/null`" /usr/lib; do \
74
81
                if [ -d "$$d" -a "$$d" = "$${d%/}" ]; then \
75
82
                        echo "$(DESTDIR)$$d"; \
78
85
        done)
79
86
##
80
87
 
81
 
SYSTEMD:=$(DESTDIR)$(shell pkg-config systemd --variable=systemdsystemunitdir)
82
 
TMPFILES:=$(DESTDIR)$(shell pkg-config systemd --variable=tmpfilesdir)
 
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)
83
94
 
84
 
GNUTLS_CFLAGS:=$(shell pkg-config --cflags-only-I gnutls)
85
 
GNUTLS_LIBS:=$(shell pkg-config --libs gnutls)
86
 
AVAHI_CFLAGS:=$(shell pkg-config --cflags-only-I avahi-core)
87
 
AVAHI_LIBS:=$(shell pkg-config --libs avahi-core)
 
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)
88
99
GPGME_CFLAGS:=$(shell gpgme-config --cflags; getconf LFS_CFLAGS)
89
100
GPGME_LIBS:=$(shell gpgme-config --libs; getconf LFS_LIBS; \
90
101
        getconf LFS_LDFLAGS)
91
 
LIBNL3_CFLAGS:=$(shell pkg-config --cflags-only-I libnl-route-3.0)
92
 
LIBNL3_LIBS:=$(shell pkg-config --libs libnl-route-3.0)
 
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)
93
106
 
94
107
# Do not change these two
95
 
CFLAGS+=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) \
96
 
        $(OPTIMIZE) $(LANGUAGE) -DVERSION='"$(version)"'
 
108
CFLAGS+=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) \
 
109
        $(LANGUAGE) $(FEATURES) -DVERSION='"$(version)"'
97
110
LDFLAGS+=-Xlinker --as-needed $(COVERAGE) $(LINK_FORTIFY) $(strip \
98
111
        ) $(foreach flag,$(LINK_FORTIFY_LD),-Xlinker $(flag))
99
112
 
128
141
        plugins.d/usplash plugins.d/splashy plugins.d/askpass-fifo \
129
142
        plugins.d/plymouth
130
143
PLUGIN_HELPERS:=plugin-helpers/mandos-client-iprouteadddel
131
 
CPROGS:=plugin-runner $(PLUGINS) $(PLUGIN_HELPERS)
 
144
CPROGS:=plugin-runner dracut-module/password-agent $(PLUGINS) \
 
145
        $(PLUGIN_HELPERS)
132
146
PROGS:=mandos mandos-keygen mandos-ctl mandos-monitor $(CPROGS)
133
147
DOCS:=mandos.8 mandos-keygen.8 mandos-monitor.8 mandos-ctl.8 \
134
148
        mandos.conf.5 mandos-clients.conf.5 plugin-runner.8mandos \
 
149
        dracut-module/password-agent.8mandos \
135
150
        plugins.d/mandos-client.8mandos \
136
151
        plugins.d/password-prompt.8mandos plugins.d/usplash.8mandos \
137
152
        plugins.d/splashy.8mandos plugins.d/askpass-fifo.8mandos \
141
156
 
142
157
objects:=$(addsuffix .o,$(CPROGS))
143
158
 
 
159
.PHONY: all
144
160
all: $(PROGS) mandos.lsm
145
161
 
 
162
.PHONY: doc
146
163
doc: $(DOCS)
147
164
 
 
165
.PHONY: html
148
166
html: $(htmldocs)
149
167
 
150
168
%.5: %.xml common.ent legalnotice.xml
209
227
                overview.xml legalnotice.xml
210
228
        $(DOCBOOKTOHTML)
211
229
 
 
230
dracut-module/password-agent.8mandos: \
 
231
                dracut-module/password-agent.xml common.ent \
 
232
                overview.xml legalnotice.xml
 
233
        $(DOCBOOKTOMAN)
 
234
dracut-module/password-agent.8mandos.xhtml: \
 
235
                dracut-module/password-agent.xml common.ent \
 
236
                overview.xml legalnotice.xml
 
237
        $(DOCBOOKTOHTML)
 
238
 
212
239
plugins.d/mandos-client.8mandos: plugins.d/mandos-client.xml \
213
240
                                        common.ent \
214
241
                                        mandos-options.xml \
258
285
                $@)
259
286
 
260
287
# Need to add the GnuTLS, Avahi and GPGME libraries
261
 
plugins.d/mandos-client: plugins.d/mandos-client.c
262
 
        $(LINK.c) $^ $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(strip\
263
 
                ) $(GPGME_CFLAGS) $(GNUTLS_LIBS) $(strip\
264
 
                ) $(AVAHI_LIBS) $(GPGME_LIBS) $(LOADLIBES) $(strip\
265
 
                ) $(LDLIBS) -o $@
 
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)
266
292
 
267
293
# Need to add the libnl-route library
268
 
plugin-helpers/mandos-client-iprouteadddel: plugin-helpers/mandos-client-iprouteadddel.c
269
 
        $(LINK.c) $(LIBNL3_CFLAGS) $^ $(LIBNL3_LIBS) $(strip\
270
 
                ) $(LOADLIBES) $(LDLIBS) -o $@
271
 
 
272
 
.PHONY : all doc html clean distclean mostlyclean maintainer-clean \
273
 
        check run-client run-server install install-html \
274
 
        install-server install-client-nokey install-client uninstall \
275
 
        uninstall-server uninstall-client purge purge-server \
276
 
        purge-client
277
 
 
 
294
plugin-helpers/mandos-client-iprouteadddel: CFLAGS += $(LIBNL3_CFLAGS)
 
295
plugin-helpers/mandos-client-iprouteadddel: LDLIBS += $(LIBNL3_LIBS)
 
296
 
 
297
# 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
278
302
clean:
279
303
        -rm --force $(CPROGS) $(objects) $(htmldocs) $(DOCS) core
280
304
 
 
305
.PHONY: distclean
281
306
distclean: clean
 
307
.PHONY: mostlyclean
282
308
mostlyclean: clean
 
309
.PHONY: maintainer-clean
283
310
maintainer-clean: clean
284
311
        -rm --force --recursive keydir confdir statedir
285
312
 
 
313
.PHONY: check
286
314
check: all
287
315
        ./mandos --check
288
316
        ./mandos-ctl --check
289
317
        ./mandos-keygen --version
290
318
        ./plugin-runner --version
291
319
        ./plugin-helpers/mandos-client-iprouteadddel --version
 
320
        ./dracut-module/password-agent --test
292
321
 
293
322
# Run the client with a local config and key
294
 
run-client: all keydir/seckey.txt keydir/pubkey.txt keydir/tls-privkey.pem keydir/tls-pubkey.pem
295
 
        @echo "###################################################################"
296
 
        @echo "# The following error messages are harmless and can be safely     #"
297
 
        @echo "# ignored:                                                        #"
298
 
        @echo "# From plugin-runner: setgid: Operation not permitted             #"
299
 
        @echo "#                     setuid: Operation not permitted             #"
300
 
        @echo "# From askpass-fifo:  mkfifo: Permission denied                   #"
301
 
        @echo "# From mandos-client:                                             #"
302
 
        @echo "#             Failed to raise privileges: Operation not permitted #"
303
 
        @echo "#             Warning: network hook \"*\" exited with status *      #"
304
 
        @echo "#                                                                 #"
305
 
        @echo "# (The messages are caused by not running as root, but you should #"
306
 
        @echo "# NOT run \"make run-client\" as root unless you also unpacked and  #"
307
 
        @echo "# compiled Mandos as root, which is also NOT recommended.)        #"
308
 
        @echo "###################################################################"
 
323
.PHONY: run-client
 
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 '######################################################'
309
345
# We set GNOME_KEYRING_CONTROL to block pam_gnome_keyring
310
346
        ./plugin-runner --plugin-dir=plugins.d \
311
347
                --plugin-helper-dir=plugin-helpers \
318
354
keydir/seckey.txt keydir/pubkey.txt keydir/tls-privkey.pem keydir/tls-pubkey.pem: mandos-keygen
319
355
        install --directory keydir
320
356
        ./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
321
363
 
322
364
# Run the server with a local config
 
365
.PHONY: run-server
323
366
run-server: confdir/mandos.conf confdir/clients.conf statedir
324
367
        ./mandos --debug --no-dbus --configdir=confdir \
325
368
                --statedir=statedir $(SERVERARGS)
336
379
statedir:
337
380
        install --directory statedir
338
381
 
 
382
.PHONY: install
339
383
install: install-server install-client-nokey
340
384
 
 
385
.PHONY: install-html
341
386
install-html: html
342
387
        install --directory $(htmldir)
343
388
        install --mode=u=rw,go=r --target-directory=$(htmldir) \
344
389
                $(htmldocs)
345
390
 
 
391
.PHONY: install-server
346
392
install-server: doc
347
393
        install --directory $(CONFDIR)
348
394
        if install --directory --mode=u=rwx --owner=$(USER) \
351
397
        elif install --directory --mode=u=rwx $(STATEDIR); then \
352
398
                chown -- $(USER):$(GROUP) $(STATEDIR) || :; \
353
399
        fi
354
 
        if [ "$(TMPFILES)" != "$(DESTDIR)" -a -d "$(TMPFILES)" ]; then \
 
400
        if [ "$(TMPFILES)" != "$(DESTDIR)" \
 
401
                        -a -d "$(TMPFILES)" ]; then \
355
402
                install --mode=u=rw,go=r tmpfiles.d-mandos.conf \
356
403
                        $(TMPFILES)/mandos.conf; \
357
404
        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
358
410
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
359
411
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
360
412
                mandos-ctl
389
441
        gzip --best --to-stdout intro.8mandos \
390
442
                > $(MANDIR)/man8/intro.8mandos.gz
391
443
 
 
444
.PHONY: install-client-nokey
392
445
install-client-nokey: all doc
393
446
        install --directory $(LIBDIR)/mandos $(CONFDIR)
394
447
        install --directory --mode=u=rwx $(KEYDIR) \
395
448
                $(LIBDIR)/mandos/plugins.d \
396
449
                $(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
397
455
        if [ "$(CONFDIR)" != "$(LIBDIR)/mandos" ]; then \
398
456
                install --mode=u=rwx \
399
457
                        --directory "$(CONFDIR)/plugins.d" \
404
462
        install --mode=u=rwx,go=rx \
405
463
                --target-directory=$(LIBDIR)/mandos plugin-runner
406
464
        install --mode=u=rwx,go=rx \
407
 
                --target-directory=$(LIBDIR)/mandos mandos-to-cryptroot-unlock
 
465
                --target-directory=$(LIBDIR)/mandos \
 
466
                mandos-to-cryptroot-unlock
408
467
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
409
468
                mandos-keygen
410
469
        install --mode=u=rwx,go=rx \
438
497
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos
439
498
        install initramfs-tools-script-stop \
440
499
                $(INITRAMFSTOOLS)/scripts/local-premount/mandos
 
500
        install --directory $(DRACUTMODULE)
 
501
        install --mode=u=rw,go=r --target-directory=$(DRACUTMODULE) \
 
502
                dracut-module/ask-password-mandos.path \
 
503
                dracut-module/ask-password-mandos.service
 
504
        install --mode=u=rwxs,go=rx \
 
505
                --target-directory=$(DRACUTMODULE) \
 
506
                dracut-module/module-setup.sh \
 
507
                dracut-module/cmdline-mandos.sh \
 
508
                dracut-module/password-agent
441
509
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
442
510
        gzip --best --to-stdout mandos-keygen.8 \
443
511
                > $(MANDIR)/man8/mandos-keygen.8.gz
455
523
                > $(MANDIR)/man8/askpass-fifo.8mandos.gz
456
524
        gzip --best --to-stdout plugins.d/plymouth.8mandos \
457
525
                > $(MANDIR)/man8/plymouth.8mandos.gz
 
526
        gzip --best --to-stdout dracut-module/password-agent.8mandos \
 
527
                > $(MANDIR)/man8/password-agent.8mandos.gz
458
528
 
 
529
.PHONY: install-client
459
530
install-client: install-client-nokey
460
531
# Post-installation stuff
461
532
        -$(PREFIX)/sbin/mandos-keygen --dir "$(KEYDIR)"
462
 
        update-initramfs -k all -u
 
533
        if command -v update-initramfs >/dev/null; then \
 
534
            update-initramfs -k all -u; \
 
535
        elif command -v dracut >/dev/null; then \
 
536
            for initrd in $(DESTDIR)/boot/initr*-$(LINUXVERSION); do \
 
537
                if [ -w "$$initrd" ]; then \
 
538
                    chmod go-r "$$initrd"; \
 
539
                    dracut --force "$$initrd"; \
 
540
                fi; \
 
541
            done; \
 
542
        fi
463
543
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
464
544
 
 
545
.PHONY: uninstall
465
546
uninstall: uninstall-server uninstall-client
466
547
 
 
548
.PHONY: uninstall-server
467
549
uninstall-server:
468
550
        -rm --force $(PREFIX)/sbin/mandos \
469
551
                $(PREFIX)/sbin/mandos-ctl \
476
558
        update-rc.d -f mandos remove
477
559
        -rmdir $(CONFDIR)
478
560
 
 
561
.PHONY: uninstall-client
479
562
uninstall-client:
480
563
# Refuse to uninstall client if /etc/crypttab is explicitly configured
481
564
# to use it.
492
575
                $(INITRAMFSTOOLS)/hooks/mandos \
493
576
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos \
494
577
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos \
 
578
                $(INITRAMFSTOOLS)/scripts/local-premount/mandos \
 
579
                $(DRACUTMODULE)/ask-password-mandos.path \
 
580
                $(DRACUTMODULE)/ask-password-mandos.service \
 
581
                $(DRACUTMODULE)/module-setup.sh \
 
582
                $(DRACUTMODULE)/cmdline-mandos.sh \
 
583
                $(DRACUTMODULE)/password-agent \
495
584
                $(MANDIR)/man8/mandos-keygen.8.gz \
496
585
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
497
586
                $(MANDIR)/man8/mandos-client.8mandos.gz
500
589
                $(MANDIR)/man8/splashy.8mandos.gz \
501
590
                $(MANDIR)/man8/askpass-fifo.8mandos.gz \
502
591
                $(MANDIR)/man8/plymouth.8mandos.gz \
 
592
                $(MANDIR)/man8/password-agent.8mandos.gz \
503
593
        -rmdir $(LIBDIR)/mandos/plugins.d $(CONFDIR)/plugins.d \
504
 
                 $(LIBDIR)/mandos $(CONFDIR) $(KEYDIR)
505
 
        update-initramfs -k all -u
 
594
                 $(LIBDIR)/mandos $(CONFDIR) $(KEYDIR) $(DRACUTMODULE)
 
595
        if command -v update-initramfs >/dev/null; then \
 
596
            update-initramfs -k all -u; \
 
597
        elif command -v dracut >/dev/null; then \
 
598
            for initrd in $(DESTDIR)/boot/initr*-$(LINUXVERSION); do \
 
599
                test -w "$$initrd" && dracut --force "$$initrd"; \
 
600
            done; \
 
601
        fi
506
602
 
 
603
.PHONY: purge
507
604
purge: purge-server purge-client
508
605
 
 
606
.PHONY: purge-server
509
607
purge-server: uninstall-server
510
608
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
511
609
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
516
614
                $(DESTDIR)/var/run/mandos.pid
517
615
        -rmdir $(CONFDIR)
518
616
 
 
617
.PHONY: purge-client
519
618
purge-client: uninstall-client
520
619
        -shred --remove $(KEYDIR)/seckey.txt $(KEYDIR)/tls-privkey.pem
521
620
        -rm --force $(CONFDIR)/plugin-runner.conf \