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