/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

First version of a somewhat complete D-Bus server interface.  Also
change user/group name to "_mandos".

* debian/mandos.postinst: Rename old "mandos" user and group to
                          "_mandos"; create "_mandos" user and group
                          if none exist.
* debian/mandos-client.postinst: - '' -

* initramfs-tools-hook: Try "_mandos" before "mandos" as user and
                        group name.

* mandos (_datetime_to_dbus_struct): New; was previously local.
  (Client.started): Renamed to "last_started".  All users changed.
  (Client.started): New; boolean.
  (Client.dbus_object_path): New.
  (Client.check_command): Renamed to "checker_command".  All users
                          changed.
  (Client.__init__): Set and use "self.dbus_object_path".  Set
                     "self.started".
  (Client.start): Update "self.started".  Emit "self.PropertyChanged"
                  signals for both "started" and "last_started".
  (Client.stop): Update "self.started".  Emit "self.PropertyChanged"
                 signal for "started".
  (Client.checker_callback): Take additional "command" argument.  All
                             callers changed. Emit
                             "self.PropertyChanged" signal.
  (Client.bump_timeout): Emit "self.PropertyChanged" signal for
                         "last_checked_ok".
  (Client.start_checker): Emit "self.PropertyChanged" signal for
                          "checker_running".
  (Client.stop_checker): Emit "self.PropertyChanged" signal for
                         "checker_running".
  (Client.still_valid): Bug fix: use "getattr(self, started, False)"
                        instead of "self.started" in case this client
                        object is so new that the "started" attribute
                        has not been created yet.
  (Client.IntervalChanged, Client.CheckerIsRunning, Client.GetChecker,
  Client.GetCreated, Client.GetFingerprint, Client.GetHost,
  Client.GetInterval, Client.GetName, Client.GetStarted,
  Client.GetTimeout, Client.StateChanged, Client.TimeoutChanged):
  Removed; all callers changed.
  (Client.CheckerCompleted): Add "condition" and "command" arguments.
                             All callers changed.
  (Client.GetAllProperties, Client.PropertyChanged): New.
  (Client.StillValid): Renamed to "IsStillValid".
  (Client.StartChecker): Changed to its own function to avoid the
                         return value from "Client.start_checker()".
  (Client.Stop): Changed to its own function to avoid the return value
                 from "Client.stop()".
  (main): Try "_mandos" before "mandos" as user and group name.
          Removed inner function "remove_from_clients".  New inner
          class "MandosServer".

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
7
7
 
8
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.
 
9
# "/usr/share/initramfs-tools/scripts/local-top/mandos" which will
 
10
# eventually be "/scripts/local-top/mandos" in the initrd.img file.
12
11
 
13
 
PREREQ="udev"
 
12
# No initramfs pre-requirements; we must instead run BEFORE cryptroot.
 
13
# This is not a problem, since cryptroot forces itself to run LAST.
 
14
PREREQ=""
14
15
prereqs()
15
16
{
16
 
    echo "$PREREQ"
 
17
     echo "$PREREQ"
17
18
}
18
19
 
19
20
case $1 in
20
21
prereqs)
21
 
        prereqs
22
 
        exit 0
23
 
        ;;
 
22
     prereqs
 
23
     exit 0
 
24
     ;;
24
25
esac
25
26
 
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
27
chmod a=rwxt /tmp
53
28
 
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
 
29
test -w /conf/conf.d/cryptroot
107
30
 
108
31
# Do not replace cryptroot file unless we need to.
109
32
replace_cryptroot=no
110
33
 
111
34
# Our keyscript
112
35
mandos=/lib/mandos/plugin-runner
113
 
test -x "$mandos"
114
36
 
115
37
# 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
 
 
 
38
# target=sda2_crypt,source=/dev/sda2,key=none,keyscript=/foo/bar/baz
129
39
exec 3>/conf/conf.d/cryptroot.mandos
130
 
while read -r options; do
 
40
while read options; do
131
41
    newopts=""
132
 
    keyscript=""
133
 
    changethis="$changeall"
134
42
    # Split option line on commas
135
43
    old_ifs="$IFS"
136
44
    IFS="$IFS,"
142
50
                newopts="$newopts,$opt"
143
51
                ;;
144
52
            "") : ;;
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
53
            *)
156
54
                newopts="$newopts,$opt"
157
55
                ;;
160
58
    IFS="$old_ifs"
161
59
    unset old_ifs
162
60
    # If there was no keyscript option, add one.
163
 
    if [ "$changethis" = yes ] && [ -z "$keyscript" ]; then
 
61
    if [ -z "$keyscript" ]; then
164
62
        replace_cryptroot=yes
165
63
        newopts="$newopts,keyscript=$mandos"
166
64
    fi