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