/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-07-14 22:39:15 UTC
  • Revision ID: teddy@recompile.se-20190714223915-aqjkms3t3taa6tye
Only use sanitizing options when debugging

The C compiler's sanitizing options introduce code in the output
binary which is fragile and not very security conscious.  It has
become clear that sanitizing is only really meant for use while
debugging.

As a side effect, this makes compilation faster, as the Makefile, for
production builds, no longer runs the compiler repeatedly to find all
its currently supported sanitizing options.

* Makefile (DEBUG): Add "$(SANITIZE)".
  (SANITIZE): Comment out.
  (CFLAGS): Remove "$(SANITIZE)".
  (plugins.d/mandos-client): Revert back to use plain $(LINK.c), since
                             we no longer need to remove the leak
                             sanitizer by overriding CFLAGS.

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# If prerm fails during replacement due to conflict:
16
16
#       <postinst> abort-remove in-favour <new-package> <version>
17
17
 
 
18
. /usr/share/debconf/confmodule
 
19
 
18
20
set -e
19
21
 
20
22
# Update the initial RAM file system image
50
52
    fi
51
53
}
52
54
 
53
 
# Create client key pair
54
 
create_key(){
55
 
    if [ -r /etc/keys/mandos/pubkey.txt \
56
 
        -a -r /etc/keys/mandos/seckey.txt ]; then
57
 
        return 0
58
 
    fi
59
 
    mandos-keygen
 
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
                  2>/dev/null || :
 
76
            rm --force -- /etc/keys/mandos/tls-pubkey.pem
 
77
        fi
 
78
    fi
 
79
 
 
80
    # If the TLS keys already exists, do nothing
 
81
    if [ -r /etc/keys/mandos/tls-privkey.pem \
 
82
            -a -r /etc/keys/mandos/tls-pubkey.pem ]; then
 
83
        return 0
 
84
    fi
 
85
 
 
86
    # Try to create the TLS keys
 
87
 
 
88
    TLS_PRIVKEYTMP="`mktemp -t mandos-client-privkey.XXXXXXXXXX`"
 
89
 
 
90
    if certtool --generate-privkey --password='' \
 
91
                --outfile "$TLS_PRIVKEYTMP" --sec-param ultra \
 
92
                --key-type=ed25519 --pkcs8 --no-text 2>/dev/null; then
 
93
 
 
94
        local umask=$(umask)
 
95
        umask 077
 
96
        cp --archive "$TLS_PRIVKEYTMP" /etc/keys/mandos/tls-privkey.pem
 
97
        shred --remove -- "$TLS_PRIVKEYTMP" 2>/dev/null || :
 
98
 
 
99
        # First try certtool from GnuTLS
 
100
        if ! certtool --password='' \
 
101
             --load-privkey=/etc/keys/mandos/tls-privkey.pem \
 
102
             --outfile=/etc/keys/mandos/tls-pubkey.pem --pubkey-info \
 
103
             --no-text 2>/dev/null; then
 
104
            # Otherwise try OpenSSL
 
105
            if ! openssl pkey -in /etc/keys/mandos/tls-privkey.pem \
 
106
                 -out /etc/keys/mandos/tls-pubkey.pem -pubout; then
 
107
                rm --force /etc/keys/mandos/tls-pubkey.pem
 
108
                # None of the commands succeded; give up
 
109
                umask $umask
 
110
                return 1
 
111
            fi
 
112
        fi
 
113
        umask $umask
 
114
 
 
115
        key_id=$(mandos-keygen --passfile=/dev/null \
 
116
                     | grep --regexp="^key_id[ =]")
 
117
 
 
118
        db_version 2.0
 
119
        db_fset mandos-client/key_id seen false
 
120
        db_reset mandos-client/key_id
 
121
        db_subst mandos-client/key_id key_id $key_id
 
122
        db_input critical mandos-client/key_id || true
 
123
        db_go
 
124
        db_stop
 
125
    else
 
126
        shred --remove -- "$TLS_PRIVKEYTMP" 2>/dev/null || :
 
127
    fi
60
128
}
61
129
 
62
130
create_dh_params(){
87
155
case "$1" in
88
156
    configure)
89
157
        add_mandos_user "$@"
90
 
        create_key "$@"
 
158
        create_keys "$@"
91
159
        create_dh_params "$@" || :
92
160
        update_initramfs "$@"
 
161
        if dpkg --compare-versions "$2" lt-nl "1.7.10-1"; then
 
162
            PLUGINHELPERDIR=/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null)/mandos/plugin-helpers
 
163
            if ! dpkg-statoverride --list "$PLUGINHELPERDIR" \
 
164
                 >/dev/null 2>&1; then
 
165
                chmod u=rwx,go= -- "$PLUGINHELPERDIR"
 
166
            fi
 
167
            if ! dpkg-statoverride --list /etc/mandos/plugin-helpers \
 
168
                 >/dev/null 2>&1; then
 
169
                chmod u=rwx,go= -- /etc/mandos/plugin-helpers
 
170
            fi
 
171
        fi
93
172
        ;;
94
173
    abort-upgrade|abort-deconfigure|abort-remove)
95
174
        ;;