/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-script

  • 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:
10
10
# eventually be "/scripts/init-premount/mandos" in the initrd.img
11
11
# file.
12
12
 
13
 
# No initramfs pre-requirements.
14
13
PREREQ="udev"
15
14
prereqs()
16
15
{
52
51
 
53
52
chmod a=rwxt /tmp
54
53
 
55
 
test -r /conf/conf.d/cryptroot
56
 
test -w /conf/conf.d
57
 
 
58
54
# Get DEVICE from /conf/initramfs.conf and other files
59
55
. /conf/initramfs.conf
60
56
for conf in /conf/conf.d/*; do
61
 
    [ -f ${conf} ] && . ${conf}
 
57
    [ -f "${conf}" ] && . "${conf}"
62
58
done
63
59
if [ -e /conf/param.conf ]; then
64
60
    . /conf/param.conf
95
91
# If we are connecting directly, run "configure_networking" (from
96
92
# /scripts/functions); it needs IPOPTS and DEVICE
97
93
if [ "${connect+set}" = set ]; then
 
94
    set +e                      # Required by library functions
98
95
    configure_networking
 
96
    set -e
99
97
    if [ -n "$connect" ]; then
100
98
        cat <<-EOF >>/conf/conf.d/mandos/plugin-runner.conf
101
99
        
104
102
    fi
105
103
fi
106
104
 
107
 
# Do not replace cryptroot file unless we need to.
108
 
replace_cryptroot=no
109
 
 
110
 
# Our keyscript
111
 
mandos=/lib/mandos/plugin-runner
112
 
 
113
 
# parse /conf/conf.d/cryptroot.  Format:
114
 
# target=sda2_crypt,source=/dev/sda2,key=none,keyscript=/foo/bar/baz
115
 
exec 3>/conf/conf.d/cryptroot.mandos
116
 
while read options; do
117
 
    newopts=""
118
 
    # Split option line on commas
119
 
    old_ifs="$IFS"
120
 
    IFS="$IFS,"
121
 
    for opt in $options; do
122
 
        # Find the keyscript option, if any
123
 
        case "$opt" in
124
 
            keyscript=*)
125
 
                keyscript="${opt#keyscript=}"
126
 
                newopts="$newopts,$opt"
127
 
                ;;
128
 
            "") : ;;
129
 
            *)
130
 
                newopts="$newopts,$opt"
 
105
if [ -r /conf/conf.d/cryptroot ]; then
 
106
    test -w /conf/conf.d
 
107
 
 
108
    # Do not replace cryptroot file unless we need to.
 
109
    replace_cryptroot=no
 
110
 
 
111
    # Our keyscript
 
112
    mandos=/lib/mandos/plugin-runner
 
113
    test -x "$mandos"
 
114
 
 
115
    # parse /conf/conf.d/cryptroot.  Format:
 
116
    # target=sda2_crypt,source=/dev/sda2,rootdev,key=none,keyscript=/foo/bar/baz
 
117
    # Is the root device specially marked?
 
118
    changeall=yes
 
119
    while read -r options; do
 
120
        case "$options" in
 
121
            rootdev,*|*,rootdev,*|*,rootdev)
 
122
                # If the root device is specially marked, don't change all
 
123
                # lines in crypttab by default.
 
124
                changeall=no
131
125
                ;;
132
126
        esac
133
 
    done
134
 
    IFS="$old_ifs"
135
 
    unset old_ifs
136
 
    # If there was no keyscript option, add one.
137
 
    if [ -z "$keyscript" ]; then
138
 
        replace_cryptroot=yes
139
 
        newopts="$newopts,keyscript=$mandos"
140
 
    fi
141
 
    newopts="${newopts#,}"
142
 
    echo "$newopts" >&3
143
 
done < /conf/conf.d/cryptroot
144
 
exec 3>&-
145
 
 
146
 
# If we need to, replace the old cryptroot file with the new file.
147
 
if [ "$replace_cryptroot" = yes ]; then
148
 
    mv /conf/conf.d/cryptroot /conf/conf.d/cryptroot.mandos-old
149
 
    mv /conf/conf.d/cryptroot.mandos /conf/conf.d/cryptroot
150
 
else
151
 
    rm /conf/conf.d/cryptroot.mandos
 
127
    done < /conf/conf.d/cryptroot
 
128
 
 
129
    exec 3>/conf/conf.d/cryptroot.mandos
 
130
    while read -r options; do
 
131
        newopts=""
 
132
        keyscript=""
 
133
        changethis="$changeall"
 
134
        # Split option line on commas
 
135
        old_ifs="$IFS"
 
136
        IFS="$IFS,"
 
137
        for opt in $options; do
 
138
            # Find the keyscript option, if any
 
139
            case "$opt" in
 
140
                keyscript=*)
 
141
                    keyscript="${opt#keyscript=}"
 
142
                    newopts="$newopts,$opt"
 
143
                    ;;
 
144
                "") : ;;
 
145
                # Always use Mandos on the root device, if marked
 
146
                rootdev)
 
147
                    changethis=yes
 
148
                    newopts="$newopts,$opt"
 
149
                    ;;
 
150
                # Don't use Mandos on resume device, if marked
 
151
                resumedev)
 
152
                    changethis=no
 
153
                    newopts="$newopts,$opt"
 
154
                    ;;
 
155
                *)
 
156
                    newopts="$newopts,$opt"
 
157
                    ;;
 
158
            esac
 
159
        done
 
160
        IFS="$old_ifs"
 
161
        unset old_ifs
 
162
        # If there was no keyscript option, add one.
 
163
        if [ "$changethis" = yes ] && [ -z "$keyscript" ]; then
 
164
            replace_cryptroot=yes
 
165
            newopts="$newopts,keyscript=$mandos"
 
166
        fi
 
167
        newopts="${newopts#,}"
 
168
        echo "$newopts" >&3
 
169
    done < /conf/conf.d/cryptroot
 
170
    exec 3>&-
 
171
 
 
172
    # If we need to, replace the old cryptroot file with the new file.
 
173
    if [ "$replace_cryptroot" = yes ]; then
 
174
        mv /conf/conf.d/cryptroot /conf/conf.d/cryptroot.mandos-old
 
175
        mv /conf/conf.d/cryptroot.mandos /conf/conf.d/cryptroot
 
176
    else
 
177
        rm -f /conf/conf.d/cryptroot.mandos
 
178
    fi
 
179
elif [ -x /usr/bin/cryptroot-unlock ]; then
 
180
    # Use setsid if available
 
181
    if command -v setsid >/dev/null 2>&1; then
 
182
        setsid /lib/mandos/mandos-to-cryptroot-unlock &
 
183
    else
 
184
        /lib/mandos/mandos-to-cryptroot-unlock &
 
185
    fi
152
186
fi