/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: 2024-09-08 17:17:22 UTC
  • Revision ID: teddy@recompile.se-20240908171722-oqkqtp0zto6ze2m6
Do not hardcode directory names; get them from pkg-config

Similarly to the directory for systemd unit files (output of
"pkg-config systemd --variable=systemdsystemunitdir"), the values of
the "tmpfilesdir" and "sysusersdir" variables should not be hardcoded
in debian/mandos.dirs and debian/mandos-client.dirs.  Fix this the
same way as with systemdsystemunitdir; i.e. remove the directories
from the .dirs files, and instead create the directories in override
rules in debian/rules.

* debian/mandos-client.dirs (usr/lib/sysusers.d): Removed.
* debian/mandos.dirs (usr/lib/tmpfiles.d, usr/lib/sysusers.d):
  Removed.
* debian/rules (override_dh_installdirs-indep): Also create
  directories for the "tmpfilesdir" and "sysusersdir" variables from
  pkg-config.
  (override_dh_installdirs-arch): New; create directory for the
  "sysusersdir" variable from pkg-config.

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
install --owner=${mandos_user} --group=${mandos_group} --directory \
 
80
        --mode=u=rwx "${DESTDIR}${PLUGINDIR}" \
79
81
        "${DESTDIR}${PLUGINHELPERDIR}"
80
 
install --owner=${mandos_user} --group=${mandos_group} --directory \
81
 
    --mode=u=rwx "${DESTDIR}${PLUGINDIR}"
 
82
 
 
83
copy_exec "$libdir"/mandos/mandos-to-cryptroot-unlock "${MANDOSDIR}"
82
84
 
83
85
# Copy the Mandos plugin runner
84
86
copy_exec "$libdir"/mandos/plugin-runner "${MANDOSDIR}"
140
142
# Get DEVICE from initramfs.conf and other files
141
143
. /etc/initramfs-tools/initramfs.conf
142
144
for conf in /etc/initramfs-tools/conf.d/*; do
143
 
    if [ -n `basename \"$conf\" | grep '^[[:alnum:]][[:alnum:]\._-]*$' \
144
 
        | grep -v '\.dpkg-.*$'` ]; then
145
 
        [ -f ${conf} ] && . ${conf}
 
145
    if [ -n "`basename \"$conf\" \
 
146
        | grep '^[[:alnum:]][[:alnum:]\._-]*$' \
 
147
        | grep -v '\.dpkg-.*$'`" ]; then
 
148
        [ -f "${conf}" ] && . "${conf}"
146
149
    fi
147
150
done
148
151
export DEVICE
157
160
    if [ -x "$hook" ]; then
158
161
        # Copy any files needed by the network hook
159
162
        MANDOSNETHOOKDIR=/etc/mandos/network-hooks.d MODE=files \
160
 
            VERBOSITY=0 "$hook" files | while read file target; do
 
163
            VERBOSITY=0 "$hook" files | while read -r file target; do
161
164
            if [ ! -e "${file}" ]; then
162
165
                echo "WARNING: file ${file} not found, requested by Mandos network hook '${hook##*/}'" >&2
163
166
            fi
169
172
        done
170
173
        # Copy and load any modules needed by the network hook
171
174
        MANDOSNETHOOKDIR=/etc/mandos/network-hooks.d MODE=modules \
172
 
            VERBOSITY=0 "$hook" modules | while read module; do
173
 
            if [ -z "${target}" ]; then
174
 
                force_load "$module"
175
 
            fi
 
175
            VERBOSITY=0 "$hook" modules | while read -r module; do
 
176
            force_load "$module"
176
177
        done
177
178
    fi
178
179
done
179
180
 
180
181
# GPGME needs GnuPG
181
182
gpg=/usr/bin/gpg
182
 
libgpgme11_version="`dpkg-query --showformat='${Version}' --show libgpgme11`"
 
183
libgpgme11_version="`dpkg-query --showformat='${Version}\n' --show libgpgme11t64 libgpgme11 2>/dev/null | head --lines=1`"
183
184
if dpkg --compare-versions "$libgpgme11_version" ge 1.5.0-0.1; then
184
185
    if [ -e /usr/bin/gpgconf ]; then
185
186
        if [ ! -e "${DESTDIR}/usr/bin/gpgconf" ]; then
186
187
            copy_exec /usr/bin/gpgconf
187
188
        fi
188
189
        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
189
195
    fi
190
196
elif dpkg --compare-versions "$libgpgme11_version" ge 1.4.1-0.1; then
191
197
    gpg=/usr/bin/gpg2
231
237
            ;;
232
238
    esac
233
239
done
 
240
# Use Diffie-Hellman parameters file if available
 
241
if [ -e "${DESTDIR}${CONFDIR}"/dhparams.pem ]; then
 
242
    sed --in-place \
 
243
        --expression="1i--options-for=mandos-client:--dh-params=${CONFDIR}/dhparams.pem" \
 
244
        "${DESTDIR}/${CONFDIR}/plugin-runner.conf"
 
245
fi
234
246
 
235
247
# /lib/mandos/plugin-runner will drop priviliges, but needs access to
236
248
# its plugin directory and its config file.  However, since almost all
241
253
# initrd; it is intended to affect the initrd.img file itself, since
242
254
# it now contains secret key files.  There is, however, no other way
243
255
# to set the permission of the initrd.img file without a race
244
 
# condition.  This umask is set by "initramfs-tools-hook-conf",
245
 
# installed as "/usr/share/initramfs-tools/conf-hooks.d/mandos".)
 
256
# condition.  This umask is set by "initramfs-tools-conf", installed
 
257
# as "/usr/share/initramfs-tools/conf.d/mandos-conf".)
246
258
247
259
for full in "${MANDOSDIR}" "${CONFDIR}"; do
248
260
    while [ "$full" != "/" ]; do
260
272
done
261
273
for dir in "${DESTDIR}"/lib* "${DESTDIR}"/usr/lib*; do
262
274
    if [ -d "$dir" ]; then
263
 
        find "$dir" \! -perm -u+rw,g+r -prune -or -print0 \
264
 
            | xargs --null --no-run-if-empty chmod a+rX
 
275
        find "$dir" \! -perm -u+rw,g+r -prune -or \! -type l -print0 \
 
276
            | xargs --null --no-run-if-empty chmod a+rX --
265
277
    fi
266
278
done