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