/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-16 03:29:08 UTC
  • Revision ID: teddy@fukt.bsnet.se-20080816032908-ihw7c05r2mnyk389
Add feature to specify custom environment variables for plugins.

* plugin-runner.c (plugin): New members "environ" and "envc" to
                            contain possible custom environment.
  (getplugin): Return NULL on failure instead of doing exit(); all
               callers changed.
  (add_to_char_array): New helper function for "add_argument" and
                       "add_environment".
  (addargument): Renamed to "add_argument".  Return bool.  Call
                 "add_to_char_array" to actually do things.
  (add_environment): New; analogous to "add_argument".
  (addcustomargument): Renamed to "add_to_argv" to avoid confusion
                       with "add_argument".
  (main): New options "--global-envs" and "--envs-for" to specify
          custom environment for plugins.  Print environment for
          plugins in debug mode.  Use asprintf instead of strcpy and
          strcat.  Use execve() for plugins with custom environments.
          Free environment for plugin when freeing plugin list.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
OPTIMIZE=-Os
15
15
LANGUAGE=-std=gnu99
16
16
# PREFIX=/usr/local
17
 
PREFIX=$(DESTDIR)/usr
 
17
PREFIX=/usr
18
18
# CONFDIR=/usr/local/lib/mandos
19
 
CONFDIR=$(DESTDIR)/etc/mandos
20
 
# KEYDIR=/usr/local/lib/mandos/keys
21
 
KEYDIR=$(DESTDIR)/etc/keys/mandos
 
19
CONFDIR=/etc/mandos
22
20
# MANDIR=/usr/local/man
23
 
MANDIR=$(DESTDIR)/usr/share/man
24
 
 
25
 
GNUTLS_CFLAGS=$(shell libgnutls-config --cflags)
26
 
GNUTLS_LIBS=$(shell libgnutls-config --libs)
27
 
AVAHI_CFLAGS=$(shell pkg-config --cflags-only-I avahi-core)
28
 
AVAHI_LIBS=$(shell pkg-config --libs avahi-core)
29
 
GPGME_CFLAGS=$(shell gpgme-config --cflags)
30
 
GPGME_LIBS=$(shell gpgme-config --libs)
 
21
MANDIR=/usr/share/man
31
22
 
32
23
# Do not change these two
33
 
CFLAGS=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) \
34
 
        $(LANGUAGE) $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(GPGME_CFLAGS)
 
24
CFLAGS=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) $(LANGUAGE)
35
25
LDFLAGS=$(COVERAGE)
36
26
 
37
 
# Commands to format a DocBook refentry document into a manual page
38
 
DOCBOOKTOMAN=cd $(dir $<); xsltproc --nonet --xinclude \
 
27
DOCBOOKTOMAN=xsltproc --nonet \
39
28
        --param man.charmap.use.subset          0 \
40
29
        --param make.year.ranges                1 \
41
30
        --param make.single.year.ranges         1 \
42
31
        --param man.output.quietly              1 \
43
 
        --param man.authors.section.enabled     0 \
44
 
         /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
45
 
        $(notdir $<); \
46
 
        $(MANPOST) $(notdir $@)
47
 
# DocBook-to-man post-processing to fix a \n escape bug
48
 
MANPOST=sed --in-place --expression='s,\\\\en,\\en,g;s,\\n,\\en,g'
 
32
        --param man.authors.section.enabled     0
49
33
 
50
34
PLUGINS=plugins.d/password-prompt plugins.d/password-request
51
35
PROGS=plugin-runner $(PLUGINS)
54
38
        plugins.d/password-prompt.8mandos mandos.conf.5 \
55
39
        mandos-clients.conf.5
56
40
 
57
 
objects=$(addsuffix .o,$(PROGS))
 
41
objects=$(shell for p in $(PROGS); do echo $${p}.o; done)
58
42
 
59
43
all: $(PROGS)
60
44
 
61
45
doc: $(DOCS)
62
46
 
63
 
%.5: %.xml legalnotice.xml
64
 
        $(DOCBOOKTOMAN)
65
 
 
66
 
%.8: %.xml legalnotice.xml
67
 
        $(DOCBOOKTOMAN)
68
 
 
69
 
%.8mandos: %.xml legalnotice.xml
70
 
        $(DOCBOOKTOMAN)
71
 
 
72
 
mandos.8: mandos.xml mandos-options.xml overview.xml legalnotice.xml
73
 
        $(DOCBOOKTOMAN)
74
 
 
75
 
mandos-keygen.8: mandos-keygen.xml overview.xml legalnotice.xml
76
 
        $(DOCBOOKTOMAN)
77
 
 
78
 
mandos.conf.5: mandos.conf.xml mandos-options.xml legalnotice.xml
79
 
        $(DOCBOOKTOMAN)
80
 
 
81
 
plugin-runner.8mandos: plugin-runner.xml overview.xml legalnotice.xml
82
 
        $(DOCBOOKTOMAN)
83
 
 
84
 
plugins.d/password-request.8mandos: plugins.d/password-request.xml \
85
 
                                        mandos-options.xml \
86
 
                                        overview.xml legalnotice.xml
87
 
        $(DOCBOOKTOMAN)
 
47
%.5: %.xml
 
48
        cd $(dir $^); $(DOCBOOKTOMAN) $(notdir $^)
 
49
 
 
50
%.8: %.xml
 
51
        cd $(dir $^); $(DOCBOOKTOMAN) $(notdir $^)
 
52
 
 
53
%.8mandos: %.xml
 
54
        cd $(dir $^); $(DOCBOOKTOMAN) $(notdir $^)
 
55
 
 
56
plugin-runner: plugin-runner.o
 
57
        $(LINK.o) -lgnutls $(COMMON) $^ $(LOADLIBES) $(LDLIBS) -o $@
88
58
 
89
59
plugins.d/password-request: plugins.d/password-request.o
90
 
        $(LINK.o) $(GNUTLS_LIBS) $(AVAHI_LIBS) $(GPGME_LIBS) \
91
 
                $(COMMON) $^ $(LOADLIBES) $(LDLIBS) -o $@
92
 
 
93
 
.PHONY : all doc clean distclean run-client run-server install \
 
60
        $(LINK.o) -lgnutls -lavahi-core -lgpgme $(COMMON) $^ \
 
61
                $(LOADLIBES) $(LDLIBS) -o $@
 
62
 
 
63
plugins.d/password-prompt: plugins.d/password-prompt.o
 
64
        $(LINK.o) $(COMMON) $^ $(LOADLIBES) $(LDLIBS) -o $@
 
65
 
 
66
.PHONY : all clean distclean run-client run-server install \
94
67
        install-server install-client uninstall uninstall-server \
95
68
        uninstall-client purge purge-server purge-client
96
69
 
100
73
distclean: clean
101
74
mostlyclean: clean
102
75
maintainer-clean: clean
103
 
        -rm --force --recursive keydir confdir
 
76
        -rm --force --recursive keydir
104
77
 
105
78
check:
106
79
        ./mandos --check
107
80
 
108
 
# Run the client with a local config and key
109
 
run-client: all keydir/seckey.txt keydir/pubkey.txt
 
81
run-client: all
 
82
        -mkdir keydir
 
83
        -./mandos-keygen --dir keydir
110
84
        ./plugin-runner --plugin-dir=plugins.d \
111
 
                --config-file=plugin-runner.conf \
112
 
                --options-for=password-request:--seckey=keydir/seckey.txt,--pubkey=keydir/pubkey.txt
113
 
 
114
 
# Used by run-client
115
 
keydir/seckey.txt keydir/pubkey.txt: mandos-keygen
116
 
        install --directory keydir
117
 
        ./mandos-keygen --dir keydir --force
118
 
 
119
 
# Run the server with a local config
120
 
run-server: confdir/mandos.conf confdir/clients.conf
121
 
        ./mandos --debug --configdir=confdir
122
 
 
123
 
# Used by run-server
124
 
confdir/mandos.conf: mandos.conf
125
 
        install --directory confdir
126
 
        install --mode=u=rw,go=r $^ $@
127
 
confdir/clients.conf: clients.conf keydir/seckey.txt
128
 
        install --directory confdir
129
 
        install --mode=u=rw $< $@
130
 
# Add a client password
131
 
        ./mandos-keygen --dir keydir --password >> $@
 
85
                --options-for=password-request:--keydir=keydir
 
86
 
 
87
run-server:
 
88
        ./mandos --debug --configdir=.
132
89
 
133
90
install: install-server install-client
134
91
 
135
92
install-server: doc
136
 
        install --directory $(CONFDIR) $(MANDIR)/man5 \
 
93
        mkdir --mode=0755 --parents $(CONFDIR) $(MANDIR)/man5 \
137
94
                $(MANDIR)/man8
138
 
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
139
 
        install --mode=u=rw,go=r --target-directory=$(CONFDIR) \
140
 
                mandos.conf
141
 
        install --mode=u=rw --target-directory=$(CONFDIR) \
 
95
        install --mode=0755 mandos $(PREFIX)/sbin/mandos
 
96
        install --mode=0644 --target-directory=$(CONFDIR) mandos.conf
 
97
        install --mode=0640 --target-directory=$(CONFDIR) \
142
98
                clients.conf
143
 
        install --mode=u=rwx,go=rx init.d-mandos /etc/init.d/mandos
144
 
        install --mode=u=rw,go=r default-mandos /etc/default/mandos
145
 
        update-rc.d mandos defaults
146
99
        gzip --best --to-stdout mandos.8 \
147
100
                > $(MANDIR)/man8/mandos.8.gz
148
101
        gzip --best --to-stdout mandos.conf.5 \
151
104
                > $(MANDIR)/man5/mandos-clients.conf.5.gz
152
105
 
153
106
install-client: all doc /usr/share/initramfs-tools/hooks/.
154
 
        install --directory $(PREFIX)/lib/mandos $(CONFDIR) \
 
107
        mkdir --mode=0755 --parents $(PREFIX)/lib/mandos $(CONFDIR) \
155
108
                $(MANDIR)/man8
156
 
        install --directory --mode=u=rwx $(KEYDIR)
157
 
        install --directory --mode=u=rwx \
158
 
                $(PREFIX)/lib/mandos/plugins.d
159
 
        if [ "$(CONFDIR)" != "$(PREFIX)/lib/mandos" ]; then \
160
 
                install --mode=u=rwx \
161
 
                        --directory "$(CONFDIR)/plugins.d"; \
162
 
                install --mode=u=rw,go=r etc-plugins.d-README \
163
 
                        $(CONFDIR)/plugins.d/README ; \
164
 
        fi
165
 
        install --mode=u=rwx,go=rx \
166
 
                --target-directory=$(PREFIX)/lib/mandos plugin-runner
167
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
 
109
        -mkdir --mode=0700 $(PREFIX)/lib/mandos/plugins.d
 
110
        chmod u=rwx,g=,o= $(PREFIX)/lib/mandos/plugins.d
 
111
        install --mode=0755 --target-directory=$(PREFIX)/lib/mandos \
 
112
                plugin-runner
 
113
        install --mode=0755 --target-directory=$(PREFIX)/sbin \
168
114
                mandos-keygen
169
 
        install --mode=u=rwx,go=rx \
 
115
        install --mode=0755 \
170
116
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
171
117
                plugins.d/password-prompt
172
 
        install --mode=u=rwxs,go=rx \
 
118
        install --mode=4755 \
173
119
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
174
120
                plugins.d/password-request
175
 
        install --mode=u=rwx,go=rx \
176
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
177
 
                plugins.d/usplash
178
121
        install initramfs-tools-hook \
179
122
                /usr/share/initramfs-tools/hooks/mandos
180
123
        install initramfs-tools-hook-conf \
181
124
                /usr/share/initramfs-tools/conf-hooks.d/mandos
182
125
        install initramfs-tools-script \
183
126
                /usr/share/initramfs-tools/scripts/local-top/mandos
184
 
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
185
127
        gzip --best --to-stdout mandos-keygen.8 \
186
128
                > $(MANDIR)/man8/mandos-keygen.8.gz
187
129
        gzip --best --to-stdout plugin-runner.8mandos \
190
132
                > $(MANDIR)/man8/password-prompt.8mandos.gz
191
133
        gzip --best --to-stdout plugins.d/password-request.8mandos \
192
134
                > $(MANDIR)/man8/password-request.8mandos.gz
193
 
# Post-installation stuff
194
 
        -$(PREFIX)/sbin/mandos-keygen --dir "$(KEYDIR)"
 
135
        -$(PREFIX)/sbin/mandos-keygen
195
136
        update-initramfs -k all -u
196
 
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
197
137
 
198
138
uninstall: uninstall-server uninstall-client
199
139
 
200
 
uninstall-server:
 
140
uninstall-server: $(PREFIX)/sbin/mandos
201
141
        -rm --force $(PREFIX)/sbin/mandos \
202
142
                $(MANDIR)/man8/mandos.8.gz \
203
143
                $(MANDIR)/man5/mandos.conf.5.gz \
204
144
                $(MANDIR)/man5/mandos-clients.conf.5.gz
205
 
        update-rc.d -f mandos remove
206
145
        -rmdir $(CONFDIR)
207
146
 
208
147
uninstall-client:
214
153
                $(PREFIX)/lib/mandos/plugin-runner \
215
154
                $(PREFIX)/lib/mandos/plugins.d/password-prompt \
216
155
                $(PREFIX)/lib/mandos/plugins.d/password-request \
217
 
                $(PREFIX)/lib/mandos/plugins.d/usplash \
218
156
                /usr/share/initramfs-tools/hooks/mandos \
219
157
                /usr/share/initramfs-tools/conf-hooks.d/mandos \
220
 
                /usr/share/initramfs-tools/scripts/local-top/mandos \
221
158
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
222
159
                $(MANDIR)/man8/mandos-keygen.8.gz \
223
160
                $(MANDIR)/man8/password-prompt.8mandos.gz \
224
161
                $(MANDIR)/man8/password-request.8mandos.gz
225
 
        if [ "$(CONFDIR)" != "$(PREFIX)/lib/mandos" ]; then \
226
 
                rm --force $(CONFDIR)/plugins.d/README; \
227
 
        fi
228
162
        -rmdir $(PREFIX)/lib/mandos/plugins.d $(CONFDIR)/plugins.d \
229
 
                 $(PREFIX)/lib/mandos $(CONFDIR) $(KEYDIR)
 
163
                 $(PREFIX)/lib/mandos $(CONFDIR)
230
164
        update-initramfs -k all -u
231
165
 
232
166
purge: purge-server purge-client
233
167
 
234
168
purge-server: uninstall-server
235
 
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
236
 
                /etc/default/mandos /etc/init.d/mandos \
237
 
                /var/run/mandos.pid
 
169
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf
238
170
        -rmdir $(CONFDIR)
239
171
 
240
172
purge-client: uninstall-client
241
 
        -shred --remove $(KEYDIR)/seckey.txt
242
 
        -rm --force $(CONFDIR)/plugin-runner.conf \
243
 
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt
244
 
        -rmdir $(KEYDIR) $(CONFDIR)/plugins.d $(CONFDIR)
 
173
        -rm --force $(CONFDIR)/seckey.txt $(CONFDIR)/pubkey.txt
 
174
        -rmdir $(CONFDIR) $(CONFDIR)/plugins.d