/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: Björn Påhlsson
  • Date: 2008-07-20 02:52:20 UTC
  • Revision ID: belorn@braxen-20080720025220-r5u0388uy9iu23h6
Added following support:
Pluginbased client handler
rewritten Mandos client
       Avahi instead of udp server discovery
       openpgp encrypted key support
Passprompt stand alone application for direct console input
Added logging for Mandos server

Show diffs side-by-side

added added

removed removed

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