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