/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: Björn Påhlsson
  • Date: 2008-01-18 21:18:26 UTC
  • mto: This revision was merged to the branch mainline in revision 6.
  • Revision ID: belorn@legolas-20080118211826-5rbwo54l4bwim5x2
Client:
        [Working version in initrd for booting]
        Added #ifdef DEBUG statements through out the program
        Added support to keep bouth tcp and udp up at the same time
        Catching several more error return codes that was unchecked.
        Starts the Network interface during startup.
        Added support for entering password on console
        Added error handling, like looping until a password has been received.
        Added cleanup handling so console state is always restored
                
removed:
        Old server.cpp [see next version]
        Test certificates

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
 
PREREQ="udev"
14
 
prereqs()
15
 
{
16
 
    echo "$PREREQ"
17
 
}
18
 
 
19
 
case $1 in
20
 
prereqs)
21
 
        prereqs
22
 
        exit 0
23
 
        ;;
24
 
esac
25
 
 
26
 
. /scripts/functions
27
 
 
28
 
for param in `cat /proc/cmdline`; do
29
 
    case "$param" in
30
 
        ip=*) IPOPTS="${param#ip=}" ;;
31
 
        mandos=*)
32
 
            # Split option line on commas
33
 
            old_ifs="$IFS"
34
 
            IFS="$IFS,"
35
 
            for mpar in ${param#mandos=}; do
36
 
                IFS="$old_ifs"
37
 
                case "$mpar" in
38
 
                    off) exit 0 ;;
39
 
                    connect) connect="" ;;
40
 
                    connect:*) connect="${mpar#connect:}" ;;
41
 
                    *) log_warning_msg "$0: Bad option ${mpar}" ;;
42
 
                esac
43
 
            done
44
 
            unset mpar
45
 
            IFS="$old_ifs"
46
 
            unset old_ifs
47
 
            ;;
48
 
    esac
49
 
done
50
 
unset param
51
 
 
52
 
chmod a=rwxt /tmp
53
 
 
54
 
test -r /conf/conf.d/cryptroot
55
 
test -w /conf/conf.d
56
 
 
57
 
# Get DEVICE from /conf/initramfs.conf and other files
58
 
. /conf/initramfs.conf
59
 
for conf in /conf/conf.d/*; do
60
 
    [ -f ${conf} ] && . ${conf}
61
 
done
62
 
if [ -e /conf/param.conf ]; then
63
 
    . /conf/param.conf
64
 
fi
65
 
 
66
 
# Override DEVICE from sixth field of ip= kernel option, if passed
67
 
case "$IPOPTS" in
68
 
    *:*:*:*:*:*)                # At least six fields
69
 
        # Remove the first five fields
70
 
        device="${IPOPTS#*:*:*:*:*:}"
71
 
        # Remove all fields except the first one
72
 
        DEVICE="${device%%:*}"
73
 
        ;;
74
 
esac
75
 
 
76
 
# Add device setting (if any) to plugin-runner.conf
77
 
if [ "${DEVICE+set}" = set ]; then
78
 
    # Did we get the device from an ip= option?
79
 
    if [ "${device+set}" = set ]; then
80
 
        # Let ip= option override local config; append:
81
 
        cat <<-EOF >>/conf/conf.d/mandos/plugin-runner.conf
82
 
        
83
 
        --options-for=mandos-client:--interface=${DEVICE}
84
 
EOF
85
 
    else
86
 
        # Prepend device setting so any later options would override:
87
 
        sed -i -e \
88
 
            '1i--options-for=mandos-client:--interface='"${DEVICE}" \
89
 
            /conf/conf.d/mandos/plugin-runner.conf
90
 
    fi
91
 
fi
92
 
unset device
93
 
 
94
 
# If we are connecting directly, run "configure_networking" (from
95
 
# /scripts/functions); it needs IPOPTS and DEVICE
96
 
if [ "${connect+set}" = set ]; then
97
 
    set +e                      # Required by library functions
98
 
    configure_networking
99
 
    set -e
100
 
    if [ -n "$connect" ]; then
101
 
        cat <<-EOF >>/conf/conf.d/mandos/plugin-runner.conf
102
 
        
103
 
        --options-for=mandos-client:--connect=${connect}
104
 
EOF
105
 
    fi
106
 
fi
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,key=none,keyscript=/foo/bar/baz
117
 
exec 3>/conf/conf.d/cryptroot.mandos
118
 
while read options; do
119
 
    newopts=""
120
 
    # Split option line on commas
121
 
    old_ifs="$IFS"
122
 
    IFS="$IFS,"
123
 
    for opt in $options; do
124
 
        # Find the keyscript option, if any
125
 
        case "$opt" in
126
 
            keyscript=*)
127
 
                keyscript="${opt#keyscript=}"
128
 
                newopts="$newopts,$opt"
129
 
                ;;
130
 
            "") : ;;
131
 
            *)
132
 
                newopts="$newopts,$opt"
133
 
                ;;
134
 
        esac
135
 
    done
136
 
    IFS="$old_ifs"
137
 
    unset old_ifs
138
 
    # If there was no keyscript option, add one.
139
 
    if [ -z "$keyscript" ]; then
140
 
        replace_cryptroot=yes
141
 
        newopts="$newopts,keyscript=$mandos"
142
 
    fi
143
 
    newopts="${newopts#,}"
144
 
    echo "$newopts" >&3
145
 
done < /conf/conf.d/cryptroot
146
 
exec 3>&-
147
 
 
148
 
# If we need to, replace the old cryptroot file with the new file.
149
 
if [ "$replace_cryptroot" = yes ]; then
150
 
    mv /conf/conf.d/cryptroot /conf/conf.d/cryptroot.mandos-old
151
 
    mv /conf/conf.d/cryptroot.mandos /conf/conf.d/cryptroot
152
 
else
153
 
    rm /conf/conf.d/cryptroot.mandos
154
 
fi