/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: 2009-04-16 01:00:35 UTC
  • Revision ID: teddy@fukt.bsnet.se-20090416010035-y7ta6ra2da4gf6mp
Minor code cleanup; one minor bug fix.

* initramfs-tools-hook: Bug fix: Use the primary group of the first
                        suitable user found, do not look for a
                        group separately.
* mandos: Unconditionally import "struct" and "fcntl".  Use unicode
          strings everywhere possible.
  (Client._datetime_to_milliseconds): New static method.
  (Client.timeout_milliseconds, Client.interval_milliseconds): Use
                                                               above
                                                               method.
  (ClientDBus.CheckedOK,
  ClientDBus.Enable, ClientDBus.StopChecker): Define normally.
  (if_nametoindex): Document non-acceptance of unicode strings.  All
                    callers adjusted.  Do not import "struct" or
                    "fcntl".  Log warning message if if_nametoindex
                    cannot be found using ctypes modules.
  (main): Bug fix: Do not look for user named "nogroup".

Show diffs side-by-side

added added

removed removed

Lines of Context:
40
40
    exit 1
41
41
fi
42
42
 
43
 
for d in /etc/keys/mandos /usr/local/lib/mandos/keys; do
 
43
for d in /etc/keys/mandos /etc/mandos/keys; do
44
44
    if [ -d "$d" ]; then
45
45
        keydir="$d"
46
46
        break
51
51
    exit 1
52
52
fi
53
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
 
54
62
# The Mandos network client uses the network
55
63
auto_add_modules net
56
64
# The Mandos network client uses IPv6
62
70
PLUGINDIR="${MANDOSDIR}/plugins.d"
63
71
 
64
72
# Make directories
65
 
mkdir --parents "${DESTDIR}${CONFDIR}"
66
 
mkdir --parents "${DESTDIR}${PLUGINDIR}"
 
73
install --directory --mode=u=rwx,go=rx "${DESTDIR}${CONFDIR}" \
 
74
        "${DESTDIR}${MANDOSDIR}"
 
75
install --owner=${mandos_user} --group=${mandos_group} --directory \
 
76
    --mode=u=rwx "${DESTDIR}${PLUGINDIR}"
67
77
 
68
78
# Copy the Mandos plugin runner
69
79
copy_exec "$prefix"/lib/mandos/plugin-runner "${MANDOSDIR}"
78
88
        continue
79
89
    fi
80
90
    case "$base" in
81
 
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-new|*.dpkg-divert) : ;;
82
 
        "*") :;;
83
 
        *) copy_exec "$file" "${PLUGINDIR}";;
 
91
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert)
 
92
            : ;;
 
93
        */"*")
 
94
            echo "W: Mandos client plugin directory is empty." >&2 ;;
 
95
        *) copy_exec "$file" "${PLUGINDIR}" ;;
84
96
    esac
85
97
done
86
98
 
88
100
for file in /etc/mandos/plugins.d/*; do
89
101
    base="`basename \"$file\"`"
90
102
    case "$base" in
91
 
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-new|*.dpkg-divert) : ;;
92
 
        "*") :;;
93
 
        *) copy_exec "$file" "${PLUGINDIR}";;
 
103
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert)
 
104
            : ;;
 
105
        */"*") : ;;
 
106
        *) copy_exec "$file" "${PLUGINDIR}" ;;
94
107
    esac
95
108
done
96
109
 
97
110
# GPGME needs /usr/bin/gpg
98
 
if ! [ -e "${DESTDIR}/usr/bin/gpg" ] \
99
 
    && [ -n "`ls \"${DESTDIR}\"/usr/lib/libgpgme.so* 2>/dev/null`" ]; then
 
111
if [ ! -e "${DESTDIR}/usr/bin/gpg" \
 
112
    -a -n "`ls \"${DESTDIR}\"/usr/lib/libgpgme.so* \
 
113
                2>/dev/null`" ]; then
100
114
    copy_exec /usr/bin/gpg
101
115
fi
102
116
 
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}"
 
117
# Config files
 
118
for file in /etc/mandos/*; do
 
119
    if [ -d "$file" ]; then
 
120
        continue
 
121
    fi
 
122
    cp --archive --sparse=always "$file" "${DESTDIR}${CONFDIR}"
 
123
done
 
124
 
 
125
if [ ${mandos_user} != 65534 ]; then
 
126
    PLUGINRUNNERCONF="${DESTDIR}${CONFDIR}/plugin-runner.conf"
 
127
    cat <<-EOF >> "$PLUGINRUNNERCONF"
 
128
        
 
129
        --userid=${mandos_user}
 
130
EOF
 
131
fi
 
132
 
 
133
if [ ${mandos_group} != 65534 ]; then
 
134
    PLUGINRUNNERCONF="${DESTDIR}${CONFDIR}/plugin-runner.conf"
 
135
    cat <<-EOF >> "$PLUGINRUNNERCONF"
 
136
        
 
137
        --groupid=${mandos_group}
 
138
EOF
 
139
fi
 
140
 
 
141
# Key files 
 
142
for file in "$keydir"/*; do
 
143
    if [ -d "$file" ]; then
 
144
        continue
 
145
    fi
 
146
    cp --archive --sparse=always "$file" "${DESTDIR}${CONFDIR}"
 
147
    chown ${mandos_user}:${mandos_group} \
 
148
        "${DESTDIR}${CONFDIR}/`basename \"$file\"`"
109
149
done
110
150
 
111
151
# /lib/mandos/plugin-runner will drop priviliges, but needs access to
120
160
# condition.  This umask is set by "initramfs-tools-hook-conf",
121
161
# installed as "/usr/share/initramfs-tools/conf-hooks.d/mandos".)
122
162
123
 
for full in "${PLUGINDIR}" "${CONFDIR}"; do
 
163
for full in "${MANDOSDIR}" "${CONFDIR}"; do
124
164
    while [ "$full" != "/" ]; do
125
165
        chmod a+rX "${DESTDIR}$full"
126
166
        full="`dirname \"$full\"`"
134
174
        chmod a+rX "${DESTDIR}$dir"
135
175
    fi
136
176
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
 
177
for dir in "${DESTDIR}"/lib* "${DESTDIR}"/usr/lib*; do
 
178
    if [ -d "$dir" ]; then
 
179
        find "$dir" \! -perm -u+rw,g+r -prune -or -print0 \
 
180
            | xargs --null --no-run-if-empty chmod a+rX
 
181
    fi
140
182
done