/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 debian/mandos-client.postinst

  • 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
 
# This script can be called in the following ways:
3
 
#
4
 
# After the package was installed:
5
 
#       <postinst> configure <old-version>
6
 
#
7
 
#
8
 
# If prerm fails during upgrade or fails on failed upgrade:
9
 
#       <old-postinst> abort-upgrade <new-version>
10
 
#
11
 
# If prerm fails during deconfiguration of a package:
12
 
#       <postinst> abort-deconfigure in-favour <new-package> <version>
13
 
#                  removing <old-package> <version>
14
 
#
15
 
# If prerm fails during replacement due to conflict:
16
 
#       <postinst> abort-remove in-favour <new-package> <version>
17
 
 
18
 
. /usr/share/debconf/confmodule
19
 
 
20
 
set -e
21
 
 
22
 
# Update the initial RAM file system image
23
 
update_initramfs()
24
 
{
25
 
    update-initramfs -u -k all
26
 
    
27
 
    if dpkg --compare-versions "$2" lt-nl "1.0.10-1"; then
28
 
        # Make old initrd.img files unreadable too, in case they were
29
 
        # created with mandos-client 1.0.8 or older.
30
 
        find /boot -maxdepth 1 -type f -name "initrd.img-*.bak" \
31
 
            -print0 | xargs --null --no-run-if-empty chmod o-r
32
 
    fi
33
 
}
34
 
 
35
 
# Add user and group
36
 
add_mandos_user(){
37
 
    # Rename old "mandos" user and group
38
 
    if dpkg --compare-versions "$2" lt "1.0.3-1"; then
39
 
        case "`getent passwd mandos`" in
40
 
            *:Mandos\ password\ system,,,:/nonexistent:/bin/false)
41
 
                usermod --login _mandos mandos
42
 
                groupmod --new-name _mandos mandos
43
 
                return
44
 
                ;;
45
 
        esac
46
 
    fi
47
 
    # Create new user and group
48
 
    if ! getent passwd _mandos >/dev/null; then
49
 
        adduser --system --force-badname --quiet --home /nonexistent \
50
 
            --no-create-home --group --disabled-password \
51
 
            --gecos "Mandos password system" _mandos
52
 
    fi
53
 
}
54
 
 
55
 
# Create client key pairs
56
 
create_keys(){
57
 
    # If the OpenPGP key files do not exist, generate all keys using
58
 
    # mandos-keygen
59
 
    if ! [ -r /etc/keys/mandos/pubkey.txt \
60
 
              -a -r /etc/keys/mandos/seckey.txt ]; then
61
 
        mandos-keygen
62
 
        gpg-connect-agent KILLAGENT /bye || :
63
 
        return 0
64
 
    fi
65
 
 
66
 
    # Remove any bad TLS keys by 1.8.0-1
67
 
    if dpkg --compare-versions "$2" eq "1.8.0-1" \
68
 
       || dpkg --compare-versions "$2" eq "1.8.0-1~bpo9+1"; then
69
 
        # Is the key bad?
70
 
        if ! certtool --password='' \
71
 
             --load-privkey=/etc/keys/mandos/tls-privkey.pem \
72
 
             --outfile=/dev/null --pubkey-info --no-text \
73
 
             2>/dev/null; then
74
 
            shred --remove -- /etc/keys/mandos/tls-privkey.pem
75
 
            rm -- /etc/keys/mandos/tls-pubkey.pem
76
 
        fi
77
 
    fi
78
 
 
79
 
    # If the TLS keys already exists, do nothing
80
 
    if [ -r /etc/keys/mandos/tls-privkey.pem \
81
 
            -a -r /etc/keys/mandos/tls-pubkey.pem ]; then
82
 
        return 0
83
 
    fi
84
 
 
85
 
    # Try to create the TLS keys
86
 
 
87
 
    TLS_PRIVKEYTMP="`mktemp -t mandos-client-privkey.XXXXXXXXXX`"
88
 
 
89
 
    if certtool --generate-privkey --password='' \
90
 
                --outfile "$TLS_PRIVKEYTMP" --sec-param ultra \
91
 
                --key-type=ed25519 --pkcs8 --no-text 2>/dev/null; then
92
 
 
93
 
        local umask=$(umask)
94
 
        umask 077
95
 
        cp --archive "$TLS_PRIVKEYTMP" /etc/keys/mandos/tls-privkey.pem
96
 
        shred --remove -- "$TLS_PRIVKEYTMP"
97
 
 
98
 
        # First try certtool from GnuTLS
99
 
        if ! certtool --password='' \
100
 
             --load-privkey=/etc/keys/mandos/tls-privkey.pem \
101
 
             --outfile=/etc/keys/mandos/tls-pubkey.pem --pubkey-info \
102
 
             --no-text 2>/dev/null; then
103
 
            # Otherwise try OpenSSL
104
 
            if ! openssl pkey -in /etc/keys/mandos/tls-privkey.pem \
105
 
                 -out /etc/keys/mandos/tls-pubkey.pem -pubout; then
106
 
                rm --force /etc/keys/mandos/tls-pubkey.pem
107
 
                # None of the commands succeded; give up
108
 
                umask $umask
109
 
                return 1
110
 
            fi
111
 
        fi
112
 
        umask $umask
113
 
 
114
 
        key_id=$(mandos-keygen --passfile=/dev/null \
115
 
                     | grep --regexp="^key_id[ =]")
116
 
 
117
 
        db_version 2.0
118
 
        db_fset mandos-client/key_id seen false
119
 
        db_reset mandos-client/key_id
120
 
        db_subst mandos-client/key_id key_id $key_id
121
 
        db_input critical mandos-client/key_id || true
122
 
        db_go
123
 
        db_stop
124
 
    else
125
 
        shred --remove -- "$TLS_PRIVKEYTMP"
126
 
    fi
127
 
}
128
 
 
129
 
create_dh_params(){
130
 
    if [ -r /etc/keys/mandos/dhparams.pem ]; then
131
 
        return 0
132
 
    fi
133
 
    # Create a Diffe-Hellman parameters file
134
 
    DHFILE="`mktemp -t mandos-client-dh-parameters.XXXXXXXXXX.pem`"
135
 
    # First try certtool from GnuTLS
136
 
    if ! certtool --generate-dh-params --sec-param high \
137
 
         --outfile "$DHFILE"; then
138
 
        # Otherwise try OpenSSL
139
 
        if ! openssl genpkey -genparam -algorithm DH -out "$DHFILE" \
140
 
             -pkeyopt dh_paramgen_prime_len:3072; then
141
 
            # None of the commands succeded; give up
142
 
            rm -- "$DHFILE"
143
 
            return 1
144
 
        fi
145
 
    fi
146
 
    sed --in-place --expression='0,/^-----BEGIN DH PARAMETERS-----$/d' \
147
 
        "$DHFILE"
148
 
    sed --in-place --expression='1i-----BEGIN DH PARAMETERS-----' \
149
 
            "$DHFILE"
150
 
    cp --archive "$DHFILE" /etc/keys/mandos/dhparams.pem
151
 
    rm -- "$DHFILE"
152
 
}
153
 
 
154
 
case "$1" in
155
 
    configure)
156
 
        add_mandos_user "$@"
157
 
        create_keys "$@"
158
 
        create_dh_params "$@" || :
159
 
        update_initramfs "$@"
160
 
        if dpkg --compare-versions "$2" lt-nl "1.7.10-1"; then
161
 
            PLUGINHELPERDIR=/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null)/mandos/plugin-helpers
162
 
            if ! dpkg-statoverride --list "$PLUGINHELPERDIR" \
163
 
                 >/dev/null 2>&1; then
164
 
                chmod u=rwx,go= -- "$PLUGINHELPERDIR"
165
 
            fi
166
 
            if ! dpkg-statoverride --list /etc/mandos/plugin-helpers \
167
 
                 >/dev/null 2>&1; then
168
 
                chmod u=rwx,go= -- /etc/mandos/plugin-helpers
169
 
            fi
170
 
        fi
171
 
        ;;
172
 
    abort-upgrade|abort-deconfigure|abort-remove)
173
 
        ;;
174
 
 
175
 
    *)
176
 
        echo "$0 called with unknown argument '$1'" 1>&2
177
 
        exit 1
178
 
        ;;
179
 
esac
180
 
 
181
 
#DEBHELPER#
182
 
 
183
 
exit 0