/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 initramfs-tools-hook

  • Committer: Teddy Hogeborn
  • Date: 2019-02-10 03:50:20 UTC
  • Revision ID: teddy@recompile.se-20190210035020-nttr1tybgwwixueu
Show debconf note about new TLS key IDs

If mandos-client did not see TLS keys and had to create them, or if
mandos sees GnuTLS version 3.6.6 or later, show an important notice on
package installation about the importance of adding the new key_id
options to clients.conf on the Mandos server.

* debian/control (Package: mandos, Package: mandos-client): Depend on
                                                            debconf.
* debian/mandos-client.lintian-overrides: Override warnings.
* debian/mandos-client.postinst (create_keys): Show notice if new TLS
                                               key files were created.
* debian/mandos-client.templates: New.
* debian/mandos.lintian-overrides: Override warnings.
* debian/mandos.postinst (configure): If GnuTLS 3.6.6 or later is
                                      detected, show an important
                                      notice (once) about the new
                                      key_id option required in
                                      clients.conf.
* debian/mandos.templates: New.

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
# This script will be run by 'mkinitramfs' when it creates the image.
4
4
# Its job is to decide which files to install, then install them into
5
5
# the staging area, where the initramfs is being created.  This
6
 
# happens when a new 'linux-image' package is installed, or when the
 
6
# happens when a new 'linux-image' package is installed, or when an
7
7
# administrator runs 'update-initramfs' by hand to update an initramfs
8
8
# image.
9
9
 
29
29
 
30
30
. /usr/share/initramfs-tools/hook-functions
31
31
 
32
 
for d in /usr /usr/local; do
33
 
    if [ -d "$d"/lib/mandos ]; then
34
 
        prefix="$d"
 
32
for d in /usr/lib \
 
33
    "/usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null`" \
 
34
    "`rpm --eval='%{_libdir}' 2>/dev/null`" /usr/local/lib; do
 
35
    if [ -d "$d"/mandos ]; then
 
36
        libdir="$d"
35
37
        break
36
38
    fi
37
39
done
38
 
if [ -z "$prefix" ]; then
 
40
if [ -z "$libdir" ]; then
39
41
    # Mandos not found
40
42
    exit 1
41
43
fi
68
70
CONFDIR="/conf/conf.d/mandos"
69
71
MANDOSDIR="/lib/mandos"
70
72
PLUGINDIR="${MANDOSDIR}/plugins.d"
 
73
PLUGINHELPERDIR="${MANDOSDIR}/plugin-helpers"
71
74
HOOKDIR="${MANDOSDIR}/network-hooks.d"
72
75
 
73
76
# Make directories
74
77
install --directory --mode=u=rwx,go=rx "${DESTDIR}${CONFDIR}" \
75
78
        "${DESTDIR}${MANDOSDIR}" "${DESTDIR}${HOOKDIR}"
76
79
install --owner=${mandos_user} --group=${mandos_group} --directory \
77
 
    --mode=u=rwx "${DESTDIR}${PLUGINDIR}"
 
80
        --mode=u=rwx "${DESTDIR}${PLUGINDIR}" \
 
81
        "${DESTDIR}${PLUGINHELPERDIR}"
 
82
 
 
83
copy_exec "$libdir"/mandos/mandos-to-cryptroot-unlock "${MANDOSDIR}"
78
84
 
79
85
# Copy the Mandos plugin runner
80
 
copy_exec "$prefix"/lib/mandos/plugin-runner "${MANDOSDIR}"
 
86
copy_exec "$libdir"/mandos/plugin-runner "${MANDOSDIR}"
81
87
 
82
88
# Copy the plugins
83
89
 
84
90
# Copy the packaged plugins
85
 
for file in "$prefix"/lib/mandos/plugins.d/*; do
 
91
for file in "$libdir"/mandos/plugins.d/*; do
86
92
    base="`basename \"$file\"`"
87
93
    # Is this plugin overridden?
88
94
    if [ -e "/etc/mandos/plugins.d/$base" ]; then
96
102
    esac
97
103
done
98
104
 
 
105
# Copy the packaged plugin helpers
 
106
for file in "$libdir"/mandos/plugin-helpers/*; do
 
107
    base="`basename \"$file\"`"
 
108
    # Is this plugin overridden?
 
109
    if [ -e "/etc/mandos/plugin-helpers/$base" ]; then
 
110
        continue
 
111
    fi
 
112
    case "$base" in
 
113
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert)
 
114
            : ;;
 
115
        "*") : ;;
 
116
        *) copy_exec "$file" "${PLUGINHELPERDIR}" ;;
 
117
    esac
 
118
done
 
119
 
99
120
# Copy any user-supplied plugins
100
121
for file in /etc/mandos/plugins.d/*; do
101
122
    base="`basename \"$file\"`"
107
128
    esac
108
129
done
109
130
 
 
131
# Copy any user-supplied plugin helpers
 
132
for file in /etc/mandos/plugin-helpers/*; do
 
133
    base="`basename \"$file\"`"
 
134
    case "$base" in
 
135
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert)
 
136
            : ;;
 
137
        "*") : ;;
 
138
        *) copy_exec "$file" "${PLUGINHELPERDIR}" ;;
 
139
    esac
 
140
done
 
141
 
 
142
# Get DEVICE from initramfs.conf and other files
 
143
. /etc/initramfs-tools/initramfs.conf
 
144
for conf in /etc/initramfs-tools/conf.d/*; do
 
145
    if [ -n `basename \"$conf\" | grep '^[[:alnum:]][[:alnum:]\._-]*$' \
 
146
        | grep -v '\.dpkg-.*$'` ]; then
 
147
        [ -f "${conf}" ] && . "${conf}"
 
148
    fi
 
149
done
 
150
export DEVICE
 
151
 
110
152
# Copy network hooks
111
153
for hook in /etc/mandos/network-hooks.d/*; do
112
154
    case "`basename \"$hook\"`" in
117
159
    if [ -x "$hook" ]; then
118
160
        # Copy any files needed by the network hook
119
161
        MANDOSNETHOOKDIR=/etc/mandos/network-hooks.d MODE=files \
120
 
            VERBOSITY=0 "$hook" files | while read file target; do
 
162
            VERBOSITY=0 "$hook" files | while read -r file target; do
121
163
            if [ ! -e "${file}" ]; then
122
164
                echo "WARNING: file ${file} not found, requested by Mandos network hook '${hook##*/}'" >&2
123
165
            fi
129
171
        done
130
172
        # Copy and load any modules needed by the network hook
131
173
        MANDOSNETHOOKDIR=/etc/mandos/network-hooks.d MODE=modules \
132
 
            VERBOSITY=0 "$hook" modules | while read module; do
133
 
            if [ -z "${target}" ]; then
134
 
                force_load "$module"
135
 
            fi
 
174
            VERBOSITY=0 "$hook" modules | while read -r module; do
 
175
            force_load "$module"
136
176
        done
137
177
    fi
138
178
done
139
179
 
140
 
# GPGME needs /usr/bin/gpg
141
 
if [ ! -e "${DESTDIR}/usr/bin/gpg" \
142
 
    -a -n "`ls \"${DESTDIR}\"/usr/lib/libgpgme.so* \
143
 
                2>/dev/null`" ]; then
144
 
    copy_exec /usr/bin/gpg
145
 
fi
 
180
# GPGME needs GnuPG
 
181
gpg=/usr/bin/gpg
 
182
libgpgme11_version="`dpkg-query --showformat='${Version}' --show libgpgme11`"
 
183
if dpkg --compare-versions "$libgpgme11_version" ge 1.5.0-0.1; then
 
184
    if [ -e /usr/bin/gpgconf ]; then
 
185
        if [ ! -e "${DESTDIR}/usr/bin/gpgconf" ]; then
 
186
            copy_exec /usr/bin/gpgconf
 
187
        fi
 
188
        gpg="`/usr/bin/gpgconf|sed --quiet --expression='s/^gpg:[^:]*://p'`"
 
189
        gpgagent="`/usr/bin/gpgconf|sed --quiet --expression='s/^gpg-agent:[^:]*://p'`"
 
190
        # Newer versions of GnuPG 2 requires the gpg-agent binary
 
191
        if [ -e "$gpgagent" ] && [ ! -e "${DESTDIR}$gpgagent" ]; then
 
192
            copy_exec "$gpgagent"
 
193
        fi
 
194
    fi
 
195
elif dpkg --compare-versions "$libgpgme11_version" ge 1.4.1-0.1; then
 
196
    gpg=/usr/bin/gpg2
 
197
fi
 
198
if [ ! -e "${DESTDIR}$gpg" ]; then
 
199
    copy_exec "$gpg"
 
200
fi
 
201
unset gpg
 
202
unset libgpgme11_version
146
203
 
147
204
# Config files
148
205
for file in /etc/mandos/plugin-runner.conf; do
167
224
    if [ -d "$file" ]; then
168
225
        continue
169
226
    fi
170
 
    cp --archive --sparse=always "$file" "${DESTDIR}${CONFDIR}"
171
 
    chown ${mandos_user}:${mandos_group} \
172
 
        "${DESTDIR}${CONFDIR}/`basename \"$file\"`"
 
227
    case "$file" in
 
228
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert)
 
229
            : ;;
 
230
        "*") : ;;
 
231
        *)
 
232
            cp --archive --sparse=always "$file" \
 
233
               "${DESTDIR}${CONFDIR}"
 
234
            chown ${mandos_user}:${mandos_group} \
 
235
                  "${DESTDIR}${CONFDIR}/`basename \"$file\"`"
 
236
            ;;
 
237
    esac
173
238
done
 
239
# Use Diffie-Hellman parameters file if available
 
240
if [ -e "${DESTDIR}${CONFDIR}"/dhparams.pem ]; then
 
241
    sed --in-place \
 
242
        --expression="1i--options-for=mandos-client:--dh-params=${CONFDIR}/dhparams.pem" \
 
243
        "${DESTDIR}/${CONFDIR}/plugin-runner.conf"
 
244
fi
174
245
 
175
246
# /lib/mandos/plugin-runner will drop priviliges, but needs access to
176
247
# its plugin directory and its config file.  However, since almost all
181
252
# initrd; it is intended to affect the initrd.img file itself, since
182
253
# it now contains secret key files.  There is, however, no other way
183
254
# to set the permission of the initrd.img file without a race
184
 
# condition.  This umask is set by "initramfs-tools-hook-conf",
185
 
# installed as "/usr/share/initramfs-tools/conf-hooks.d/mandos".)
 
255
# condition.  This umask is set by "initramfs-tools-conf", installed
 
256
# as "/usr/share/initramfs-tools/conf.d/mandos-conf".)
186
257
187
258
for full in "${MANDOSDIR}" "${CONFDIR}"; do
188
259
    while [ "$full" != "/" ]; do
200
271
done
201
272
for dir in "${DESTDIR}"/lib* "${DESTDIR}"/usr/lib*; do
202
273
    if [ -d "$dir" ]; then
203
 
        find "$dir" \! -perm -u+rw,g+r -prune -or -print0 \
204
 
            | xargs --null --no-run-if-empty chmod a+rX
 
274
        find "$dir" \! -perm -u+rw,g+r -prune -or \! -type l -print0 \
 
275
            | xargs --null --no-run-if-empty chmod a+rX --
205
276
    fi
206
277
done