/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: Teddy Hogeborn
  • Date: 2019-03-12 20:13:34 UTC
  • Revision ID: teddy@recompile.se-20190312201334-my3htrprewjosuw5
mandos-ctl: Refactor

* mandos-ctl: Reorder everything into logical order; put main() first,
              and put every subsequent definition as soon as possible
              after its first use, except superclasses which need to
              be placed before the classes inheriting from them.
              Reorder all tests to match.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
# Update the initial RAM file system image
23
23
update_initramfs()
24
24
{
25
 
    if command -v update-initramfs >/dev/null; then
26
 
        update-initramfs -k all -u 1>&2
27
 
    elif command -v dracut >/dev/null; then
28
 
        dracut_version="`dpkg-query --showformat='${Version}' --show dracut`"
29
 
        if dpkg --compare-versions "$dracut_version" lt 043-1 \
30
 
                && bash -c '. /etc/dracut.conf; . /etc/dracut.conf.d/*; [ "$hostonly" != yes ]'; then
31
 
            echo 'Dracut is not configured to use hostonly mode!' >&2
32
 
            return 1
33
 
        fi
34
 
        # Logic taken from dracut.postinst
35
 
        for kernel in /boot/vmlinu[xz]-*; do
36
 
            kversion="${kernel#/boot/vmlinu[xz]-}"
37
 
            # Dracut preserves old permissions of initramfs image
38
 
            # files, so we adjust permissions before creating new
39
 
            # initramfs image containing secret keys.
40
 
            if [ -e /boot/initrd.img-"$kversion" ]; then
41
 
                chmod go-r /boot/initrd.img-"$kversion"
42
 
            else
43
 
                # An initrd image has not yet been created for this
44
 
                # kernel, possibly because this new kernel is about to
45
 
                # be, but has not yet been, installed.  In this case,
46
 
                # we create an empty file with the right permissions
47
 
                # so that Dracut will preserve those permissions when
48
 
                # it creates the real, new initrd image for this
49
 
                # kernel.
50
 
                install --mode=u=rw /dev/null \
51
 
                        /boot/initrd.img-"$kversion"
52
 
            fi
53
 
            if [ "$kversion" != "*" ]; then
54
 
                /etc/kernel/postinst.d/dracut "$kversion" 1>&2
55
 
            fi
56
 
        done
57
 
    fi
 
25
    update-initramfs -u -k all
58
26
    
59
27
    if dpkg --compare-versions "$2" lt-nl "1.0.10-1"; then
60
28
        # Make old initrd.img files unreadable too, in case they were
70
38
    if dpkg --compare-versions "$2" lt "1.0.3-1"; then
71
39
        case "`getent passwd mandos`" in
72
40
            *:Mandos\ password\ system,,,:/nonexistent:/bin/false)
73
 
                usermod --login _mandos mandos 1>&2
74
 
                groupmod --new-name _mandos mandos 1>&2
 
41
                usermod --login _mandos mandos
 
42
                groupmod --new-name _mandos mandos
75
43
                return
76
44
                ;;
77
45
        esac
80
48
    if ! getent passwd _mandos >/dev/null; then
81
49
        adduser --system --force-badname --quiet --home /nonexistent \
82
50
            --no-create-home --group --disabled-password \
83
 
            --gecos "Mandos password system" _mandos 1>&2
 
51
            --gecos "Mandos password system" _mandos
84
52
    fi
85
53
}
86
54
 
90
58
    # mandos-keygen
91
59
    if ! [ -r /etc/keys/mandos/pubkey.txt \
92
60
              -a -r /etc/keys/mandos/seckey.txt ]; then
93
 
        mandos-keygen 1>&2
94
 
        gpg-connect-agent KILLAGENT /bye 1>&2 || :
 
61
        mandos-keygen
 
62
        gpg-connect-agent KILLAGENT /bye || :
95
63
        return 0
96
64
    fi
97
65
 
102
70
        if ! certtool --password='' \
103
71
             --load-privkey=/etc/keys/mandos/tls-privkey.pem \
104
72
             --outfile=/dev/null --pubkey-info --no-text \
105
 
              1>&2 2>/dev/null; then
 
73
             2>/dev/null; then
106
74
            shred --remove -- /etc/keys/mandos/tls-privkey.pem \
107
75
                  2>/dev/null || :
108
76
            rm --force -- /etc/keys/mandos/tls-pubkey.pem
121
89
 
122
90
    if certtool --generate-privkey --password='' \
123
91
                --outfile "$TLS_PRIVKEYTMP" --sec-param ultra \
124
 
                --key-type=ed25519 --pkcs8 --no-text 1>&2 \
125
 
                2>/dev/null; then
 
92
                --key-type=ed25519 --pkcs8 --no-text 2>/dev/null; then
126
93
 
127
94
        local umask=$(umask)
128
95
        umask 077
133
100
        if ! certtool --password='' \
134
101
             --load-privkey=/etc/keys/mandos/tls-privkey.pem \
135
102
             --outfile=/etc/keys/mandos/tls-pubkey.pem --pubkey-info \
136
 
             --no-text 1>&2 2>/dev/null; then
 
103
             --no-text 2>/dev/null; then
137
104
            # Otherwise try OpenSSL
138
105
            if ! openssl pkey -in /etc/keys/mandos/tls-privkey.pem \
139
 
                 -out /etc/keys/mandos/tls-pubkey.pem -pubout \
140
 
                 1>&2; then
 
106
                 -out /etc/keys/mandos/tls-pubkey.pem -pubout; then
141
107
                rm --force /etc/keys/mandos/tls-pubkey.pem
142
108
                # None of the commands succeded; give up
143
109
                umask $umask
169
135
    DHFILE="`mktemp -t mandos-client-dh-parameters.XXXXXXXXXX.pem`"
170
136
    # First try certtool from GnuTLS
171
137
    if ! certtool --generate-dh-params --sec-param high \
172
 
         --outfile "$DHFILE" 1>&2; then
 
138
         --outfile "$DHFILE"; then
173
139
        # Otherwise try OpenSSL
174
140
        if ! openssl genpkey -genparam -algorithm DH -out "$DHFILE" \
175
 
             -pkeyopt dh_paramgen_prime_len:3072 1>&2; then
 
141
             -pkeyopt dh_paramgen_prime_len:3072; then
176
142
            # None of the commands succeded; give up
177
 
            rm --force -- "$DHFILE"
 
143
            rm -- "$DHFILE"
178
144
            return 1
179
145
        fi
180
146
    fi
183
149
    sed --in-place --expression='1i-----BEGIN DH PARAMETERS-----' \
184
150
            "$DHFILE"
185
151
    cp --archive "$DHFILE" /etc/keys/mandos/dhparams.pem
186
 
    rm --force -- "$DHFILE"
 
152
    rm -- "$DHFILE"
187
153
}
188
154
 
189
155
case "$1" in