/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:
63
63
        return 0
64
64
    fi
65
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
 
66
80
    # If the TLS keys already exists, do nothing
67
81
    if [ -r /etc/keys/mandos/tls-privkey.pem \
68
82
            -a -r /etc/keys/mandos/tls-pubkey.pem ]; then
69
83
        return 0
70
84
    fi
71
85
 
72
 
    # If this is an upgrade from an old installation, the TLS keys
73
 
    # will not exist; create them.
74
 
 
75
 
    # First try certtool from GnuTLS
76
 
    if ! certtool --generate-privkey --password='' \
77
 
         --outfile /etc/keys/mandos/tls-privkey.pem \
78
 
         --sec-param ultra --key-type=ed25519 --pkcs8 --no-text \
79
 
         2>/dev/null; then
80
 
        # Otherwise try OpenSSL
81
 
        if ! openssl genpkey -algorithm X25519 \
82
 
             -out /etc/keys/mandos/tls-privkey.pem; then
83
 
            rm --force /etc/keys/mandos/tls-privkey.pem
84
 
            # None of the commands succeded; give up
85
 
            return 1
86
 
        fi
87
 
    fi
88
 
 
89
 
    local umask=$(umask)
90
 
    umask 077
91
 
    # First try certtool from GnuTLS
92
 
    if ! certtool --password='' \
93
 
         --load-privkey=/etc/keys/mandos/tls-privkey.pem \
94
 
         --outfile=/etc/keys/mandos/tls-pubkey.pem --pubkey-info \
95
 
         --no-text 2>/dev/null; then
96
 
        # Otherwise try OpenSSL
97
 
        if ! openssl pkey -in /etc/keys/mandos/tls-privkey.pem \
98
 
             -out /etc/keys/mandos/tls-pubkey.pem -pubout; then
99
 
            rm --force /etc/keys/mandos/tls-pubkey.pem
100
 
            # None of the commands succeded; give up
101
 
            umask $umask
102
 
            return 1
103
 
        fi
104
 
    fi
105
 
    umask $umask
106
 
 
107
 
    key_id=$(mandos-keygen --passfile=/dev/null \
108
 
                 | grep --regexp="^key_id[ =]")
109
 
 
110
 
    db_version 2.0
111
 
    db_fset mandos-client/key_id seen false
112
 
    db_reset mandos-client/key_id
113
 
    db_subst mandos-client/key_id key_id $key_id
114
 
    db_input critical mandos-client/key_id || true
115
 
    db_go
116
 
    db_stop
 
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
117
128
}
118
129
 
119
130
create_dh_params(){