/mandos/release

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/release

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