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