/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:
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 
 
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 -Wunreachable-code -Winline \
 
8
        -Wvolatile-register-var
2
9
DEBUG=-ggdb3
3
10
# For info about _FORTIFY_SOURCE, see
4
11
# <http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html>
6
13
#COVERAGE=--coverage
7
14
OPTIMIZE=-Os
8
15
LANGUAGE=-std=gnu99
 
16
# PREFIX=/usr/local
 
17
PREFIX=/usr
 
18
# CONFDIR=/usr/local/lib/mandos
 
19
CONFDIR=/etc/mandos
 
20
# MANDIR=/usr/local/man
 
21
MANDIR=/usr/share/man
9
22
 
10
23
# Do not change these two
11
24
CFLAGS=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) $(LANGUAGE)
12
25
LDFLAGS=$(COVERAGE)
13
26
 
14
 
DOCBOOKTOMAN=xsltproc --nonet --param man.charmap.use.subset "0" --param make.year.ranges "1" --param make.single.year.ranges "1" --param man.output.quietly "1"
 
27
DOCBOOKTOMAN=xsltproc --nonet \
 
28
        --param man.charmap.use.subset          0 \
 
29
        --param make.year.ranges                1 \
 
30
        --param make.single.year.ranges         1 \
 
31
        --param man.output.quietly              1 \
 
32
        --param man.authors.section.enabled     0
15
33
 
16
 
PROGS=mandos-client plugins.d/password-request plugins.d/password-prompt
17
 
DOCS=mandos.8 mandos-client.8mandos plugins.d/password-request.8mandos plugins.d/password-prompt.8mandos mandos.conf.5 mandos-clients.conf.5
 
34
PLUGINS=plugins.d/password-prompt plugins.d/password-request
 
35
PROGS=plugin-runner $(PLUGINS)
 
36
DOCS=mandos.8 plugin-runner.8mandos mandos-keygen.8 \
 
37
        plugins.d/password-request.8mandos \
 
38
        plugins.d/password-prompt.8mandos mandos.conf.5 \
 
39
        mandos-clients.conf.5
18
40
 
19
41
objects=$(shell for p in $(PROGS); do echo $${p}.o; done)
20
42
 
21
 
all: $(PROGS) $(DOCS)
 
43
all: $(PROGS)
 
44
 
 
45
doc: $(DOCS)
22
46
 
23
47
%.5: %.xml
24
 
        cd $(shell dirname $^); $(DOCBOOKTOMAN) $(shell basename $^)
 
48
        cd $(dir $^); $(DOCBOOKTOMAN) $(notdir $^)
25
49
 
26
50
%.8: %.xml
27
 
        cd $(shell dirname $^); $(DOCBOOKTOMAN) $(shell basename $^)
 
51
        cd $(dir $^); $(DOCBOOKTOMAN) $(notdir $^)
28
52
 
29
53
%.8mandos: %.xml
30
 
        cd $(shell dirname $^); $(DOCBOOKTOMAN) $(shell basename $^)
 
54
        cd $(dir $^); $(DOCBOOKTOMAN) $(notdir $^)
31
55
 
32
 
mandos-client: mandos-client.o
 
56
plugin-runner: plugin-runner.o
33
57
        $(LINK.o) -lgnutls $(COMMON) $^ $(LOADLIBES) $(LDLIBS) -o $@
34
58
 
35
59
plugins.d/password-request: plugins.d/password-request.o
36
 
        $(LINK.o) -lgnutls -lavahi-core -lgpgme $(COMMON) $^ $(LOADLIBES) $(LDLIBS) -o $@
 
60
        $(LINK.o) -lgnutls -lavahi-core -lgpgme $(COMMON) $^ \
 
61
                $(LOADLIBES) $(LDLIBS) -o $@
37
62
 
38
63
plugins.d/password-prompt: plugins.d/password-prompt.o
39
64
        $(LINK.o) $(COMMON) $^ $(LOADLIBES) $(LDLIBS) -o $@
40
65
 
41
 
.PHONY : all clean distclean run-client run-server
 
66
.PHONY : all clean distclean run-client run-server install \
 
67
        install-server install-client uninstall uninstall-server \
 
68
        uninstall-client purge purge-server purge-client
42
69
 
43
70
clean:
44
71
        -rm --force $(PROGS) $(objects) $(DOCS) core
46
73
distclean: clean
47
74
mostlyclean: clean
48
75
maintainer-clean: clean
 
76
        -rm --force --recursive keydir
49
77
 
50
 
check: all
 
78
check:
51
79
        ./mandos --check
52
80
 
53
81
run-client: all
54
 
        ./mandos-client --plugin-dir=plugins.d --options-for=password-request:--keydir=keydir
 
82
        -mkdir keydir
 
83
        -./mandos-keygen --dir keydir
 
84
        ./plugin-runner --plugin-dir=plugins.d \
 
85
                --options-for=password-request:--keydir=keydir
55
86
 
56
 
run-server: all
 
87
run-server:
57
88
        ./mandos --debug --configdir=.
 
89
 
 
90
install: install-server install-client
 
91
 
 
92
install-server: doc
 
93
        mkdir --mode=0755 --parents $(CONFDIR) $(MANDIR)/man5 \
 
94
                $(MANDIR)/man8
 
95
        install --mode=0755 mandos $(PREFIX)/sbin/mandos
 
96
        install --mode=0644 --target-directory=$(CONFDIR) mandos.conf
 
97
        install --mode=0640 --target-directory=$(CONFDIR) \
 
98
                clients.conf
 
99
        gzip --best --to-stdout mandos.8 \
 
100
                > $(MANDIR)/man8/mandos.8.gz
 
101
        gzip --best --to-stdout mandos.conf.5 \
 
102
                > $(MANDIR)/man5/mandos.conf.5.gz
 
103
        gzip --best --to-stdout mandos-clients.conf.5 \
 
104
                > $(MANDIR)/man5/mandos-clients.conf.5.gz
 
105
 
 
106
install-client: all doc /usr/share/initramfs-tools/hooks/.
 
107
        mkdir --mode=0755 --parents $(PREFIX)/lib/mandos $(CONFDIR) \
 
108
                $(MANDIR)/man8
 
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 \
 
114
                mandos-keygen
 
115
        install --mode=0755 \
 
116
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
117
                plugins.d/password-prompt
 
118
        install --mode=4755 \
 
119
                --target-directory=$(PREFIX)/lib/mandos/plugins.d \
 
120
                plugins.d/password-request
 
121
        install initramfs-tools-hook \
 
122
                /usr/share/initramfs-tools/hooks/mandos
 
123
        install initramfs-tools-hook-conf \
 
124
                /usr/share/initramfs-tools/conf-hooks.d/mandos
 
125
        install initramfs-tools-script \
 
126
                /usr/share/initramfs-tools/scripts/local-top/mandos
 
127
        gzip --best --to-stdout mandos-keygen.8 \
 
128
                > $(MANDIR)/man8/mandos-keygen.8.gz
 
129
        gzip --best --to-stdout plugin-runner.8mandos \
 
130
                > $(MANDIR)/man8/plugin-runner.8mandos.gz
 
131
        gzip --best --to-stdout plugins.d/password-prompt.8mandos \
 
132
                > $(MANDIR)/man8/password-prompt.8mandos.gz
 
133
        gzip --best --to-stdout plugins.d/password-request.8mandos \
 
134
                > $(MANDIR)/man8/password-request.8mandos.gz
 
135
        -$(PREFIX)/sbin/mandos-keygen
 
136
        update-initramfs -k all -u
 
137
 
 
138
uninstall: uninstall-server uninstall-client
 
139
 
 
140
uninstall-server: $(PREFIX)/sbin/mandos
 
141
        -rm --force $(PREFIX)/sbin/mandos \
 
142
                $(MANDIR)/man8/mandos.8.gz \
 
143
                $(MANDIR)/man5/mandos.conf.5.gz \
 
144
                $(MANDIR)/man5/mandos-clients.conf.5.gz
 
145
        -rmdir $(CONFDIR)
 
146
 
 
147
uninstall-client:
 
148
# Refuse to uninstall client if /etc/crypttab is explicitly configured
 
149
# to use it.
 
150
        ! grep --regexp='^ *[^ #].*keyscript=[^,=]*/mandos/' \
 
151
                /etc/crypttab
 
152
        -rm --force $(PREFIX)/sbin/mandos-keygen \
 
153
                $(PREFIX)/lib/mandos/plugin-runner \
 
154
                $(PREFIX)/lib/mandos/plugins.d/password-prompt \
 
155
                $(PREFIX)/lib/mandos/plugins.d/password-request \
 
156
                /usr/share/initramfs-tools/hooks/mandos \
 
157
                /usr/share/initramfs-tools/conf-hooks.d/mandos \
 
158
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
 
159
                $(MANDIR)/man8/mandos-keygen.8.gz \
 
160
                $(MANDIR)/man8/password-prompt.8mandos.gz \
 
161
                $(MANDIR)/man8/password-request.8mandos.gz
 
162
        -rmdir $(PREFIX)/lib/mandos/plugins.d $(CONFDIR)/plugins.d \
 
163
                 $(PREFIX)/lib/mandos $(CONFDIR)
 
164
        update-initramfs -k all -u
 
165
 
 
166
purge: purge-server purge-client
 
167
 
 
168
purge-server: uninstall-server
 
169
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf
 
170
        -rmdir $(CONFDIR)
 
171
 
 
172
purge-client: uninstall-client
 
173
        -rm --force $(CONFDIR)/seckey.txt $(CONFDIR)/pubkey.txt
 
174
        -rmdir $(CONFDIR) $(CONFDIR)/plugins.d