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

  • Committer: Teddy Hogeborn
  • Date: 2016-03-17 20:40:55 UTC
  • mto: (237.7.594 trunk)
  • mto: This revision was merged to the branch mainline in revision 341.
  • Revision ID: teddy@recompile.se-20160317204055-bhsh5xsidq7w5cxu
Client: Fix plymouth agent; broken since 1.7.2.

Fix an very old memory bug in the plymouth agent (which has been
present since its apperance in version 1.2), but which was only
recently detected at run time due to the new -fsanitize=address
compile- time flag, which has been used since version 1.7.2.  This
detection of a memory access violation causes the program to abort,
making the Plymouth graphical boot system unable to accept interactive
input of passwords when using the Mandos client.

* plugins.d/plymouth.c (exec_and_wait): Fix memory allocation bug when
  allocating new_argv.  Also tolerate a zero-length argv.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/bin/bash -e
 
1
#!/bin/sh
2
2
# This script can be called in the following ways:
3
3
#
4
4
# After the package was installed:
15
15
# If prerm fails during replacement due to conflict:
16
16
#       <postinst> abort-remove in-favour <new-package> <version>
17
17
 
 
18
set -e
 
19
 
18
20
# Update the initial RAM file system image
19
21
update_initramfs()
20
22
{
21
 
    if [ -x /usr/sbin/update-initramfs ]; then
22
 
        update-initramfs -u -k all
 
23
    update-initramfs -u -k all
 
24
    
 
25
    if dpkg --compare-versions "$2" lt-nl "1.0.10-1"; then
 
26
        # Make old initrd.img files unreadable too, in case they were
 
27
        # created with mandos-client 1.0.8 or older.
 
28
        find /boot -maxdepth 1 -type f -name "initrd.img-*.bak" \
 
29
            -print0 | xargs --null --no-run-if-empty chmod o-r
23
30
    fi
24
31
}
25
32
 
26
33
# Add user and group
27
34
add_mandos_user(){
28
35
    # Rename old "mandos" user and group
29
 
    case "$(getent passwd mandos)" in
30
 
        *:Mandos\ password\ system,,,:/nonexistent:/bin/false)
31
 
            usermod --login _mandos mandos
32
 
            groupmod --new-name _mandos mandos
33
 
            return
34
 
            ;;
35
 
    esac
 
36
    if dpkg --compare-versions "$2" lt "1.0.3-1"; then
 
37
        case "`getent passwd mandos`" in
 
38
            *:Mandos\ password\ system,,,:/nonexistent:/bin/false)
 
39
                usermod --login _mandos mandos
 
40
                groupmod --new-name _mandos mandos
 
41
                return
 
42
                ;;
 
43
        esac
 
44
    fi
36
45
    # Create new user and group
37
46
    if ! getent passwd _mandos >/dev/null; then
38
47
        adduser --system --force-badname --quiet --home /nonexistent \
47
56
        -a -r /etc/keys/mandos/seckey.txt ]; then
48
57
        return 0
49
58
    fi
50
 
    if [ -x /usr/sbin/mandos-keygen ]; then
51
 
        mandos-keygen
52
 
    fi
 
59
    mandos-keygen
 
60
}
 
61
 
 
62
create_dh_params(){
 
63
    if [ -r /etc/keys/mandos/dhparams.pem ]; then
 
64
        return 0
 
65
    fi
 
66
    # Create a Diffe-Hellman parameters file
 
67
    DHFILE="`mktemp -t mandos-client-dh-parameters.XXXXXXXXXX.pem`"
 
68
    # First try certtool from GnuTLS
 
69
    if ! certtool --generate-dh-params --sec-param high \
 
70
         --outfile "$DHFILE"; then
 
71
        # Otherwise try OpenSSL
 
72
        if ! openssl genpkey -genparam -algorithm DH -out "$DHFILE" \
 
73
             -pkeyopt dh_paramgen_prime_len:3072; then
 
74
            # None of the commands succeded; give up
 
75
            rm -- "$DHFILE"
 
76
            return 1
 
77
        fi
 
78
    fi
 
79
    sed --in-place --expression='0,/^-----BEGIN DH PARAMETERS-----$/d' \
 
80
        "$DHFILE"
 
81
    sed --in-place --expression='1i-----BEGIN DH PARAMETERS-----' \
 
82
            "$DHFILE"
 
83
    cp --archive "$DHFILE" /etc/keys/mandos/dhparams.pem
 
84
    rm -- "$DHFILE"
53
85
}
54
86
 
55
87
case "$1" in
56
88
    configure)
57
 
        add_mandos_user
58
 
        create_key
59
 
        update_initramfs
 
89
        add_mandos_user "$@"
 
90
        create_key "$@"
 
91
        create_dh_params "$@" || :
 
92
        update_initramfs "$@"
60
93
        ;;
61
94
    abort-upgrade|abort-deconfigure|abort-remove)
62
95
        ;;
63
96
 
64
97
    *)
65
 
        echo "$0 called with unknown argument \`$1'" 1>&2
 
98
        echo "$0 called with unknown argument '$1'" 1>&2
66
99
        exit 1
67
100
        ;;
68
101
esac