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

  • Committer: Teddy Hogeborn
  • Date: 2016-03-13 00:37:02 UTC
  • mto: (237.7.594 trunk)
  • mto: This revision was merged to the branch mainline in revision 339.
  • Revision ID: teddy@recompile.se-20160313003702-dulwtwt8ilpojra9
Server: Fix bug where it did not exit timely on signals

Use GLib.unix_signal_add() instead of signal.signal() to catch
signals; this will allow GLib to do its internal magic with signal
file descriptors.  (GLib does not handle signals properly otherwise.)
The function unix_signal_add() requires GLib 2.30 or later, which was
not required by PyGobject until version 3.7.1, so depend on this.

* INSTALL (Mandos Server): Document dependency on PyGObject 3.7.1
* mandos (main): Use GLib.unix_signal_add instead of signal.signal.
* init.d-mandos (do_stop): Remove workaround.
* mandos.service ([Service]): - '' -

Show diffs side-by-side

added added

removed removed

Lines of Context:
75
75
 
76
76
# Make directories
77
77
install --directory --mode=u=rwx,go=rx "${DESTDIR}${CONFDIR}" \
78
 
        "${DESTDIR}${MANDOSDIR}" "${DESTDIR}${HOOKDIR}"
 
78
        "${DESTDIR}${MANDOSDIR}" "${DESTDIR}${HOOKDIR}" \
 
79
        "${DESTDIR}${PLUGINHELPERDIR}"
79
80
install --owner=${mandos_user} --group=${mandos_group} --directory \
80
 
        --mode=u=rwx "${DESTDIR}${PLUGINDIR}" \
81
 
        "${DESTDIR}${PLUGINHELPERDIR}"
82
 
 
83
 
copy_exec "$libdir"/mandos/mandos-to-cryptroot-unlock "${MANDOSDIR}"
 
81
    --mode=u=rwx "${DESTDIR}${PLUGINDIR}"
84
82
 
85
83
# Copy the Mandos plugin runner
86
84
copy_exec "$libdir"/mandos/plugin-runner "${MANDOSDIR}"
142
140
# Get DEVICE from initramfs.conf and other files
143
141
. /etc/initramfs-tools/initramfs.conf
144
142
for conf in /etc/initramfs-tools/conf.d/*; do
145
 
    if [ -n "`basename \"$conf\" \
146
 
        | grep '^[[:alnum:]][[:alnum:]\._-]*$' \
147
 
        | grep -v '\.dpkg-.*$'`" ]; then
148
 
        [ -f "${conf}" ] && . "${conf}"
 
143
    if [ -n `basename \"$conf\" | grep '^[[:alnum:]][[:alnum:]\._-]*$' \
 
144
        | grep -v '\.dpkg-.*$'` ]; then
 
145
        [ -f ${conf} ] && . ${conf}
149
146
    fi
150
147
done
151
148
export DEVICE
160
157
    if [ -x "$hook" ]; then
161
158
        # Copy any files needed by the network hook
162
159
        MANDOSNETHOOKDIR=/etc/mandos/network-hooks.d MODE=files \
163
 
            VERBOSITY=0 "$hook" files | while read -r file target; do
 
160
            VERBOSITY=0 "$hook" files | while read file target; do
164
161
            if [ ! -e "${file}" ]; then
165
162
                echo "WARNING: file ${file} not found, requested by Mandos network hook '${hook##*/}'" >&2
166
163
            fi
172
169
        done
173
170
        # Copy and load any modules needed by the network hook
174
171
        MANDOSNETHOOKDIR=/etc/mandos/network-hooks.d MODE=modules \
175
 
            VERBOSITY=0 "$hook" modules | while read -r module; do
176
 
            force_load "$module"
 
172
            VERBOSITY=0 "$hook" modules | while read module; do
 
173
            if [ -z "${target}" ]; then
 
174
                force_load "$module"
 
175
            fi
177
176
        done
178
177
    fi
179
178
done
180
179
 
181
180
# GPGME needs GnuPG
182
181
gpg=/usr/bin/gpg
183
 
libgpgme11_version="`dpkg-query --showformat='${Version}\n' --show libgpgme11t64 libgpgme11 2>/dev/null | head --lines=1`"
 
182
libgpgme11_version="`dpkg-query --showformat='${Version}' --show libgpgme11`"
184
183
if dpkg --compare-versions "$libgpgme11_version" ge 1.5.0-0.1; then
185
184
    if [ -e /usr/bin/gpgconf ]; then
186
185
        if [ ! -e "${DESTDIR}/usr/bin/gpgconf" ]; then
187
186
            copy_exec /usr/bin/gpgconf
188
187
        fi
189
188
        gpg="`/usr/bin/gpgconf|sed --quiet --expression='s/^gpg:[^:]*://p'`"
190
 
        gpgagent="`/usr/bin/gpgconf|sed --quiet --expression='s/^gpg-agent:[^:]*://p'`"
191
 
        # Newer versions of GnuPG 2 requires the gpg-agent binary
192
 
        if [ -e "$gpgagent" ] && [ ! -e "${DESTDIR}$gpgagent" ]; then
193
 
            copy_exec "$gpgagent"
194
 
        fi
195
189
    fi
196
190
elif dpkg --compare-versions "$libgpgme11_version" ge 1.4.1-0.1; then
197
191
    gpg=/usr/bin/gpg2
253
247
# initrd; it is intended to affect the initrd.img file itself, since
254
248
# it now contains secret key files.  There is, however, no other way
255
249
# to set the permission of the initrd.img file without a race
256
 
# condition.  This umask is set by "initramfs-tools-conf", installed
257
 
# as "/usr/share/initramfs-tools/conf.d/mandos-conf".)
 
250
# condition.  This umask is set by "initramfs-tools-hook-conf",
 
251
# installed as "/usr/share/initramfs-tools/conf-hooks.d/mandos".)
258
252
259
253
for full in "${MANDOSDIR}" "${CONFDIR}"; do
260
254
    while [ "$full" != "/" ]; do