/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-29 05:53:59 UTC
  • Revision ID: teddy@fukt.bsnet.se-20080829055359-wkdasnyxtylmnxus
* mandos.xml (EXAMPLE): Replaced all occurences of command name with
                        "&COMMANDNAME;".

* plugins.d/password-prompt.c (main): Improved some documentation
                                      strings.  Do perror() of
                                      tcgetattr() fails.  Add debug
                                      output if interrupted by signal.
                                      Loop over write() instead of
                                      using fwrite() when outputting
                                      password.  Add debug output if
                                      getline() returns 0, unless it
                                      was caused by a signal.  Add
                                      exit status code to debug
                                      output.

* plugins.d/password-prompt.xml: Changed all single quotes to double
                                 quotes for consistency.  Removed
                                 <?xml-stylesheet>.
  (ENTITY TIMESTAMP): New.  Automatically updated by Emacs time-stamp
                      by using Emacs local variables.
  (/refentry/refentryinfo/title): Changed to "Mandos Manual".
  (/refentry/refentryinfo/productname): Changed to "Mandos".
  (/refentry/refentryinfo/date): New; set to "&TIMESTAMP;".
  (/refentry/refentryinfo/copyright): Split copyright holders.
  (/refentry/refnamediv/refpurpose): Improved wording.
  (SYNOPSIS): Fix to use correct markup.  Add short options.
  (DESCRIPTION, OPTIONS): Improved wording.
  (OPTIONS): Improved wording.  Use more correct markup.  Document
             short options.
  (EXIT STATUS): Add text.
  (ENVIRONMENT): Document use of "cryptsource" and "crypttarget".
  (FILES): REMOVED.
  (BUGS): Add text.
  (EXAMPLE): Added some examples.
  (SECURITY): Added text.
  (SEE ALSO): Remove reference to mandos(8).  Add reference to
              crypttab(5).

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
        -Wunsafe-loop-optimizations -Wpointer-arith \
5
5
        -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings \
6
6
        -Wconversion -Wstrict-prototypes -Wold-style-definition \
7
 
        -Wpacked -Wnested-externs -Winline -Wvolatile-register-var
8
 
#       -Wunreachable-code 
9
 
#DEBUG=-ggdb3
 
7
        -Wpacked -Wnested-externs -Wunreachable-code -Winline \
 
8
        -Wvolatile-register-var
 
9
DEBUG=-ggdb3
10
10
# For info about _FORTIFY_SOURCE, see
11
11
# <http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html>
12
 
FORTIFY=-D_FORTIFY_SOURCE=2 -fstack-protector-all
 
12
FORTIFY=-D_FORTIFY_SOURCE=2 # -fstack-protector-all
13
13
#COVERAGE=--coverage
14
14
OPTIMIZE=-Os
15
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
 
16
# PREFIX=/usr/local
29
17
PREFIX=$(DESTDIR)/usr
 
18
# CONFDIR=/usr/local/lib/mandos
30
19
CONFDIR=$(DESTDIR)/etc/mandos
31
 
KEYDIR=$(DESTDIR)/etc/keys/mandos
32
 
MANDIR=$(PREFIX)/share/man
33
 
INITRAMFSTOOLS=$(DESTDIR)/usr/share/initramfs-tools
34
 
##
 
20
# MANDIR=/usr/local/man
 
21
MANDIR=$(DESTDIR)/usr/share/man
35
22
 
36
23
GNUTLS_CFLAGS=$(shell libgnutls-config --cflags)
37
24
GNUTLS_LIBS=$(shell libgnutls-config --libs)
42
29
 
43
30
# Do not change these two
44
31
CFLAGS=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) \
45
 
        $(LANGUAGE) $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(GPGME_CFLAGS) \
46
 
        -DVERSION='"$(version)"'
 
32
        $(LANGUAGE) $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(GPGME_CFLAGS)
47
33
LDFLAGS=$(COVERAGE)
48
34
 
49
 
# Commands to format a DocBook <refentry> document into a manual page
 
35
# Commands to format a DocBook refentry document into a manual page
50
36
DOCBOOKTOMAN=cd $(dir $<); xsltproc --nonet --xinclude \
51
37
        --param man.charmap.use.subset          0 \
52
38
        --param make.year.ranges                1 \
56
42
         /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
57
43
        $(notdir $<); \
58
44
        $(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)
 
45
# DocBook-to-man post-processing to fix a \n escape bug
 
46
MANPOST=sed --in-place --expression='s,\\\\en,\\en,g;s,\\n,\\en,g'
 
47
 
 
48
PLUGINS=plugins.d/password-prompt plugins.d/password-request
 
49
PROGS=plugin-runner $(PLUGINS)
78
50
DOCS=mandos.8 plugin-runner.8mandos mandos-keygen.8 \
79
 
        plugins.d/mandos-client.8mandos \
 
51
        plugins.d/password-request.8mandos \
80
52
        plugins.d/password-prompt.8mandos mandos.conf.5 \
81
53
        mandos-clients.conf.5
82
54
 
83
 
htmldocs=$(addsuffix .xhtml,$(DOCS))
84
 
 
85
 
objects=$(addsuffix .o,$(CPROGS))
 
55
objects=$(addsuffix .o,$(PROGS))
86
56
 
87
57
all: $(PROGS)
88
58
 
89
59
doc: $(DOCS)
90
60
 
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
 
61
%.5: %.xml
 
62
        $(DOCBOOKTOMAN)
 
63
 
 
64
%.8: %.xml
 
65
        $(DOCBOOKTOMAN)
 
66
 
 
67
%.8mandos: %.xml
 
68
        $(DOCBOOKTOMAN)
 
69
 
 
70
mandos.8: mandos.xml mandos-options.xml
 
71
        $(DOCBOOKTOMAN)
 
72
 
 
73
mandos.conf.5: mandos.conf.xml mandos-options.xml
 
74
        $(DOCBOOKTOMAN)
 
75
 
 
76
plugins.d/password-request: plugins.d/password-request.o
158
77
        $(LINK.o) $(GNUTLS_LIBS) $(AVAHI_LIBS) $(GPGME_LIBS) \
159
78
                $(COMMON) $^ $(LOADLIBES) $(LDLIBS) -o $@
160
79
 
161
 
.PHONY : all doc html clean distclean run-client run-server install \
 
80
.PHONY : all doc clean distclean run-client run-server install \
162
81
        install-server install-client uninstall uninstall-server \
163
82
        uninstall-client purge purge-server purge-client
164
83
 
165
84
clean:
166
 
        -rm --force $(CPROGS) $(objects) $(htmldocs) $(DOCS) core
 
85
        -rm --force $(PROGS) $(objects) $(DOCS) core
167
86
 
168
87
distclean: clean
169
88
mostlyclean: clean
170
89
maintainer-clean: clean
171
90
        -rm --force --recursive keydir confdir
172
91
 
173
 
check:  all
 
92
check:
174
93
        ./mandos --check
175
94
 
176
 
# Run the client with a local config and key
177
 
run-client: all keydir/seckey.txt keydir/pubkey.txt
 
95
# Run the server with a local key
 
96
run-client: all keydir/seckey.txt keydir/pubkey.txt \
 
97
        keydir/secring.gpg keydir/pubring.gpg
178
98
        ./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
 
99
                --options-for=password-request:--keydir=keydir
181
100
 
182
101
# Used by run-client
 
102
keydir/secring.gpg: keydir/seckey.txt
 
103
        gpg --homedir $(dir $<) --import $^
 
104
keydir/pubring.gpg: keydir/pubkey.txt
 
105
        gpg --homedir $(dir $<) --import $^
183
106
keydir/seckey.txt keydir/pubkey.txt: mandos-keygen
184
107
        install --directory keydir
185
108
        ./mandos-keygen --dir keydir --force
191
114
# Used by run-server
192
115
confdir/mandos.conf: mandos.conf
193
116
        install --directory confdir
194
 
        install --mode=u=rw,go=r $^ $@
 
117
        install $^ $@
195
118
confdir/clients.conf: clients.conf keydir/seckey.txt
196
119
        install --directory confdir
197
 
        install --mode=u=rw $< $@
 
120
        install clients.conf $@
198
121
# Add a client password
199
122
        ./mandos-keygen --dir keydir --password >> $@
200
123
 
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)
 
124
install: install-server install-client
207
125
 
208
126
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) \
 
127
        install --directory --parents $(CONFDIR) $(MANDIR)/man5 \
 
128
                $(MANDIR)/man8
 
129
        install --mode=0755 mandos $(PREFIX)/sbin/mandos
 
130
        install --mode=0644 --target-directory=$(CONFDIR) mandos.conf
 
131
        install --mode=0640 --target-directory=$(CONFDIR) \
214
132
                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
133
        gzip --best --to-stdout mandos.8 \
223
134
                > $(MANDIR)/man8/mandos.8.gz
224
135
        gzip --best --to-stdout mandos.conf.5 \
226
137
        gzip --best --to-stdout mandos-clients.conf.5 \
227
138
                > $(MANDIR)/man5/mandos-clients.conf.5.gz
228
139
 
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 \
 
140
install-client: all doc /usr/share/initramfs-tools/hooks/.
 
141
        install --directory --parents $(PREFIX)/lib/mandos \
 
142
                $(CONFDIR) $(MANDIR)/man8
 
143
        install --directory --mode=0700 $(PREFIX)/lib/mandos/plugins.d
 
144
        chmod u=rwx,g=,o= $(PREFIX)/lib/mandos/plugins.d
 
145
        install --mode=0755 --target-directory=$(PREFIX)/lib/mandos \
 
146
                plugin-runner
 
147
        install --mode=0755 --target-directory=$(PREFIX)/sbin \
240
148
                mandos-keygen
241
 
        install --mode=u=rwx,go=rx \
 
149
        install --mode=0755 \
242
150
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
243
151
                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
 
152
        install --mode=4755 \
 
153
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
154
                plugins.d/password-request
256
155
        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
 
156
                /usr/share/initramfs-tools/hooks/mandos
 
157
        install initramfs-tools-hook-conf \
 
158
                /usr/share/initramfs-tools/conf-hooks.d/mandos
260
159
        install initramfs-tools-script \
261
 
                $(INITRAMFSTOOLS)/scripts/local-top/mandos
262
 
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
 
160
                /usr/share/initramfs-tools/scripts/local-top/mandos
263
161
        gzip --best --to-stdout mandos-keygen.8 \
264
162
                > $(MANDIR)/man8/mandos-keygen.8.gz
265
163
        gzip --best --to-stdout plugin-runner.8mandos \
266
164
                > $(MANDIR)/man8/plugin-runner.8mandos.gz
267
165
        gzip --best --to-stdout plugins.d/password-prompt.8mandos \
268
166
                > $(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)"
 
167
        gzip --best --to-stdout plugins.d/password-request.8mandos \
 
168
                > $(MANDIR)/man8/password-request.8mandos.gz
 
169
        -$(PREFIX)/sbin/mandos-keygen
275
170
        update-initramfs -k all -u
276
 
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
277
171
 
278
172
uninstall: uninstall-server uninstall-client
279
173
 
280
 
uninstall-server:
 
174
uninstall-server: $(PREFIX)/sbin/mandos
281
175
        -rm --force $(PREFIX)/sbin/mandos \
282
176
                $(MANDIR)/man8/mandos.8.gz \
283
177
                $(MANDIR)/man5/mandos.conf.5.gz \
284
178
                $(MANDIR)/man5/mandos-clients.conf.5.gz
285
 
        update-rc.d -f mandos remove
286
179
        -rmdir $(CONFDIR)
287
180
 
288
181
uninstall-client:
289
182
# Refuse to uninstall client if /etc/crypttab is explicitly configured
290
183
# to use it.
291
184
        ! grep --regexp='^ *[^ #].*keyscript=[^,=]*/mandos/' \
292
 
                $(DESTDIR)/etc/crypttab
 
185
                /etc/crypttab
293
186
        -rm --force $(PREFIX)/sbin/mandos-keygen \
294
187
                $(PREFIX)/lib/mandos/plugin-runner \
295
188
                $(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 \
 
189
                $(PREFIX)/lib/mandos/plugins.d/password-request \
 
190
                /usr/share/initramfs-tools/hooks/mandos \
 
191
                /usr/share/initramfs-tools/conf-hooks.d/mandos \
302
192
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
303
193
                $(MANDIR)/man8/mandos-keygen.8.gz \
304
194
                $(MANDIR)/man8/password-prompt.8mandos.gz \
305
 
                $(MANDIR)/man8/mandos-client.8mandos.gz
 
195
                $(MANDIR)/man8/password-request.8mandos.gz
306
196
        -rmdir $(PREFIX)/lib/mandos/plugins.d $(CONFDIR)/plugins.d \
307
 
                 $(PREFIX)/lib/mandos $(CONFDIR) $(KEYDIR)
 
197
                 $(PREFIX)/lib/mandos $(CONFDIR)
308
198
        update-initramfs -k all -u
309
199
 
310
200
purge: purge-server purge-client
311
201
 
312
202
purge-server: uninstall-server
313
 
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
314
 
                $(DESTDIR)/etc/default/mandos \
315
 
                $(DESTDIR)/etc/init.d/mandos \
316
 
                $(DESTDIR)/var/run/mandos.pid
 
203
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf
317
204
        -rmdir $(CONFDIR)
318
205
 
319
206
purge-client: uninstall-client
320
 
        -shred --remove $(KEYDIR)/seckey.txt
321
 
        -rm --force $(CONFDIR)/plugin-runner.conf \
322
 
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt
323
 
        -rmdir $(KEYDIR) $(CONFDIR)/plugins.d $(CONFDIR)
 
207
        -rm --force $(CONFDIR)/seckey.txt $(CONFDIR)/pubkey.txt
 
208
        -rmdir $(CONFDIR) $(CONFDIR)/plugins.d