/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: 2008-08-02 10:48:24 UTC
  • Revision ID: teddy@fukt.bsnet.se-20080802104824-fx0miwp9o4g9r31e
* plugbasedclient.c (struct process): New fields "eof", "completed",
                                      and "status".
  (handle_sigchld): New function.
  (main): Initialize "dir" to NULL to only closedir() it if necessary.
          Move "process_list" to be a global variable to be accessible
          by "handle_sigchld".  Make "handle_sigchld" handle SIGCHLD.
          Remove redundant check for NULL "dir".  Free "filename" when
          no longer used.  Block SIGCHLD around fork()/exec().
          Restore normal signals in child.  Only loop while running
          processes exist.  Print process buffer when the process is
          done and it has emitted EOF, not when it only emits EOF.
          Remove processes from list which exit non-cleanly.  In
          cleaning up, closedir() if necessary.  Bug fix: set next
          pointer correctly when freeing process list.

* plugins.d/passprompt.c (main): Do not ignore SIGQUIT.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/bin/sh -e
2
 
3
 
# This script will run in the initrd environment at boot and edit
4
 
# /conf/conf.d/cryptroot to set /lib/mandos/plugin-runner as keyscript
5
 
# when no other keyscript is set, before cryptsetup.
6
 
7
 
 
8
 
# This script should be installed as
9
 
# "/usr/share/initramfs-tools/scripts/init-premount/mandos" which will
10
 
# eventually be "/scripts/init-premount/mandos" in the initrd.img
11
 
# file.
12
 
 
13
 
# No initramfs pre-requirements.
14
 
PREREQ="udev"
15
 
prereqs()
16
 
{
17
 
    echo "$PREREQ"
18
 
}
19
 
 
20
 
case $1 in
21
 
prereqs)
22
 
        prereqs
23
 
        exit 0
24
 
        ;;
25
 
esac
26
 
 
27
 
. /scripts/functions
28
 
 
29
 
for param in `cat /proc/cmdline`; do
30
 
    case "$param" in
31
 
        ip=*) IPOPTS="${param#ip=}" ;;
32
 
        mandos=*)
33
 
            # Split option line on commas
34
 
            old_ifs="$IFS"
35
 
            IFS="$IFS,"
36
 
            for mpar in ${param#mandos=}; do
37
 
                IFS="$old_ifs"
38
 
                case "$mpar" in
39
 
                    off) exit 0 ;;
40
 
                    connect) connect="" ;;
41
 
                    connect:*) connect="${mpar#connect:}" ;;
42
 
                    *) log_warning_msg "$0: Bad option ${mpar}" ;;
43
 
                esac
44
 
            done
45
 
            unset mpar
46
 
            IFS="$old_ifs"
47
 
            unset old_ifs
48
 
            ;;
49
 
    esac
50
 
done
51
 
unset param
52
 
 
53
 
chmod a=rwxt /tmp
54
 
 
55
 
test -r /conf/conf.d/cryptroot
56
 
test -w /conf/conf.d
57
 
 
58
 
# Get DEVICE from /conf/initramfs.conf and other files
59
 
. /conf/initramfs.conf
60
 
for conf in /conf/conf.d/*; do
61
 
    [ -f ${conf} ] && . ${conf}
62
 
done
63
 
if [ -e /conf/param.conf ]; then
64
 
    . /conf/param.conf
65
 
fi
66
 
 
67
 
# Override DEVICE from sixth field of ip= kernel option, if passed
68
 
case "$IPOPTS" in
69
 
    *:*:*:*:*:*)                # At least six fields
70
 
        # Remove the first five fields
71
 
        device="${IPOPTS#*:*:*:*:*:}"
72
 
        # Remove all fields except the first one
73
 
        DEVICE="${device%%:*}"
74
 
        ;;
75
 
esac
76
 
 
77
 
# Add device setting (if any) to plugin-runner.conf
78
 
if [ "${DEVICE+set}" = set ]; then
79
 
    # Did we get the device from an ip= option?
80
 
    if [ "${device+set}" = set ]; then
81
 
        # Let ip= option override local config; append:
82
 
        cat <<-EOF >>/conf/conf.d/mandos/plugin-runner.conf
83
 
        
84
 
        --options-for=mandos-client:--interface=${DEVICE}
85
 
EOF
86
 
    else
87
 
        # Prepend device setting so any later options would override:
88
 
        sed -i -e \
89
 
            '1i--options-for=mandos-client:--interface='"${DEVICE}" \
90
 
            /conf/conf.d/mandos/plugin-runner.conf
91
 
    fi
92
 
fi
93
 
unset device
94
 
 
95
 
# If we are connecting directly, run "configure_networking" (from
96
 
# /scripts/functions); it needs IPOPTS and DEVICE
97
 
if [ "${connect+set}" = set ]; then
98
 
    configure_networking
99
 
    if [ -n "$connect" ]; then
100
 
        cat <<-EOF >>/conf/conf.d/mandos/plugin-runner.conf
101
 
        
102
 
        --options-for=mandos-client:--connect=${connect}
103
 
EOF
104
 
    fi
105
 
fi
106
 
 
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"
131
 
                ;;
132
 
        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
152
 
fi