/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: 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)/plugins.d" \
160
 
                        != "$(PREFIX)/lib/mandos/plugins.d" ]; then \
161
 
                install --mode=u=rwx \
162
 
                        --directory "$(CONFDIR)/plugins.d"; \
163
 
        fi
164
 
        install --mode=u=rwx,go=rx \
165
 
                --target-directory=$(PREFIX)/lib/mandos plugin-runner
166
 
        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 \
167
114
                mandos-keygen
168
 
        install --mode=u=rwx,go=rx \
 
115
        install --mode=0755 \
169
116
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
170
117
                plugins.d/password-prompt
171
 
        install --mode=u=rwxs,go=rx \
 
118
        install --mode=4755 \
172
119
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
173
120
                plugins.d/password-request
174
 
        install --mode=u=rwx,go=rx \
175
 
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
176
 
                plugins.d/usplash
177
121
        install initramfs-tools-hook \
178
122
                /usr/share/initramfs-tools/hooks/mandos
179
123
        install initramfs-tools-hook-conf \
180
124
                /usr/share/initramfs-tools/conf-hooks.d/mandos
181
125
        install initramfs-tools-script \
182
126
                /usr/share/initramfs-tools/scripts/local-top/mandos
183
 
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
184
127
        gzip --best --to-stdout mandos-keygen.8 \
185
128
                > $(MANDIR)/man8/mandos-keygen.8.gz
186
129
        gzip --best --to-stdout plugin-runner.8mandos \
189
132
                > $(MANDIR)/man8/password-prompt.8mandos.gz
190
133
        gzip --best --to-stdout plugins.d/password-request.8mandos \
191
134
                > $(MANDIR)/man8/password-request.8mandos.gz
192
 
# Post-installation stuff
193
 
        -$(PREFIX)/sbin/mandos-keygen --dir "$(KEYDIR)"
 
135
        -$(PREFIX)/sbin/mandos-keygen
194
136
        update-initramfs -k all -u
195
 
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
196
137
 
197
138
uninstall: uninstall-server uninstall-client
198
139
 
199
 
uninstall-server:
 
140
uninstall-server: $(PREFIX)/sbin/mandos
200
141
        -rm --force $(PREFIX)/sbin/mandos \
201
142
                $(MANDIR)/man8/mandos.8.gz \
202
143
                $(MANDIR)/man5/mandos.conf.5.gz \
203
144
                $(MANDIR)/man5/mandos-clients.conf.5.gz
204
 
        update-rc.d -f mandos remove
205
145
        -rmdir $(CONFDIR)
206
146
 
207
147
uninstall-client:
213
153
                $(PREFIX)/lib/mandos/plugin-runner \
214
154
                $(PREFIX)/lib/mandos/plugins.d/password-prompt \
215
155
                $(PREFIX)/lib/mandos/plugins.d/password-request \
216
 
                $(PREFIX)/lib/mandos/plugins.d/usplash \
217
156
                /usr/share/initramfs-tools/hooks/mandos \
218
157
                /usr/share/initramfs-tools/conf-hooks.d/mandos \
219
 
                /usr/share/initramfs-tools/scripts/local-top/mandos \
220
158
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
221
159
                $(MANDIR)/man8/mandos-keygen.8.gz \
222
160
                $(MANDIR)/man8/password-prompt.8mandos.gz \
223
161
                $(MANDIR)/man8/password-request.8mandos.gz
224
162
        -rmdir $(PREFIX)/lib/mandos/plugins.d $(CONFDIR)/plugins.d \
225
 
                 $(PREFIX)/lib/mandos $(CONFDIR) $(KEYDIR)
 
163
                 $(PREFIX)/lib/mandos $(CONFDIR)
226
164
        update-initramfs -k all -u
227
165
 
228
166
purge: purge-server purge-client
229
167
 
230
168
purge-server: uninstall-server
231
 
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
232
 
                /etc/default/mandos /etc/init.d/mandos \
233
 
                /var/run/mandos.pid
 
169
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf
234
170
        -rmdir $(CONFDIR)
235
171
 
236
172
purge-client: uninstall-client
237
 
        -shred --remove $(KEYDIR)/seckey.txt
238
 
        -rm --force $(CONFDIR)/plugin-runner.conf \
239
 
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt
240
 
        -rmdir $(KEYDIR) $(CONFDIR)/plugins.d $(CONFDIR)
 
173
        -rm --force $(CONFDIR)/seckey.txt $(CONFDIR)/pubkey.txt
 
174
        -rmdir $(CONFDIR) $(CONFDIR)/plugins.d