/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: Teddy Hogeborn
  • Date: 2008-08-02 10:48:24 UTC
  • Revision ID: teddy@fukt.bsnet.se-20080802104824-fx0miwp9o4g9r31e
* plugbasedclient.c (struct process): New fields "eof", "completed",
                                      and "status".
  (handle_sigchld): New function.
  (main): Initialize "dir" to NULL to only closedir() it if necessary.
          Move "process_list" to be a global variable to be accessible
          by "handle_sigchld".  Make "handle_sigchld" handle SIGCHLD.
          Remove redundant check for NULL "dir".  Free "filename" when
          no longer used.  Block SIGCHLD around fork()/exec().
          Restore normal signals in child.  Only loop while running
          processes exist.  Print process buffer when the process is
          done and it has emitted EOF, not when it only emits EOF.
          Remove processes from list which exit non-cleanly.  In
          cleaning up, closedir() if necessary.  Bug fix: set next
          pointer correctly when freeing process list.

* plugins.d/passprompt.c (main): Do not ignore SIGQUIT.

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