/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: 2021-02-03 23:10:42 UTC
  • mto: This revision was merged to the branch mainline in revision 406.
  • Revision ID: teddy@recompile.se-20210203231042-2z3egrvpo1zt7nej
mandos-ctl: Fix bad test for command.Remove and related minor issues

The test for command.Remove removes all clients from the spy server,
and then loops over all clients, looking for the corresponding Remove
command as recorded by the spy server.  But since since there aren't
any clients left after they were removed, no assertions are made, and
the test therefore does nothing.  Fix this.

In tests for command.Approve and command.Deny, add checks that clients
were not somehow removed by the command (in which case, likewise, no
assertions are made).

Add related checks to TestPropertySetterCmd.runTest; i.e. test that a
sequence is not empty before looping over it and making assertions.

* mandos-ctl (TestBaseCommands.test_Remove): Save a copy of the
  original "clients" dict, and loop over those instead.  Add assertion
  that all clients were indeed removed.  Also fix the code which looks
  for the Remove command, which now needs to actually work.
  (TestBaseCommands.test_Approve, TestBaseCommands.test_Deny): Add
  assertion that there are still clients before looping over them.
  (TestPropertySetterCmd.runTest): Add assertion that the list of
  values to get is not empty before looping over them.  Also add check
  that there are still clients before looping over clients.

Show diffs side-by-side

added added

removed removed

Lines of Context:
70
70
CONFDIR="/conf/conf.d/mandos"
71
71
MANDOSDIR="/lib/mandos"
72
72
PLUGINDIR="${MANDOSDIR}/plugins.d"
 
73
PLUGINHELPERDIR="${MANDOSDIR}/plugin-helpers"
73
74
HOOKDIR="${MANDOSDIR}/network-hooks.d"
74
75
 
75
76
# Make directories
76
77
install --directory --mode=u=rwx,go=rx "${DESTDIR}${CONFDIR}" \
77
78
        "${DESTDIR}${MANDOSDIR}" "${DESTDIR}${HOOKDIR}"
78
79
install --owner=${mandos_user} --group=${mandos_group} --directory \
79
 
    --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}"
80
84
 
81
85
# Copy the Mandos plugin runner
82
86
copy_exec "$libdir"/mandos/plugin-runner "${MANDOSDIR}"
98
102
    esac
99
103
done
100
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
 
101
120
# Copy any user-supplied plugins
102
121
for file in /etc/mandos/plugins.d/*; do
103
122
    base="`basename \"$file\"`"
109
128
    esac
110
129
done
111
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
 
112
142
# Get DEVICE from initramfs.conf and other files
113
143
. /etc/initramfs-tools/initramfs.conf
114
144
for conf in /etc/initramfs-tools/conf.d/*; do
115
 
    if [ -n `basename \"$conf\" | grep '^[[:alnum:]][[:alnum:]\._-]*$' \
116
 
        | grep -v '\.dpkg-.*$'` ]; then
117
 
        [ -f ${conf} ] && . ${conf}
 
145
    if [ -n "`basename \"$conf\" \
 
146
        | grep '^[[:alnum:]][[:alnum:]\._-]*$' \
 
147
        | grep -v '\.dpkg-.*$'`" ]; then
 
148
        [ -f "${conf}" ] && . "${conf}"
118
149
    fi
119
150
done
120
151
export DEVICE
129
160
    if [ -x "$hook" ]; then
130
161
        # Copy any files needed by the network hook
131
162
        MANDOSNETHOOKDIR=/etc/mandos/network-hooks.d MODE=files \
132
 
            VERBOSITY=0 "$hook" files | while read file target; do
 
163
            VERBOSITY=0 "$hook" files | while read -r file target; do
133
164
            if [ ! -e "${file}" ]; then
134
165
                echo "WARNING: file ${file} not found, requested by Mandos network hook '${hook##*/}'" >&2
135
166
            fi
141
172
        done
142
173
        # Copy and load any modules needed by the network hook
143
174
        MANDOSNETHOOKDIR=/etc/mandos/network-hooks.d MODE=modules \
144
 
            VERBOSITY=0 "$hook" modules | while read module; do
145
 
            if [ -z "${target}" ]; then
146
 
                force_load "$module"
147
 
            fi
 
175
            VERBOSITY=0 "$hook" modules | while read -r module; do
 
176
            force_load "$module"
148
177
        done
149
178
    fi
150
179
done
151
180
 
152
181
# GPGME needs GnuPG
 
182
gpg=/usr/bin/gpg
153
183
libgpgme11_version="`dpkg-query --showformat='${Version}' --show libgpgme11`"
154
 
if dpkg --compare-versions "$libgpgme11_version" ge 1.4.1-0.1; then
 
184
if dpkg --compare-versions "$libgpgme11_version" ge 1.5.0-0.1; then
 
185
    if [ -e /usr/bin/gpgconf ]; then
 
186
        if [ ! -e "${DESTDIR}/usr/bin/gpgconf" ]; then
 
187
            copy_exec /usr/bin/gpgconf
 
188
        fi
 
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
 
195
    fi
 
196
elif dpkg --compare-versions "$libgpgme11_version" ge 1.4.1-0.1; then
155
197
    gpg=/usr/bin/gpg2
156
 
else
157
 
    gpg=/usr/bin/gpg
158
198
fi
159
199
if [ ! -e "${DESTDIR}$gpg" ]; then
160
200
    copy_exec "$gpg"
185
225
    if [ -d "$file" ]; then
186
226
        continue
187
227
    fi
188
 
    cp --archive --sparse=always "$file" "${DESTDIR}${CONFDIR}"
189
 
    chown ${mandos_user}:${mandos_group} \
190
 
        "${DESTDIR}${CONFDIR}/`basename \"$file\"`"
 
228
    case "$file" in
 
229
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert)
 
230
            : ;;
 
231
        "*") : ;;
 
232
        *)
 
233
            cp --archive --sparse=always "$file" \
 
234
               "${DESTDIR}${CONFDIR}"
 
235
            chown ${mandos_user}:${mandos_group} \
 
236
                  "${DESTDIR}${CONFDIR}/`basename \"$file\"`"
 
237
            ;;
 
238
    esac
191
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
192
246
 
193
247
# /lib/mandos/plugin-runner will drop priviliges, but needs access to
194
248
# its plugin directory and its config file.  However, since almost all
199
253
# initrd; it is intended to affect the initrd.img file itself, since
200
254
# it now contains secret key files.  There is, however, no other way
201
255
# to set the permission of the initrd.img file without a race
202
 
# condition.  This umask is set by "initramfs-tools-hook-conf",
203
 
# 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".)
204
258
205
259
for full in "${MANDOSDIR}" "${CONFDIR}"; do
206
260
    while [ "$full" != "/" ]; do
218
272
done
219
273
for dir in "${DESTDIR}"/lib* "${DESTDIR}"/usr/lib*; do
220
274
    if [ -d "$dir" ]; then
221
 
        find "$dir" \! -perm -u+rw,g+r -prune -or -print0 \
222
 
            | 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 --
223
277
    fi
224
278
done