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

Merge new wireless network hook.  Fix bridge network hook to use
hardware addresses instead of interface names.  Implement and document
new "CONNECT" environment variable for network hooks.

Show diffs side-by-side

added added

removed removed

Lines of Context:
51
51
    exit 1
52
52
fi
53
53
 
54
 
mandos_user="`{ getent passwd _mandos \
55
 
                || getent passwd mandos \
56
 
                || getent passwd nobody \
57
 
                || echo ::65534::::; } \
58
 
        | awk --field-separator=: '{ print $3 }'`" 
59
 
mandos_group="`{ getent group _mandos \
60
 
                || getent group mandos \
61
 
                || getent group nogroup \
62
 
                || echo ::65534:; } \
63
 
        | awk --field-separator=: '{ print $3 }'`"
 
54
set `{ getent passwd _mandos \
 
55
    || getent passwd nobody \
 
56
    || echo ::65534:65534:::; } \
 
57
    | cut --delimiter=: --fields=3,4 --only-delimited \
 
58
    --output-delimiter=" "`
 
59
mandos_user="$1"
 
60
mandos_group="$2"
64
61
 
65
62
# The Mandos network client uses the network
66
63
auto_add_modules net
71
68
CONFDIR="/conf/conf.d/mandos"
72
69
MANDOSDIR="/lib/mandos"
73
70
PLUGINDIR="${MANDOSDIR}/plugins.d"
 
71
HOOKDIR="${MANDOSDIR}/network-hooks.d"
74
72
 
75
73
# Make directories
76
74
install --directory --mode=u=rwx,go=rx "${DESTDIR}${CONFDIR}" \
77
 
        "${DESTDIR}${MANDOSDIR}"
 
75
        "${DESTDIR}${MANDOSDIR}" "${DESTDIR}${HOOKDIR}"
78
76
install --owner=${mandos_user} --group=${mandos_group} --directory \
79
77
    --mode=u=rwx "${DESTDIR}${PLUGINDIR}"
80
78
 
91
89
        continue
92
90
    fi
93
91
    case "$base" in
94
 
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert) : ;;
95
 
        "*") : ;;
 
92
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert)
 
93
            : ;;
 
94
        "*") echo "W: Mandos client plugin directory is empty." >&2 ;;
96
95
        *) copy_exec "$file" "${PLUGINDIR}" ;;
97
96
    esac
98
97
done
101
100
for file in /etc/mandos/plugins.d/*; do
102
101
    base="`basename \"$file\"`"
103
102
    case "$base" in
104
 
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert) : ;;
 
103
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert)
 
104
            : ;;
105
105
        "*") : ;;
106
106
        *) copy_exec "$file" "${PLUGINDIR}" ;;
107
107
    esac
108
108
done
109
109
 
 
110
# Get DEVICE from initramfs.conf and other files
 
111
. /etc/initramfs-tools/initramfs.conf
 
112
for conf in /etc/initramfs-tools/conf.d/*; do
 
113
    if [ -n `basename \"$conf\" | grep '^[[:alnum:]][[:alnum:]\._-]*$' \
 
114
        | grep -v '\.dpkg-.*$'` ]; then
 
115
        [ -f ${conf} ] && . ${conf}
 
116
    fi
 
117
done
 
118
export DEVICE
 
119
 
 
120
# Copy network hooks
 
121
for hook in /etc/mandos/network-hooks.d/*; do
 
122
    case "`basename \"$hook\"`" in
 
123
        "*") continue ;;
 
124
        *[!A-Za-z0-9_.-]*) continue ;;
 
125
        *) test -d "$hook" || copy_exec "$hook" "${HOOKDIR}" ;;
 
126
    esac
 
127
    if [ -x "$hook" ]; then
 
128
        # Copy any files needed by the network hook
 
129
        MANDOSNETHOOKDIR=/etc/mandos/network-hooks.d MODE=files \
 
130
            VERBOSITY=0 "$hook" files | while read file target; do
 
131
            if [ ! -e "${file}" ]; then
 
132
                echo "WARNING: file ${file} not found, requested by Mandos network hook '${hook##*/}'" >&2
 
133
            fi
 
134
            if [ -z "${target}" ]; then
 
135
                copy_exec "$file"
 
136
            else
 
137
                copy_exec "$file" "$target"
 
138
            fi
 
139
        done
 
140
        # Copy and load any modules needed by the network hook
 
141
        MANDOSNETHOOKDIR=/etc/mandos/network-hooks.d MODE=modules \
 
142
            VERBOSITY=0 "$hook" modules | while read module; do
 
143
            if [ -z "${target}" ]; then
 
144
                force_load "$module"
 
145
            fi
 
146
        done
 
147
    fi
 
148
done
 
149
 
110
150
# GPGME needs /usr/bin/gpg
111
151
if [ ! -e "${DESTDIR}/usr/bin/gpg" \
112
152
    -a -n "`ls \"${DESTDIR}\"/usr/lib/libgpgme.so* \
115
155
fi
116
156
 
117
157
# Config files
118
 
for file in /etc/mandos/*; do
 
158
for file in /etc/mandos/plugin-runner.conf; do
119
159
    if [ -d "$file" ]; then
120
160
        continue
121
161
    fi
123
163
done
124
164
 
125
165
if [ ${mandos_user} != 65534 ]; then
126
 
    PLUGINRUNNERCONF="${DESTDIR}${CONFDIR}/plugin-runner.conf"
127
 
    cat <<-EOF >> "$PLUGINRUNNERCONF"
128
 
        
129
 
        --userid=${mandos_user}
130
 
EOF
 
166
    sed --in-place --expression="1i--userid=${mandos_user}" \
 
167
        "${DESTDIR}${CONFDIR}/plugin-runner.conf"
131
168
fi
132
169
 
133
170
if [ ${mandos_group} != 65534 ]; then
134
 
    PLUGINRUNNERCONF="${DESTDIR}${CONFDIR}/plugin-runner.conf"
135
 
    cat <<-EOF >> "$PLUGINRUNNERCONF"
136
 
        
137
 
        --groupid=${mandos_group}
138
 
EOF
 
171
    sed --in-place --expression="1i--groupid=${mandos_group}" \
 
172
        "${DESTDIR}${CONFDIR}/plugin-runner.conf"
139
173
fi
140
174
 
141
 
# Key files 
 
175
# Key files
142
176
for file in "$keydir"/*; do
143
177
    if [ -d "$file" ]; then
144
178
        continue