/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

  • Committer: Teddy Hogeborn
  • Date: 2008-08-29 05:53:59 UTC
  • Revision ID: teddy@fukt.bsnet.se-20080829055359-wkdasnyxtylmnxus
* mandos.xml (EXAMPLE): Replaced all occurences of command name with
                        "&COMMANDNAME;".

* plugins.d/password-prompt.c (main): Improved some documentation
                                      strings.  Do perror() of
                                      tcgetattr() fails.  Add debug
                                      output if interrupted by signal.
                                      Loop over write() instead of
                                      using fwrite() when outputting
                                      password.  Add debug output if
                                      getline() returns 0, unless it
                                      was caused by a signal.  Add
                                      exit status code to debug
                                      output.

* plugins.d/password-prompt.xml: Changed all single quotes to double
                                 quotes for consistency.  Removed
                                 <?xml-stylesheet>.
  (ENTITY TIMESTAMP): New.  Automatically updated by Emacs time-stamp
                      by using Emacs local variables.
  (/refentry/refentryinfo/title): Changed to "Mandos Manual".
  (/refentry/refentryinfo/productname): Changed to "Mandos".
  (/refentry/refentryinfo/date): New; set to "&TIMESTAMP;".
  (/refentry/refentryinfo/copyright): Split copyright holders.
  (/refentry/refnamediv/refpurpose): Improved wording.
  (SYNOPSIS): Fix to use correct markup.  Add short options.
  (DESCRIPTION, OPTIONS): Improved wording.
  (OPTIONS): Improved wording.  Use more correct markup.  Document
             short options.
  (EXIT STATUS): Add text.
  (ENVIRONMENT): Document use of "cryptsource" and "crypttarget".
  (FILES): REMOVED.
  (BUGS): Add text.
  (EXAMPLE): Added some examples.
  (SECURITY): Added text.
  (SEE ALSO): Remove reference to mandos(8).  Add reference to
              crypttab(5).

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
 
30
30
. /usr/share/initramfs-tools/hook-functions
31
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
 
32
if [ -d /usr/lib/mandos ]; then
 
33
    prefix=/usr
 
34
elif [ -d /usr/local/lib/mandos ]; then
 
35
    prefix=/usr/local
 
36
else
39
37
    # Mandos not found
40
38
    exit 1
41
39
fi
42
40
 
43
 
for d in /etc/keys/mandos /etc/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
 
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"
61
 
 
62
41
# The Mandos network client uses the network
63
42
auto_add_modules net
64
43
# The Mandos network client uses IPv6
68
47
CONFDIR="/conf/conf.d/mandos"
69
48
MANDOSDIR="/lib/mandos"
70
49
PLUGINDIR="${MANDOSDIR}/plugins.d"
71
 
HOOKDIR="${MANDOSDIR}/network-hooks.d"
72
50
 
73
51
# Make directories
74
 
install --directory --mode=u=rwx,go=rx "${DESTDIR}${CONFDIR}" \
75
 
        "${DESTDIR}${MANDOSDIR}" "${DESTDIR}${HOOKDIR}"
76
 
install --owner=${mandos_user} --group=${mandos_group} --directory \
77
 
    --mode=u=rwx "${DESTDIR}${PLUGINDIR}"
 
52
mkdir --parents "${DESTDIR}${CONFDIR}"
 
53
mkdir --parents "${DESTDIR}${PLUGINDIR}"
78
54
 
79
55
# Copy the Mandos plugin runner
80
 
copy_exec "$prefix"/lib/mandos/plugin-runner "${MANDOSDIR}"
 
56
copy_exec "$prefix"/lib/mandos/plugin-runner "${DESTDIR}${MANDOSDIR}"
81
57
 
82
58
# Copy the plugins
83
59
 
89
65
        continue
90
66
    fi
91
67
    case "$base" in
92
 
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert)
93
 
            : ;;
94
 
        "*") echo "W: Mandos client plugin directory is empty." >&2 ;;
95
 
        *) copy_exec "$file" "${PLUGINDIR}" ;;
 
68
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-new|*.dpkg-divert) : ;;
 
69
        *) copy_exec "$file" "${PLUGINDIR}";;
96
70
    esac
97
71
done
98
72
 
100
74
for file in /etc/mandos/plugins.d/*; do
101
75
    base="`basename \"$file\"`"
102
76
    case "$base" in
103
 
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert)
104
 
            : ;;
105
 
        "*") : ;;
106
 
        *) copy_exec "$file" "${PLUGINDIR}" ;;
107
 
    esac
108
 
done
109
 
 
110
 
# Copy network hooks
111
 
for hook in /etc/mandos/network-hooks.d/*; do
112
 
    case "`basename \"$hook\"`" in
113
 
        "*") continue ;;
114
 
        *[!A-Za-z0-9_.-]*) continue ;;
115
 
        *) test -d "$hook" || copy_exec "$hook" "${HOOKDIR}" ;;
116
 
    esac
117
 
    if [ -x "$hook" ]; then
118
 
        # Copy any files needed by the network hook
119
 
        MANDOSNETHOOKDIR=/etc/mandos/network-hooks.d MODE=files \
120
 
            VERBOSITY=0 "$hook" files | while read file target; do
121
 
            if [ ! -e "${file}" ]; then
122
 
                echo "WARNING: file ${file} not found, requested by Mandos network hook '${hook##*/}'" >&2
123
 
            fi
124
 
            if [ -z "${target}" ]; then
125
 
                copy_exec "$file"
126
 
            else
127
 
                copy_exec "$file" "$target"
128
 
            fi
129
 
        done
130
 
        # Copy and load any modules needed by the network hook
131
 
        MANDOSNETHOOKDIR=/etc/mandos/network-hooks.d MODE=modules \
132
 
            VERBOSITY=0 "$hook" modules | while read module; do
133
 
            if [ -z "${target}" ]; then
134
 
                force_load "$module"
135
 
            fi
136
 
        done
137
 
    fi
 
77
        *~|.*|*.dpkg-old|*.dpkg-new|*.dpkg-divert) : ;;
 
78
        *) copy_exec "$file" "${PLUGINDIR}";;
 
79
    esac
138
80
done
139
81
 
140
82
# GPGME needs /usr/bin/gpg
141
 
if [ ! -e "${DESTDIR}/usr/bin/gpg" \
142
 
    -a -n "`ls \"${DESTDIR}\"/usr/lib/libgpgme.so* \
143
 
                2>/dev/null`" ]; then
 
83
if ! [ -e "${DESTDIR}/usr/bin/gpg" ] \
 
84
    && [ -n "`ls \"${DESTDIR}\"/usr/lib/libgpgme.so* 2>/dev/null`" ]; then
144
85
    copy_exec /usr/bin/gpg
145
86
fi
146
87
 
147
 
# Config files
148
 
for file in /etc/mandos/plugin-runner.conf; do
149
 
    if [ -d "$file" ]; then
150
 
        continue
151
 
    fi
152
 
    cp --archive --sparse=always "$file" "${DESTDIR}${CONFDIR}"
153
 
done
154
 
 
155
 
if [ ${mandos_user} != 65534 ]; then
156
 
    sed --in-place --expression="1i--userid=${mandos_user}" \
157
 
        "${DESTDIR}${CONFDIR}/plugin-runner.conf"
158
 
fi
159
 
 
160
 
if [ ${mandos_group} != 65534 ]; then
161
 
    sed --in-place --expression="1i--groupid=${mandos_group}" \
162
 
        "${DESTDIR}${CONFDIR}/plugin-runner.conf"
163
 
fi
164
 
 
165
88
# Key files
166
 
for file in "$keydir"/*; do
 
89
for file in /etc/mandos/*; do
167
90
    if [ -d "$file" ]; then
168
91
        continue
169
92
    fi
170
93
    cp --archive --sparse=always "$file" "${DESTDIR}${CONFDIR}"
171
 
    chown ${mandos_user}:${mandos_group} \
172
 
        "${DESTDIR}${CONFDIR}/`basename \"$file\"`"
173
94
done
 
95
# Create key ring files
 
96
gpg --no-random-seed-file --quiet --batch --no-tty --armor \
 
97
    --no-default-keyring --no-options --enable-dsa2 \
 
98
    --homedir "${DESTDIR}${CONFDIR}" --no-permission-warning \
 
99
    --trust-model always --import-options import-minimal \
 
100
    --import "${DESTDIR}${CONFDIR}/seckey.txt"
 
101
chown nobody "${DESTDIR}${CONFDIR}/secring.gpg"
174
102
 
175
103
# /lib/mandos/plugin-runner will drop priviliges, but needs access to
176
104
# its plugin directory and its config file.  However, since almost all
184
112
# condition.  This umask is set by "initramfs-tools-hook-conf",
185
113
# installed as "/usr/share/initramfs-tools/conf-hooks.d/mandos".)
186
114
187
 
for full in "${MANDOSDIR}" "${CONFDIR}"; do
 
115
for full in "${PLUGINDIR}" "${CONFDIR}"; do
188
116
    while [ "$full" != "/" ]; do
189
117
        chmod a+rX "${DESTDIR}$full"
190
118
        full="`dirname \"$full\"`"
194
122
# Reset some other things to sane permissions which we have
195
123
# inadvertently affected with our umask setting.
196
124
for dir in / /bin /etc /keyscripts /sbin /scripts /usr /usr/bin; do
197
 
    if [ -d "${DESTDIR}$dir" ]; then
198
 
        chmod a+rX "${DESTDIR}$dir"
199
 
    fi
 
125
    chmod a+rX "${DESTDIR}$dir"
200
126
done
201
 
for dir in "${DESTDIR}"/lib* "${DESTDIR}"/usr/lib*; do
202
 
    if [ -d "$dir" ]; then
203
 
        find "$dir" \! -perm -u+rw,g+r -prune -or -print0 \
204
 
            | xargs --null --no-run-if-empty chmod a+rX
205
 
    fi
 
127
for dir in /lib /usr/lib; do
 
128
    chmod --recursive a+rX "${DESTDIR}$dir"
206
129
done