/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: 2024-09-09 04:24:39 UTC
  • mto: This revision was merged to the branch mainline in revision 410.
  • Revision ID: teddy@recompile.se-20240909042439-j85mr20uli2hnyis
Eliminate compiler warnings

Many programs use nested functions, which now result in a linker
warning about executable stack.  Hide this warning.  Also, rewrite a
loop in the plymouth plugin to avoid warning about signed overflow.
This change also makes the plugin pick the alphabetically first
process entry instead of the last, in case many plymouth processes are
found (which should be unlikely).

* Makefile (plugin-runner, dracut-module/password-agent,
  plugins.d/password-prompt, plugins.d/mandos-client,
  plugins.d/plymouth): New target; set LDFLAGS to add "-Xlinker
  --no-warn-execstack".
* plugins.d/plymouth.c (get_pid): When no pid files are found, and we
  are looking through the process list, go though it from the start
  instead of from the end, i.e. in normal alphabetical order and not
  in reverse order.

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
 
    update-initramfs -u -k all
 
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
26
58
    
27
59
    if dpkg --compare-versions "$2" lt-nl "1.0.10-1"; then
28
60
        # Make old initrd.img files unreadable too, in case they were
38
70
    if dpkg --compare-versions "$2" lt "1.0.3-1"; then
39
71
        case "`getent passwd mandos`" in
40
72
            *:Mandos\ password\ system,,,:/nonexistent:/bin/false)
41
 
                usermod --login _mandos mandos
42
 
                groupmod --new-name _mandos mandos
 
73
                usermod --login _mandos mandos 1>&2
 
74
                groupmod --new-name _mandos mandos 1>&2
43
75
                return
44
76
                ;;
45
77
        esac
48
80
    if ! getent passwd _mandos >/dev/null; then
49
81
        adduser --system --force-badname --quiet --home /nonexistent \
50
82
            --no-create-home --group --disabled-password \
51
 
            --gecos "Mandos password system" _mandos
 
83
            --gecos "Mandos password system" _mandos 1>&2
52
84
    fi
53
85
}
54
86
 
58
90
    # mandos-keygen
59
91
    if ! [ -r /etc/keys/mandos/pubkey.txt \
60
92
              -a -r /etc/keys/mandos/seckey.txt ]; then
61
 
        mandos-keygen
62
 
        gpg-connect-agent KILLAGENT /bye || :
 
93
        mandos-keygen 1>&2
 
94
        gpg-connect-agent KILLAGENT /bye 1>&2 || :
63
95
        return 0
64
96
    fi
65
97
 
70
102
        if ! certtool --password='' \
71
103
             --load-privkey=/etc/keys/mandos/tls-privkey.pem \
72
104
             --outfile=/dev/null --pubkey-info --no-text \
73
 
             2>/dev/null; then
 
105
              1>&2 2>/dev/null; then
74
106
            shred --remove -- /etc/keys/mandos/tls-privkey.pem \
75
107
                  2>/dev/null || :
76
108
            rm --force -- /etc/keys/mandos/tls-pubkey.pem
89
121
 
90
122
    if certtool --generate-privkey --password='' \
91
123
                --outfile "$TLS_PRIVKEYTMP" --sec-param ultra \
92
 
                --key-type=ed25519 --pkcs8 --no-text 2>/dev/null; then
 
124
                --key-type=ed25519 --pkcs8 --no-text 1>&2 \
 
125
                2>/dev/null; then
93
126
 
94
127
        local umask=$(umask)
95
128
        umask 077
100
133
        if ! certtool --password='' \
101
134
             --load-privkey=/etc/keys/mandos/tls-privkey.pem \
102
135
             --outfile=/etc/keys/mandos/tls-pubkey.pem --pubkey-info \
103
 
             --no-text 2>/dev/null; then
 
136
             --no-text 1>&2 2>/dev/null; then
104
137
            # Otherwise try OpenSSL
105
138
            if ! openssl pkey -in /etc/keys/mandos/tls-privkey.pem \
106
 
                 -out /etc/keys/mandos/tls-pubkey.pem -pubout; then
 
139
                 -out /etc/keys/mandos/tls-pubkey.pem -pubout \
 
140
                 1>&2; then
107
141
                rm --force /etc/keys/mandos/tls-pubkey.pem
108
142
                # None of the commands succeded; give up
109
143
                umask $umask
135
169
    DHFILE="`mktemp -t mandos-client-dh-parameters.XXXXXXXXXX.pem`"
136
170
    # First try certtool from GnuTLS
137
171
    if ! certtool --generate-dh-params --sec-param high \
138
 
         --outfile "$DHFILE"; then
 
172
         --outfile "$DHFILE" 1>&2; then
139
173
        # Otherwise try OpenSSL
140
174
        if ! openssl genpkey -genparam -algorithm DH -out "$DHFILE" \
141
 
             -pkeyopt dh_paramgen_prime_len:3072; then
 
175
             -pkeyopt dh_paramgen_prime_len:3072 1>&2; then
142
176
            # None of the commands succeded; give up
143
 
            rm -- "$DHFILE"
 
177
            rm --force -- "$DHFILE"
144
178
            return 1
145
179
        fi
146
180
    fi
149
183
    sed --in-place --expression='1i-----BEGIN DH PARAMETERS-----' \
150
184
            "$DHFILE"
151
185
    cp --archive "$DHFILE" /etc/keys/mandos/dhparams.pem
152
 
    rm -- "$DHFILE"
 
186
    rm --force -- "$DHFILE"
153
187
}
154
188
 
155
189
case "$1" in