bzr branch
http://bzr.recompile.se/loggerhead/mandos/trunk
505.1.13
by Teddy Hogeborn
Miscellaneous fixes prompted by lintian: |
1 |
#!/bin/sh
|
185
by Teddy Hogeborn
* .bzr-builddeb/default.conf: New. |
2 |
# This script can be called in the following ways:
|
3 |
#
|
|
4 |
# After the package was installed:
|
|
5 |
# <postinst> configure <old-version>
|
|
6 |
#
|
|
7 |
#
|
|
8 |
# If prerm fails during upgrade or fails on failed upgrade:
|
|
9 |
# <old-postinst> abort-upgrade <new-version>
|
|
10 |
#
|
|
11 |
# If prerm fails during deconfiguration of a package:
|
|
12 |
# <postinst> abort-deconfigure in-favour <new-package> <version>
|
|
13 |
# removing <old-package> <version>
|
|
14 |
#
|
|
15 |
# If prerm fails during replacement due to conflict:
|
|
16 |
# <postinst> abort-remove in-favour <new-package> <version>
|
|
17 |
||
967
by Teddy Hogeborn
Show debconf note about new TLS key IDs |
18 |
. /usr/share/debconf/confmodule
|
19 |
||
505.1.13
by Teddy Hogeborn
Miscellaneous fixes prompted by lintian: |
20 |
set -e |
21 |
||
195
by Teddy Hogeborn
* debian/control (mandos, mandos-client): Depend on "adduser". |
22 |
# Update the initial RAM file system image
|
185
by Teddy Hogeborn
* .bzr-builddeb/default.conf: New. |
23 |
update_initramfs()
|
24 |
{
|
|
1127
by Teddy Hogeborn
Add dracut(8) support |
25 |
if command -v update-initramfs >/dev/null; then |
1288
by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts |
26 |
update-initramfs -k all -u 1>&2 |
1127
by Teddy Hogeborn
Add dracut(8) support |
27 |
elif command -v dracut >/dev/null; then |
28 |
dracut_version="`dpkg-query --showformat='${Version}' --show dracut`" |
|
29 |
if dpkg --compare-versions "$dracut_version" lt 043-1 \ |
|
30 |
&& bash -c '. /etc/dracut.conf; . /etc/dracut.conf.d/*; [ "$hostonly" != yes ]'; then |
|
31 |
echo 'Dracut is not configured to use hostonly mode!' >&2 |
|
32 |
return 1 |
|
33 |
fi |
|
34 |
# Logic taken from dracut.postinst |
|
35 |
for kernel in /boot/vmlinu[xz]-*; do |
|
36 |
kversion="${kernel#/boot/vmlinu[xz]-}" |
|
37 |
# Dracut preserves old permissions of initramfs image |
|
38 |
# files, so we adjust permissions before creating new |
|
39 |
# initramfs image containing secret keys. |
|
1283
by Teddy Hogeborn
Fix file permissions when installing a new kernel, with dracut |
40 |
if [ -e /boot/initrd.img-"$kversion" ]; then |
41 |
chmod go-r /boot/initrd.img-"$kversion" |
|
42 |
else |
|
43 |
# An initrd image has not yet been created for this |
|
44 |
# kernel, possibly because this new kernel is about to |
|
45 |
# be, but has not yet been, installed. In this case, |
|
46 |
# we create an empty file with the right permissions |
|
47 |
# so that Dracut will preserve those permissions when |
|
48 |
# it creates the real, new initrd image for this |
|
49 |
# kernel. |
|
50 |
install --mode=u=rw /dev/null \ |
|
51 |
/boot/initrd.img-"$kversion" |
|
52 |
fi |
|
1127
by Teddy Hogeborn
Add dracut(8) support |
53 |
if [ "$kversion" != "*" ]; then |
1288
by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts |
54 |
/etc/kernel/postinst.d/dracut "$kversion" 1>&2 |
1127
by Teddy Hogeborn
Add dracut(8) support |
55 |
fi |
56 |
done |
|
57 |
fi |
|
237.2.21
by Teddy Hogeborn
* debian/mandos-client.postinst: Secure permissions of old |
58 |
|
59 |
if dpkg --compare-versions "$2" lt-nl "1.0.10-1"; then |
|
60 |
# Make old initrd.img files unreadable too, in case they were |
|
61 |
# created with mandos-client 1.0.8 or older. |
|
237.2.22
by Teddy Hogeborn
* debian/mandos-client.postinst (update_initramfs): Bug fix: typo. |
62 |
find /boot -maxdepth 1 -type f -name "initrd.img-*.bak" \ |
63 |
-print0 | xargs --null --no-run-if-empty chmod o-r |
|
237.2.21
by Teddy Hogeborn
* debian/mandos-client.postinst: Secure permissions of old |
64 |
fi |
185
by Teddy Hogeborn
* .bzr-builddeb/default.conf: New. |
65 |
}
|
66 |
||
190
by Teddy Hogeborn
* debian/mandos-client.postinst: Use "type" instead of "which". Split |
67 |
# Add user and group
|
68 |
add_mandos_user(){
|
|
238
by Teddy Hogeborn
First version of a somewhat complete D-Bus server interface. Also |
69 |
# Rename old "mandos" user and group |
348
by Teddy Hogeborn
* debian/mandos-client.postinst (configure): Don't look for user and |
70 |
if dpkg --compare-versions "$2" lt "1.0.3-1"; then |
71 |
case "`getent passwd mandos`" in |
|
72 |
*:Mandos\ password\ system,,,:/nonexistent:/bin/false) |
|
1288
by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts |
73 |
usermod --login _mandos mandos 1>&2 |
74 |
groupmod --new-name _mandos mandos 1>&2 |
|
348
by Teddy Hogeborn
* debian/mandos-client.postinst (configure): Don't look for user and |
75 |
return |
76 |
;; |
|
77 |
esac |
|
78 |
fi |
|
238
by Teddy Hogeborn
First version of a somewhat complete D-Bus server interface. Also |
79 |
# Create new user and group |
80 |
if ! getent passwd _mandos >/dev/null; then |
|
81 |
adduser --system --force-badname --quiet --home /nonexistent \ |
|
82 |
--no-create-home --group --disabled-password \ |
|
1288
by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts |
83 |
--gecos "Mandos password system" _mandos 1>&2 |
190
by Teddy Hogeborn
* debian/mandos-client.postinst: Use "type" instead of "which". Split |
84 |
fi |
85 |
}
|
|
86 |
||
962
by Teddy Hogeborn
Add support for using raw public keys in TLS (RFC 7250) |
87 |
# Create client key pairs
|
88 |
create_keys(){
|
|
89 |
# If the OpenPGP key files do not exist, generate all keys using |
|
90 |
# mandos-keygen |
|
91 |
if ! [ -r /etc/keys/mandos/pubkey.txt \ |
|
92 |
-a -r /etc/keys/mandos/seckey.txt ]; then |
|
1288
by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts |
93 |
mandos-keygen 1>&2 |
94 |
gpg-connect-agent KILLAGENT /bye 1>&2 || : |
|
962
by Teddy Hogeborn
Add support for using raw public keys in TLS (RFC 7250) |
95 |
return 0 |
96 |
fi |
|
97 |
||
971
by Teddy Hogeborn
Bug fix: Only create TLS key with certtool, and read correct key file |
98 |
# Remove any bad TLS keys by 1.8.0-1 |
99 |
if dpkg --compare-versions "$2" eq "1.8.0-1" \ |
|
100 |
|| dpkg --compare-versions "$2" eq "1.8.0-1~bpo9+1"; then |
|
101 |
# Is the key bad? |
|
102 |
if ! certtool --password='' \ |
|
103 |
--load-privkey=/etc/keys/mandos/tls-privkey.pem \ |
|
104 |
--outfile=/dev/null --pubkey-info --no-text \ |
|
1288
by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts |
105 |
1>&2 2>/dev/null; then |
973
by Teddy Hogeborn
Bug fix: Ignore some failures to remove files. |
106 |
shred --remove -- /etc/keys/mandos/tls-privkey.pem \ |
107 |
2>/dev/null || : |
|
108 |
rm --force -- /etc/keys/mandos/tls-pubkey.pem |
|
971
by Teddy Hogeborn
Bug fix: Only create TLS key with certtool, and read correct key file |
109 |
fi |
110 |
fi |
|
111 |
||
962
by Teddy Hogeborn
Add support for using raw public keys in TLS (RFC 7250) |
112 |
# If the TLS keys already exists, do nothing |
113 |
if [ -r /etc/keys/mandos/tls-privkey.pem \ |
|
114 |
-a -r /etc/keys/mandos/tls-pubkey.pem ]; then |
|
115 |
return 0 |
|
116 |
fi |
|
117 |
||
971
by Teddy Hogeborn
Bug fix: Only create TLS key with certtool, and read correct key file |
118 |
# Try to create the TLS keys |
119 |
||
120 |
TLS_PRIVKEYTMP="`mktemp -t mandos-client-privkey.XXXXXXXXXX`" |
|
121 |
||
122 |
if certtool --generate-privkey --password='' \ |
|
123 |
--outfile "$TLS_PRIVKEYTMP" --sec-param ultra \ |
|
1288
by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts |
124 |
--key-type=ed25519 --pkcs8 --no-text 1>&2 \ |
125 |
2>/dev/null; then |
|
971
by Teddy Hogeborn
Bug fix: Only create TLS key with certtool, and read correct key file |
126 |
|
127 |
local umask=$(umask) |
|
128 |
umask 077 |
|
129 |
cp --archive "$TLS_PRIVKEYTMP" /etc/keys/mandos/tls-privkey.pem |
|
973
by Teddy Hogeborn
Bug fix: Ignore some failures to remove files. |
130 |
shred --remove -- "$TLS_PRIVKEYTMP" 2>/dev/null || : |
971
by Teddy Hogeborn
Bug fix: Only create TLS key with certtool, and read correct key file |
131 |
|
132 |
# First try certtool from GnuTLS |
|
133 |
if ! certtool --password='' \ |
|
134 |
--load-privkey=/etc/keys/mandos/tls-privkey.pem \ |
|
135 |
--outfile=/etc/keys/mandos/tls-pubkey.pem --pubkey-info \ |
|
1288
by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts |
136 |
--no-text 1>&2 2>/dev/null; then |
971
by Teddy Hogeborn
Bug fix: Only create TLS key with certtool, and read correct key file |
137 |
# Otherwise try OpenSSL |
138 |
if ! openssl pkey -in /etc/keys/mandos/tls-privkey.pem \ |
|
1288
by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts |
139 |
-out /etc/keys/mandos/tls-pubkey.pem -pubout \ |
140 |
1>&2; then |
|
971
by Teddy Hogeborn
Bug fix: Only create TLS key with certtool, and read correct key file |
141 |
rm --force /etc/keys/mandos/tls-pubkey.pem |
142 |
# None of the commands succeded; give up |
|
143 |
umask $umask |
|
144 |
return 1 |
|
145 |
fi |
|
146 |
fi |
|
147 |
umask $umask |
|
148 |
||
149 |
key_id=$(mandos-keygen --passfile=/dev/null \ |
|
150 |
| grep --regexp="^key_id[ =]") |
|
151 |
||
152 |
db_version 2.0 |
|
153 |
db_fset mandos-client/key_id seen false |
|
154 |
db_reset mandos-client/key_id |
|
155 |
db_subst mandos-client/key_id key_id $key_id |
|
156 |
db_input critical mandos-client/key_id || true |
|
157 |
db_go
|
|
158 |
db_stop
|
|
159 |
else |
|
973
by Teddy Hogeborn
Bug fix: Ignore some failures to remove files. |
160 |
shred --remove -- "$TLS_PRIVKEYTMP" 2>/dev/null || : |
971
by Teddy Hogeborn
Bug fix: Only create TLS key with certtool, and read correct key file |
161 |
fi |
190
by Teddy Hogeborn
* debian/mandos-client.postinst: Use "type" instead of "which". Split |
162 |
}
|
163 |
||
765
by Teddy Hogeborn
Install client Diffie-Hellman parameters into initramfs. |
164 |
create_dh_params(){
|
766
by Teddy Hogeborn
Rename the "client-dhparams.pem" file to simply "dhparams.pem". |
165 |
if [ -r /etc/keys/mandos/dhparams.pem ]; then |
765
by Teddy Hogeborn
Install client Diffie-Hellman parameters into initramfs. |
166 |
return 0 |
167 |
fi |
|
168 |
# Create a Diffe-Hellman parameters file |
|
169 |
DHFILE="`mktemp -t mandos-client-dh-parameters.XXXXXXXXXX.pem`" |
|
170 |
# First try certtool from GnuTLS |
|
171 |
if ! certtool --generate-dh-params --sec-param high \ |
|
1288
by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts |
172 |
--outfile "$DHFILE" 1>&2; then |
765
by Teddy Hogeborn
Install client Diffie-Hellman parameters into initramfs. |
173 |
# Otherwise try OpenSSL |
174 |
if ! openssl genpkey -genparam -algorithm DH -out "$DHFILE" \ |
|
1288
by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts |
175 |
-pkeyopt dh_paramgen_prime_len:3072 1>&2; then |
765
by Teddy Hogeborn
Install client Diffie-Hellman parameters into initramfs. |
176 |
# None of the commands succeded; give up |
1288
by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts |
177 |
rm --force -- "$DHFILE" |
765
by Teddy Hogeborn
Install client Diffie-Hellman parameters into initramfs. |
178 |
return 1 |
179 |
fi |
|
180 |
fi |
|
181 |
sed --in-place --expression='0,/^-----BEGIN DH PARAMETERS-----$/d' \ |
|
182 |
"$DHFILE" |
|
183 |
sed --in-place --expression='1i-----BEGIN DH PARAMETERS-----' \ |
|
184 |
"$DHFILE" |
|
766
by Teddy Hogeborn
Rename the "client-dhparams.pem" file to simply "dhparams.pem". |
185 |
cp --archive "$DHFILE" /etc/keys/mandos/dhparams.pem |
1288
by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts |
186 |
rm --force -- "$DHFILE" |
765
by Teddy Hogeborn
Install client Diffie-Hellman parameters into initramfs. |
187 |
}
|
188 |
||
185
by Teddy Hogeborn
* .bzr-builddeb/default.conf: New. |
189 |
case "$1" in |
190 |
configure) |
|
237.2.21
by Teddy Hogeborn
* debian/mandos-client.postinst: Secure permissions of old |
191 |
add_mandos_user "$@" |
962
by Teddy Hogeborn
Add support for using raw public keys in TLS (RFC 7250) |
192 |
create_keys "$@" |
765
by Teddy Hogeborn
Install client Diffie-Hellman parameters into initramfs. |
193 |
create_dh_params "$@" || : |
237.2.21
by Teddy Hogeborn
* debian/mandos-client.postinst: Secure permissions of old |
194 |
update_initramfs "$@" |
860
by Teddy Hogeborn
Fix permissions of /etc/mandos/plugin-helpers. |
195 |
if dpkg --compare-versions "$2" lt-nl "1.7.10-1"; then |
836
by Teddy Hogeborn
Client: Fix permissions on plugin helper directory. |
196 |
PLUGINHELPERDIR=/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null)/mandos/plugin-helpers |
197 |
if ! dpkg-statoverride --list "$PLUGINHELPERDIR" \ |
|
198 |
>/dev/null 2>&1; then |
|
199 |
chmod u=rwx,go= -- "$PLUGINHELPERDIR" |
|
200 |
fi |
|
839
by Teddy Hogeborn
Client: Make plugin helper override directory mode u=rwx,go= |
201 |
if ! dpkg-statoverride --list /etc/mandos/plugin-helpers \ |
202 |
>/dev/null 2>&1; then |
|
203 |
chmod u=rwx,go= -- /etc/mandos/plugin-helpers |
|
204 |
fi |
|
836
by Teddy Hogeborn
Client: Fix permissions on plugin helper directory. |
205 |
fi |
185
by Teddy Hogeborn
* .bzr-builddeb/default.conf: New. |
206 |
;; |
207 |
abort-upgrade|abort-deconfigure|abort-remove) |
|
208 |
;; |
|
209 |
||
210 |
*) |
|
275
by Teddy Hogeborn
* debian/mandos-client.postinst: Converted to Bourne shell. Also |
211 |
echo "$0 called with unknown argument '$1'" 1>&2 |
185
by Teddy Hogeborn
* .bzr-builddeb/default.conf: New. |
212 |
exit 1 |
213 |
;; |
|
214 |
esac
|
|
215 |
||
216 |
#DEBHELPER#
|
|
217 |
||
218 |
exit 0 |