bzr branch
http://bzr.recompile.se/loggerhead/mandos/trunk
| 74
by Teddy Hogeborn * Makefile (PREFIX, CONFDIR): New. | 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/local-top/mandos" which will
 | |
| 10 | # eventually be "/scripts/local-top/mandos" in the initrd.img file.
 | |
| 11 | ||
| 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="" | |
| 15 | prereqs()
 | |
| 16 | {
 | |
| 17 | echo "$PREREQ" | |
| 18 | }
 | |
| 19 | ||
| 20 | case $1 in | |
| 21 | prereqs)
 | |
| 22 |      prereqs
 | |
| 23 | exit 0 | |
| 24 | ;; | |
| 25 | esac
 | |
| 26 | ||
| 27 | test -w /conf/conf.d/cryptroot | |
| 28 | ||
| 29 | # Do not replace cryptroot file unless we need to.
 | |
| 30 | replace_cryptroot=no | |
| 31 | ||
| 32 | # Our keyscript
 | |
| 33 | mandos=/lib/mandos/plugin-runner | |
| 34 | ||
| 35 | # parse /conf/conf.d/cryptroot.  Format:
 | |
| 36 | # target=sda2_crypt,source=/dev/sda2,key=none,keyscript=/foo/bar/baz
 | |
| 37 | exec 3>/conf/conf.d/cryptroot.mandos | |
| 38 | while read options; do | |
| 39 | newopts="" | |
| 40 | # Split option line on commas | |
| 41 | old_ifs="$IFS" | |
| 42 | IFS="$IFS," | |
| 43 | for opt in $options; do | |
| 44 | # Find the keyscript option, if any | |
| 45 | case "$opt" in | |
| 46 | keyscript=*) | |
| 47 | keyscript="${opt#keyscript=}" | |
| 48 | newopts="$newopts,$opt" | |
| 49 | ;; | |
| 50 | "") : ;; | |
| 51 | *) | |
| 52 | newopts="$newopts,$opt" | |
| 53 | ;; | |
| 54 | esac | |
| 55 | done | |
| 56 | IFS="$old_ifs" | |
| 57 | unset old_ifs | |
| 58 | # If there was no keyscript option, add one. | |
| 59 | if [ -z "$keyscript" ]; then | |
| 60 | replace_cryptroot=yes | |
| 61 | newopts="$newopts,keyscript=$mandos" | |
| 62 | fi | |
| 63 | newopts="${newopts#,}" | |
| 64 | echo "$newopts" >&3 | |
| 65 | done < /conf/conf.d/cryptroot | |
| 66 | exec 3>&- | |
| 67 | ||
| 68 | # If we need to, replace the old cryptroot file with the new file.
 | |
| 69 | if [ "$replace_cryptroot" = yes ]; then | |
| 70 | mv /conf/conf.d/cryptroot /conf/conf.d/cryptroot.mandos-old | |
| 71 | mv /conf/conf.d/cryptroot.mandos /conf/conf.d/cryptroot | |
| 72 | else
 | |
| 73 | rm /conf/conf.d/cryptroot.mandos | |
| 74 | fi
 |