/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: Teddy Hogeborn
  • Date: 2011-12-31 20:07:11 UTC
  • mfrom: (535.1.9 wireless-network-hook)
  • Revision ID: teddy@recompile.se-20111231200711-6dli3r8drftem57r
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:
3
3
# This script will be run by 'mkinitramfs' when it creates the image.
4
4
# Its job is to decide which files to install, then install them into
5
5
# the staging area, where the initramfs is being created.  This
6
 
# happens when a new 'linux-image' package is installed, or when an
 
6
# happens when a new 'linux-image' package is installed, or when the
7
7
# administrator runs 'update-initramfs' by hand to update an initramfs
8
8
# image.
9
9
 
29
29
 
30
30
. /usr/share/initramfs-tools/hook-functions
31
31
 
32
 
for d in /usr/lib \
33
 
    "/usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null`" \
34
 
    "`rpm --eval='%{_libdir}' 2>/dev/null`" /usr/local/lib; do
35
 
    if [ -d "$d"/mandos ]; then
36
 
        libdir="$d"
 
32
for d in /usr /usr/local; do
 
33
    if [ -d "$d"/lib/mandos ]; then
 
34
        prefix="$d"
37
35
        break
38
36
    fi
39
37
done
40
 
if [ -z "$libdir" ]; then
 
38
if [ -z "$prefix" ]; then
41
39
    # Mandos not found
42
40
    exit 1
43
41
fi
70
68
CONFDIR="/conf/conf.d/mandos"
71
69
MANDOSDIR="/lib/mandos"
72
70
PLUGINDIR="${MANDOSDIR}/plugins.d"
73
 
PLUGINHELPERDIR="${MANDOSDIR}/plugin-helpers"
74
71
HOOKDIR="${MANDOSDIR}/network-hooks.d"
75
72
 
76
73
# Make directories
77
74
install --directory --mode=u=rwx,go=rx "${DESTDIR}${CONFDIR}" \
78
75
        "${DESTDIR}${MANDOSDIR}" "${DESTDIR}${HOOKDIR}"
79
76
install --owner=${mandos_user} --group=${mandos_group} --directory \
80
 
        --mode=u=rwx "${DESTDIR}${PLUGINDIR}" \
81
 
        "${DESTDIR}${PLUGINHELPERDIR}"
 
77
    --mode=u=rwx "${DESTDIR}${PLUGINDIR}"
82
78
 
83
79
# Copy the Mandos plugin runner
84
 
copy_exec "$libdir"/mandos/plugin-runner "${MANDOSDIR}"
 
80
copy_exec "$prefix"/lib/mandos/plugin-runner "${MANDOSDIR}"
85
81
 
86
82
# Copy the plugins
87
83
 
88
84
# Copy the packaged plugins
89
 
for file in "$libdir"/mandos/plugins.d/*; do
 
85
for file in "$prefix"/lib/mandos/plugins.d/*; do
90
86
    base="`basename \"$file\"`"
91
87
    # Is this plugin overridden?
92
88
    if [ -e "/etc/mandos/plugins.d/$base" ]; then
100
96
    esac
101
97
done
102
98
 
103
 
# Copy the packaged plugin helpers
104
 
for file in "$libdir"/mandos/plugin-helpers/*; do
105
 
    base="`basename \"$file\"`"
106
 
    # Is this plugin overridden?
107
 
    if [ -e "/etc/mandos/plugin-helpers/$base" ]; then
108
 
        continue
109
 
    fi
110
 
    case "$base" in
111
 
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert)
112
 
            : ;;
113
 
        "*") : ;;
114
 
        *) copy_exec "$file" "${PLUGINHELPERDIR}" ;;
115
 
    esac
116
 
done
117
 
 
118
99
# Copy any user-supplied plugins
119
100
for file in /etc/mandos/plugins.d/*; do
120
101
    base="`basename \"$file\"`"
126
107
    esac
127
108
done
128
109
 
129
 
# Copy any user-supplied plugin helpers
130
 
for file in /etc/mandos/plugin-helpers/*; do
131
 
    base="`basename \"$file\"`"
132
 
    case "$base" in
133
 
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert)
134
 
            : ;;
135
 
        "*") : ;;
136
 
        *) copy_exec "$file" "${PLUGINHELPERDIR}" ;;
137
 
    esac
138
 
done
139
 
 
140
110
# Get DEVICE from initramfs.conf and other files
141
111
. /etc/initramfs-tools/initramfs.conf
142
112
for conf in /etc/initramfs-tools/conf.d/*; do
143
113
    if [ -n `basename \"$conf\" | grep '^[[:alnum:]][[:alnum:]\._-]*$' \
144
114
        | grep -v '\.dpkg-.*$'` ]; then
145
 
        [ -f "${conf}" ] && . "${conf}"
 
115
        [ -f ${conf} ] && . ${conf}
146
116
    fi
147
117
done
148
118
export DEVICE
157
127
    if [ -x "$hook" ]; then
158
128
        # Copy any files needed by the network hook
159
129
        MANDOSNETHOOKDIR=/etc/mandos/network-hooks.d MODE=files \
160
 
            VERBOSITY=0 "$hook" files | while read -r file target; do
 
130
            VERBOSITY=0 "$hook" files | while read file target; do
161
131
            if [ ! -e "${file}" ]; then
162
132
                echo "WARNING: file ${file} not found, requested by Mandos network hook '${hook##*/}'" >&2
163
133
            fi
169
139
        done
170
140
        # Copy and load any modules needed by the network hook
171
141
        MANDOSNETHOOKDIR=/etc/mandos/network-hooks.d MODE=modules \
172
 
            VERBOSITY=0 "$hook" modules | while read -r module; do
173
 
            force_load "$module"
 
142
            VERBOSITY=0 "$hook" modules | while read module; do
 
143
            if [ -z "${target}" ]; then
 
144
                force_load "$module"
 
145
            fi
174
146
        done
175
147
    fi
176
148
done
177
149
 
178
 
# GPGME needs GnuPG
179
 
gpg=/usr/bin/gpg
180
 
libgpgme11_version="`dpkg-query --showformat='${Version}' --show libgpgme11`"
181
 
if dpkg --compare-versions "$libgpgme11_version" ge 1.5.0-0.1; then
182
 
    if [ -e /usr/bin/gpgconf ]; then
183
 
        if [ ! -e "${DESTDIR}/usr/bin/gpgconf" ]; then
184
 
            copy_exec /usr/bin/gpgconf
185
 
        fi
186
 
        gpg="`/usr/bin/gpgconf|sed --quiet --expression='s/^gpg:[^:]*://p'`"
187
 
        gpgagent="`/usr/bin/gpgconf|sed --quiet --expression='s/^gpg-agent:[^:]*://p'`"
188
 
        # Newer versions of GnuPG 2 requires the gpg-agent binary
189
 
        if [ -e "$gpgagent" ] && [ ! -e "${DESTDIR}$gpgagent" ]; then
190
 
            copy_exec "$gpgagent"
191
 
        fi
192
 
    fi
193
 
elif dpkg --compare-versions "$libgpgme11_version" ge 1.4.1-0.1; then
194
 
    gpg=/usr/bin/gpg2
195
 
fi
196
 
if [ ! -e "${DESTDIR}$gpg" ]; then
197
 
    copy_exec "$gpg"
198
 
fi
199
 
unset gpg
200
 
unset libgpgme11_version
 
150
# GPGME needs /usr/bin/gpg
 
151
if [ ! -e "${DESTDIR}/usr/bin/gpg" \
 
152
    -a -n "`ls \"${DESTDIR}\"/usr/lib/libgpgme.so* \
 
153
                2>/dev/null`" ]; then
 
154
    copy_exec /usr/bin/gpg
 
155
fi
201
156
 
202
157
# Config files
203
158
for file in /etc/mandos/plugin-runner.conf; do
222
177
    if [ -d "$file" ]; then
223
178
        continue
224
179
    fi
225
 
    case "$file" in
226
 
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert)
227
 
            : ;;
228
 
        "*") : ;;
229
 
        *)
230
 
            cp --archive --sparse=always "$file" \
231
 
               "${DESTDIR}${CONFDIR}"
232
 
            chown ${mandos_user}:${mandos_group} \
233
 
                  "${DESTDIR}${CONFDIR}/`basename \"$file\"`"
234
 
            ;;
235
 
    esac
 
180
    cp --archive --sparse=always "$file" "${DESTDIR}${CONFDIR}"
 
181
    chown ${mandos_user}:${mandos_group} \
 
182
        "${DESTDIR}${CONFDIR}/`basename \"$file\"`"
236
183
done
237
 
# Use Diffie-Hellman parameters file if available
238
 
if [ -e "${DESTDIR}${CONFDIR}"/dhparams.pem ]; then
239
 
    sed --in-place \
240
 
        --expression="1i--options-for=mandos-client:--dh-params=${CONFDIR}/dhparams.pem" \
241
 
        "${DESTDIR}/${CONFDIR}/plugin-runner.conf"
242
 
fi
243
184
 
244
185
# /lib/mandos/plugin-runner will drop priviliges, but needs access to
245
186
# its plugin directory and its config file.  However, since almost all
269
210
done
270
211
for dir in "${DESTDIR}"/lib* "${DESTDIR}"/usr/lib*; do
271
212
    if [ -d "$dir" ]; then
272
 
        find "$dir" \! -perm -u+rw,g+r -prune -or \! -type l -print0 \
273
 
            | xargs --null --no-run-if-empty chmod a+rX --
 
213
        find "$dir" \! -perm -u+rw,g+r -prune -or -print0 \
 
214
            | xargs --null --no-run-if-empty chmod a+rX
274
215
    fi
275
216
done