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

  • Committer: Björn Påhlsson
  • Date: 2008-07-20 02:52:20 UTC
  • Revision ID: belorn@braxen-20080720025220-r5u0388uy9iu23h6
Added following support:
Pluginbased client handler
rewritten Mandos client
       Avahi instead of udp server discovery
       openpgp encrypted key support
Passprompt stand alone application for direct console input
Added logging for Mandos server

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/bin/sh
2
 
 
3
 
# This script will be run by 'mkinitramfs' when it creates the image.
4
 
# Its job is to decide which files to install, then install them into
5
 
# the staging area, where the initramfs is being created.  This
6
 
# happens when a new 'linux-image' package is installed, or when the
7
 
# administrator runs 'update-initramfs' by hand to update an initramfs
8
 
# image.
9
 
 
10
 
# The environment contains at least:
11
 
#
12
 
#  DESTDIR -- The staging directory where the image is being built.
13
 
 
14
 
# No initramfs pre-requirements
15
 
PREREQ="cryptroot"
16
 
 
17
 
prereqs()
18
 
{
19
 
        echo "$PREREQ"
20
 
}
21
 
 
22
 
case $1 in
23
 
# get pre-requisites
24
 
prereqs)
25
 
        prereqs
26
 
        exit 0
27
 
        ;;
28
 
esac
29
 
 
30
 
. /usr/share/initramfs-tools/hook-functions
31
 
 
32
 
for d in /usr /usr/local; do
33
 
    if [ -d "$d"/lib/mandos ]; then
34
 
        prefix="$d"
35
 
        break
36
 
    fi
37
 
done
38
 
if [ -z "$prefix" ]; then
39
 
    # Mandos not found
40
 
    exit 1
41
 
fi
42
 
 
43
 
for d in /etc/keys/mandos /usr/local/lib/mandos/keys; do
44
 
    if [ -d "$d" ]; then
45
 
        keydir="$d"
46
 
        break
47
 
    fi
48
 
done
49
 
if [ -z "$keydir" ]; then
50
 
    # Mandos key directory not found
51
 
    exit 1
52
 
fi
53
 
 
54
 
# The Mandos network client uses the network
55
 
auto_add_modules net
56
 
# The Mandos network client uses IPv6
57
 
force_load ipv6
58
 
 
59
 
# These are directories inside the initrd
60
 
CONFDIR="/conf/conf.d/mandos"
61
 
MANDOSDIR="/lib/mandos"
62
 
PLUGINDIR="${MANDOSDIR}/plugins.d"
63
 
 
64
 
# Make directories
65
 
mkdir --parents "${DESTDIR}${CONFDIR}"
66
 
mkdir --parents "${DESTDIR}${PLUGINDIR}"
67
 
 
68
 
# Copy the Mandos plugin runner
69
 
copy_exec "$prefix"/lib/mandos/plugin-runner "${MANDOSDIR}"
70
 
 
71
 
# Copy the plugins
72
 
 
73
 
# Copy the packaged plugins
74
 
for file in "$prefix"/lib/mandos/plugins.d/*; do
75
 
    base="`basename \"$file\"`"
76
 
    # Is this plugin overridden?
77
 
    if [ -e "/etc/mandos/plugins.d/$base" ]; then
78
 
        continue
79
 
    fi
80
 
    case "$base" in
81
 
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-new|*.dpkg-divert) : ;;
82
 
        "*") :;;
83
 
        *) copy_exec "$file" "${PLUGINDIR}";;
84
 
    esac
85
 
done
86
 
 
87
 
# Copy any user-supplied plugins
88
 
for file in /etc/mandos/plugins.d/*; do
89
 
    base="`basename \"$file\"`"
90
 
    case "$base" in
91
 
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-new|*.dpkg-divert) : ;;
92
 
        "*") :;;
93
 
        *) copy_exec "$file" "${PLUGINDIR}";;
94
 
    esac
95
 
done
96
 
 
97
 
# GPGME needs /usr/bin/gpg
98
 
if ! [ -e "${DESTDIR}/usr/bin/gpg" ] \
99
 
    && [ -n "`ls \"${DESTDIR}\"/usr/lib/libgpgme.so* 2>/dev/null`" ]; then
100
 
    copy_exec /usr/bin/gpg
101
 
fi
102
 
 
103
 
# Config files and key files 
104
 
for file in /etc/mandos/* "$keydir"/*; do
105
 
    if [ -d "$file" ]; then
106
 
        continue
107
 
    fi
108
 
    cp --archive --sparse=always "$file" "${DESTDIR}${CONFDIR}"
109
 
done
110
 
 
111
 
# /lib/mandos/plugin-runner will drop priviliges, but needs access to
112
 
# its plugin directory and its config file.  However, since almost all
113
 
# files in initrd have been created with umask 027, this opening of
114
 
# permissions is needed.
115
 
116
 
# (The umask is not really intended to affect the files inside the
117
 
# initrd; it is intended to affect the initrd.img file itself, since
118
 
# it now contains secret key files.  There is, however, no other way
119
 
# to set the permission of the initrd.img file without a race
120
 
# condition.  This umask is set by "initramfs-tools-hook-conf",
121
 
# installed as "/usr/share/initramfs-tools/conf-hooks.d/mandos".)
122
 
123
 
for full in "${PLUGINDIR}" "${CONFDIR}"; do
124
 
    while [ "$full" != "/" ]; do
125
 
        chmod a+rX "${DESTDIR}$full"
126
 
        full="`dirname \"$full\"`"
127
 
    done
128
 
done
129
 
 
130
 
# Reset some other things to sane permissions which we have
131
 
# inadvertently affected with our umask setting.
132
 
for dir in / /bin /etc /keyscripts /sbin /scripts /usr /usr/bin; do
133
 
    if [ -d "${DESTDIR}$dir" ]; then
134
 
        chmod a+rX "${DESTDIR}$dir"
135
 
    fi
136
 
done
137
 
for dir in /lib /usr/lib; do
138
 
    find "${DESTDIR}$dir" \! -perm /u+rw,g+r -prune -o -print0 \
139
 
        | xargs --null --no-run-if-empty chmod a+rX
140
 
done