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