/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.2
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) $(LINK_FORTIFY)
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 --expression='s/\(<a class="citerefentry" href="\)\("><span class="citerefentry"><span class="refentrytitle">\)\([^<]*\)\(<\/span>(\)\([^)]*\)\()<\/span><\/a>\)/\1\3.\5\2\3\4\5\6/g'
74
 
 
75
 
PLUGINS=plugins.d/password-prompt plugins.d/mandos-client \
76
 
        plugins.d/usplash plugins.d/splashy plugins.d/askpass-fifo
77
 
CPROGS=plugin-runner $(PLUGINS)
78
 
PROGS=mandos mandos-keygen $(CPROGS)
79
 
DOCS=mandos.8 plugin-runner.8mandos mandos-keygen.8 \
80
 
        plugins.d/mandos-client.8mandos \
81
 
        plugins.d/password-prompt.8mandos mandos.conf.5 \
82
 
        plugins.d/usplash.8mandos plugins.d/splashy.8mandos \
83
 
        plugins.d/askpass-fifo.8mandos mandos-clients.conf.5
84
 
 
85
 
htmldocs=$(addsuffix .xhtml,$(DOCS))
86
 
 
87
 
objects=$(addsuffix .o,$(CPROGS))
88
 
 
89
 
all: $(PROGS) mandos.lsm
90
 
 
91
 
doc: $(DOCS)
92
 
 
93
 
html: $(htmldocs)
94
 
 
95
 
%.5: %.xml common.ent legalnotice.xml
96
 
        $(DOCBOOKTOMAN)
97
 
%.5.xhtml: %.xml common.ent legalnotice.xml
98
 
        $(DOCBOOKTOHTML)
99
 
 
100
 
%.8: %.xml common.ent legalnotice.xml
101
 
        $(DOCBOOKTOMAN)
102
 
%.8.xhtml: %.xml common.ent legalnotice.xml
103
 
        $(DOCBOOKTOHTML)
104
 
 
105
 
%.8mandos: %.xml common.ent legalnotice.xml
106
 
        $(DOCBOOKTOMAN)
107
 
%.8mandos.xhtml: %.xml common.ent legalnotice.xml
108
 
        $(DOCBOOKTOHTML)
109
 
 
110
 
mandos.8: mandos.xml common.ent mandos-options.xml overview.xml \
111
 
                legalnotice.xml
112
 
        $(DOCBOOKTOMAN)
113
 
mandos.8.xhtml: mandos.xml common.ent mandos-options.xml \
114
 
                overview.xml legalnotice.xml
115
 
        $(DOCBOOKTOHTML)
116
 
 
117
 
mandos-keygen.8: mandos-keygen.xml common.ent overview.xml \
118
 
                legalnotice.xml
119
 
        $(DOCBOOKTOMAN)
120
 
mandos-keygen.8.xhtml: mandos-keygen.xml common.ent overview.xml \
121
 
                 legalnotice.xml
122
 
        $(DOCBOOKTOHTML)
123
 
 
124
 
mandos.conf.5: mandos.conf.xml common.ent mandos-options.xml \
125
 
                legalnotice.xml
126
 
        $(DOCBOOKTOMAN)
127
 
mandos.conf.5.xhtml: mandos.conf.xml common.ent mandos-options.xml \
128
 
                legalnotice.xml
129
 
        $(DOCBOOKTOHTML)
130
 
 
131
 
plugin-runner.8mandos: plugin-runner.xml common.ent overview.xml \
132
 
                legalnotice.xml
133
 
        $(DOCBOOKTOMAN)
134
 
plugin-runner.8mandos.xhtml: plugin-runner.xml common.ent \
135
 
                overview.xml legalnotice.xml
136
 
        $(DOCBOOKTOHTML)
137
 
 
138
 
plugins.d/mandos-client.8mandos: plugins.d/mandos-client.xml \
139
 
                                        common.ent \
140
 
                                        mandos-options.xml \
141
 
                                        overview.xml legalnotice.xml
142
 
        $(DOCBOOKTOMAN)
143
 
plugins.d/mandos-client.8mandos.xhtml: plugins.d/mandos-client.xml \
144
 
                                        common.ent \
145
 
                                        mandos-options.xml \
146
 
                                        overview.xml legalnotice.xml
147
 
        $(DOCBOOKTOHTML)
148
 
 
149
 
# Update all these files with version number $(version)
150
 
common.ent: Makefile
151
 
        $(SED) --in-place --expression='s/^\(<ENTITY VERSION "\)[^"]*">$$/\1$(version)"/' $@
152
 
 
153
 
mandos: Makefile
154
 
        $(SED) --in-place --expression='s/^\(version = "\)[^"]*"$$/\1$(version)"/' $@
155
 
 
156
 
mandos-keygen: Makefile
157
 
        $(SED) --in-place --expression='s/^\(VERSION="\)[^"]*"$$/\1$(version)"/' $@
158
 
 
159
 
mandos.lsm: Makefile
160
 
        $(SED) --in-place --expression='s/^\(Version:\).*/\1\t$(version)/' $@
161
 
        $(SED) --in-place --expression='s/^\(Entered-date:\).*/\1\t$(shell date --rfc-3339=date --reference=Makefile)/' $@
162
 
 
163
 
plugins.d/mandos-client: plugins.d/mandos-client.o
164
 
        $(LINK.o) $(GNUTLS_LIBS) $(AVAHI_LIBS) $(GPGME_LIBS) \
165
 
                $(COMMON) $^ $(LOADLIBES) $(LDLIBS) -o $@
166
 
 
167
 
.PHONY : all doc html clean distclean run-client run-server install \
168
 
        install-server install-client uninstall uninstall-server \
169
 
        uninstall-client purge purge-server purge-client
 
1
CFLAGS="-Wall -std=gnu99"
 
2
LDFLAGS=-lgnutls
 
3
 
 
4
all: plugbasedclient
170
5
 
171
6
clean:
172
 
        -rm --force $(CPROGS) $(objects) $(htmldocs) $(DOCS) core
173
 
 
174
 
distclean: clean
175
 
mostlyclean: clean
176
 
maintainer-clean: clean
177
 
        -rm --force --recursive keydir confdir
178
 
 
179
 
check:  all
180
 
        ./mandos --check
181
 
 
182
 
# Run the client with a local config and key
183
 
run-client: all keydir/seckey.txt keydir/pubkey.txt
184
 
        ./plugin-runner --plugin-dir=plugins.d \
185
 
                --config-file=plugin-runner.conf \
186
 
                --options-for=mandos-client:--seckey=keydir/seckey.txt,--pubkey=keydir/pubkey.txt
187
 
 
188
 
# Used by run-client
189
 
keydir/seckey.txt keydir/pubkey.txt: mandos-keygen
190
 
        install --directory keydir
191
 
        ./mandos-keygen --dir keydir --force
192
 
 
193
 
# Run the server with a local config
194
 
run-server: confdir/mandos.conf confdir/clients.conf
195
 
        ./mandos --debug --configdir=confdir
196
 
 
197
 
# Used by run-server
198
 
confdir/mandos.conf: mandos.conf
199
 
        install --directory confdir
200
 
        install --mode=u=rw,go=r $^ $@
201
 
confdir/clients.conf: clients.conf keydir/seckey.txt
202
 
        install --directory confdir
203
 
        install --mode=u=rw $< $@
204
 
# Add a client password
205
 
        ./mandos-keygen --dir keydir --password >> $@
206
 
 
207
 
install: install-server install-client-nokey
208
 
 
209
 
install-html: $(htmldocs)
210
 
        install --directory $(htmldir)
211
 
        install --mode=u=rw,go=r --target-directory=$(htmldir) \
212
 
                $(htmldocs)
213
 
 
214
 
install-server: doc
215
 
        install --directory $(CONFDIR)
216
 
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
217
 
        install --mode=u=rw,go=r --target-directory=$(CONFDIR) \
218
 
                mandos.conf
219
 
        install --mode=u=rw --target-directory=$(CONFDIR) \
220
 
                clients.conf
221
 
        install --mode=u=rwx,go=rx init.d-mandos \
222
 
                $(DESTDIR)/etc/init.d/mandos
223
 
        install --mode=u=rw,go=r default-mandos \
224
 
                $(DESTDIR)/etc/default/mandos
225
 
        if [ -z $(DESTDIR) ]; then \
226
 
                update-rc.d mandos defaults 25 15;\
227
 
        fi
228
 
        gzip --best --to-stdout mandos.8 \
229
 
                > $(MANDIR)/man8/mandos.8.gz
230
 
        gzip --best --to-stdout mandos.conf.5 \
231
 
                > $(MANDIR)/man5/mandos.conf.5.gz
232
 
        gzip --best --to-stdout mandos-clients.conf.5 \
233
 
                > $(MANDIR)/man5/mandos-clients.conf.5.gz
234
 
 
235
 
install-client-nokey: all doc
236
 
        install --directory $(PREFIX)/lib/mandos $(CONFDIR)
237
 
        install --directory --mode=u=rwx $(KEYDIR) \
238
 
                $(PREFIX)/lib/mandos/plugins.d
239
 
        if [ "$(CONFDIR)" != "$(PREFIX)/lib/mandos" ]; then \
240
 
                install --mode=u=rwx \
241
 
                        --directory "$(CONFDIR)/plugins.d"; \
242
 
        fi
243
 
        install --mode=u=rwx,go=rx \
244
 
                --target-directory=$(PREFIX)/lib/mandos plugin-runner
245
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
246
 
                mandos-keygen
247
 
        install --mode=u=rwx,go=rx \
248
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
249
 
                plugins.d/password-prompt
250
 
        install --mode=u=rwxs,go=rx \
251
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
252
 
                plugins.d/mandos-client
253
 
        install --mode=u=rwxs,go=rx \
254
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
255
 
                plugins.d/usplash
256
 
        install --mode=u=rwxs,go=rx \
257
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
258
 
                plugins.d/splashy
259
 
        install --mode=u=rwxs,go=rx \
260
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
261
 
                plugins.d/askpass-fifo
262
 
        install initramfs-tools-hook \
263
 
                $(INITRAMFSTOOLS)/hooks/mandos
264
 
        install --mode=u=rw,go=r initramfs-tools-hook-conf \
265
 
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos
266
 
        install initramfs-tools-script \
267
 
                $(INITRAMFSTOOLS)/scripts/local-top/mandos
268
 
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
269
 
        gzip --best --to-stdout mandos-keygen.8 \
270
 
                > $(MANDIR)/man8/mandos-keygen.8.gz
271
 
        gzip --best --to-stdout plugin-runner.8mandos \
272
 
                > $(MANDIR)/man8/plugin-runner.8mandos.gz
273
 
        gzip --best --to-stdout plugins.d/password-prompt.8mandos \
274
 
                > $(MANDIR)/man8/password-prompt.8mandos.gz
275
 
        gzip --best --to-stdout plugins.d/mandos-client.8mandos \
276
 
                > $(MANDIR)/man8/mandos-client.8mandos.gz
277
 
        gzip --best --to-stdout plugins.d/usplash.8mandos \
278
 
                > $(MANDIR)/man8/usplash.8mandos.gz
279
 
        gzip --best --to-stdout plugins.d/splashy.8mandos \
280
 
                > $(MANDIR)/man8/splashy.8mandos.gz
281
 
        gzip --best --to-stdout plugins.d/askpass-fifo.8mandos \
282
 
                > $(MANDIR)/man8/askpass-fifo.8mandos.gz
283
 
 
284
 
install-client: install-client-nokey
285
 
# Post-installation stuff
286
 
        -$(PREFIX)/sbin/mandos-keygen --dir "$(KEYDIR)"
287
 
        update-initramfs -k all -u
288
 
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
289
 
 
290
 
uninstall: uninstall-server uninstall-client
291
 
 
292
 
uninstall-server:
293
 
        -rm --force $(PREFIX)/sbin/mandos \
294
 
                $(MANDIR)/man8/mandos.8.gz \
295
 
                $(MANDIR)/man5/mandos.conf.5.gz \
296
 
                $(MANDIR)/man5/mandos-clients.conf.5.gz
297
 
        update-rc.d -f mandos remove
298
 
        -rmdir $(CONFDIR)
299
 
 
300
 
uninstall-client:
301
 
# Refuse to uninstall client if /etc/crypttab is explicitly configured
302
 
# to use it.
303
 
        ! grep --regexp='^ *[^ #].*keyscript=[^,=]*/mandos/' \
304
 
                $(DESTDIR)/etc/crypttab
305
 
        -rm --force $(PREFIX)/sbin/mandos-keygen \
306
 
                $(PREFIX)/lib/mandos/plugin-runner \
307
 
                $(PREFIX)/lib/mandos/plugins.d/password-prompt \
308
 
                $(PREFIX)/lib/mandos/plugins.d/mandos-client \
309
 
                $(PREFIX)/lib/mandos/plugins.d/usplash \
310
 
                $(PREFIX)/lib/mandos/plugins.d/splashy \
311
 
                $(PREFIX)/lib/mandos/plugins.d/askpass-fifo \
312
 
                $(INITRAMFSTOOLS)/hooks/mandos \
313
 
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos \
314
 
                $(INITRAMFSTOOLS)/scripts/local-top/mandos \
315
 
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
316
 
                $(MANDIR)/man8/mandos-keygen.8.gz \
317
 
                $(MANDIR)/man8/password-prompt.8mandos.gz \
318
 
                $(MANDIR)/man8/usplash.8mandos.gz \
319
 
                $(MANDIR)/man8/splashy.8mandos.gz \
320
 
                $(MANDIR)/man8/askpass-fifo.8mandos.gz \
321
 
                $(MANDIR)/man8/mandos-client.8mandos.gz
322
 
        -rmdir $(PREFIX)/lib/mandos/plugins.d $(CONFDIR)/plugins.d \
323
 
                 $(PREFIX)/lib/mandos $(CONFDIR) $(KEYDIR)
324
 
        update-initramfs -k all -u
325
 
 
326
 
purge: purge-server purge-client
327
 
 
328
 
purge-server: uninstall-server
329
 
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
330
 
                $(DESTDIR)/etc/default/mandos \
331
 
                $(DESTDIR)/etc/init.d/mandos \
332
 
                $(DESTDIR)/var/run/mandos.pid
333
 
        -rmdir $(CONFDIR)
334
 
 
335
 
purge-client: uninstall-client
336
 
        -shred --remove $(KEYDIR)/seckey.txt
337
 
        -rm --force $(CONFDIR)/plugin-runner.conf \
338
 
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt
339
 
        -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