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

  • Committer: Teddy Hogeborn
  • Date: 2018-08-15 09:26:02 UTC
  • Revision ID: teddy@recompile.se-20180815092602-xoyb5s6gf8376i7u
mandos-client: Set system clock if necessary

* plugins.d/mandos-client.c (init_gpgme/import_key): If the system
  clock is not set, or set to january 1970, set the system clock to
  the more plausible value that is the mtime of the key file.  This is
  required by GnuPG to be able to import the keys.  (We can't pass the
  --ignore-time-conflict or the --ignore-valid-from options though
  GPGME.)

Show diffs side-by-side

added added

removed removed

Lines of Context:
51
51
 
52
52
chmod a=rwxt /tmp
53
53
 
 
54
test -r /conf/conf.d/cryptroot
 
55
test -w /conf/conf.d
 
56
 
54
57
# Get DEVICE from /conf/initramfs.conf and other files
55
58
. /conf/initramfs.conf
56
59
for conf in /conf/conf.d/*; do
102
105
    fi
103
106
fi
104
107
 
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
 
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
 
125
            ;;
 
126
    esac
 
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"
125
157
                ;;
126
158
        esac
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
 
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 /conf/conf.d/cryptroot.mandos
186
178
fi