/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 mandos-keygen

  • Committer: Teddy Hogeborn
  • Date: 2011-12-31 20:07:11 UTC
  • mfrom: (535.1.9 wireless-network-hook)
  • Revision ID: teddy@recompile.se-20111231200711-6dli3r8drftem57r
Merge new wireless network hook.  Fix bridge network hook to use
hardware addresses instead of interface names.  Implement and document
new "CONNECT" environment variable for network hooks.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
3
3
# Mandos key generator - create a new OpenPGP key for a Mandos client
4
4
5
 
# Copyright © 2008,2009 Teddy Hogeborn
6
 
# Copyright © 2008,2009 Björn Påhlsson
 
5
# Copyright © 2008-2011 Teddy Hogeborn
 
6
# Copyright © 2008-2011 Björn Påhlsson
7
7
8
8
# This program is free software: you can redistribute it and/or modify
9
9
# it under the terms of the GNU General Public License as published by
18
18
# You should have received a copy of the GNU General Public License
19
19
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
20
21
 
# Contact the authors at <mandos@fukt.bsnet.se>.
 
21
# Contact the authors at <mandos@recompile.se>.
22
22
23
23
 
24
 
VERSION="1.0.14"
 
24
VERSION="1.4.1"
25
25
 
26
26
KEYDIR="/etc/keys/mandos"
27
27
KEYTYPE=DSA
192
192
shred --remove \"$RINGDIR\"/sec*;
193
193
test -n \"$BATCHFILE\" && rm --force \"$BATCHFILE\"; \
194
194
rm --recursive --force \"$RINGDIR\";
195
 
stty echo; \
 
195
tty --quiet && stty echo; \
196
196
" EXIT
197
197
 
 
198
set -e
 
199
 
198
200
umask 077
199
201
 
200
202
if [ "$mode" = keygen ]; then
278
280
    
279
281
    # Get fingerprint of key
280
282
    FINGERPRINT="`gpg --quiet --batch --no-tty --no-options \
281
 
        --enable-dsa2 --homedir '"'$RINGDIR'"' --trust-model always \
 
283
        --enable-dsa2 --homedir \"$RINGDIR\" --trust-model always \
282
284
        --fingerprint --with-colons \
283
285
        | sed --quiet \
284
286
        --expression='/^fpr:/{s/^fpr:.*:\\([0-9A-Z]*\\):\$/\\1/p;q}'`"
287
289
    
288
290
    FILECOMMENT="Encrypted password for a Mandos client"
289
291
    
290
 
    if [ -n "$PASSFILE" ]; then
291
 
        cat "$PASSFILE"
292
 
    else
293
 
        stty -echo
294
 
        echo -n "Enter passphrase: " >&2
295
 
        first="$(head --lines=1 | tr --delete '\n')"
296
 
        echo -n -e "\nRepeat passphrase: " >&2
297
 
        second="$(head --lines=1 | tr --delete '\n')"
298
 
        echo >&2
299
 
        stty echo
300
 
        if [ "$first" != "$second" ]; then
301
 
            echo -e "Passphrase mismatch" >&2
302
 
            touch "$RINGDIR"/mismatch
 
292
    while [ ! -s "$SECFILE" ]; do
 
293
        if [ -n "$PASSFILE" ]; then
 
294
            cat "$PASSFILE"
303
295
        else
304
 
            echo -n "$first"
 
296
            tty --quiet && stty -echo
 
297
            read -p "Enter passphrase: " first
 
298
            tty --quiet && echo >&2
 
299
            read -p "Repeat passphrase: " second
 
300
            if tty --quiet; then
 
301
                echo >&2
 
302
                stty echo
 
303
            fi
 
304
            if [ "$first" != "$second" ]; then
 
305
                echo "Passphrase mismatch" >&2
 
306
                touch "$RINGDIR"/mismatch
 
307
            else
 
308
                echo -n "$first"
 
309
            fi
 
310
        fi | gpg --quiet --batch --no-tty --no-options --enable-dsa2 \
 
311
            --homedir "$RINGDIR" --trust-model always --armor \
 
312
            --encrypt --sign --recipient "$FINGERPRINT" --comment \
 
313
            "$FILECOMMENT" > "$SECFILE"
 
314
        if [ -e "$RINGDIR"/mismatch ]; then
 
315
            rm --force "$RINGDIR"/mismatch
 
316
            if tty --quiet; then
 
317
                > "$SECFILE"
 
318
            else
 
319
                exit 1
 
320
            fi
305
321
        fi
306
 
    fi | gpg --quiet --batch --no-tty --no-options --enable-dsa2 \
307
 
        --homedir "$RINGDIR" --trust-model always --armor --encrypt \
308
 
        --sign --recipient "$FINGERPRINT" --comment "$FILECOMMENT" \
309
 
        > "$SECFILE"
310
 
    if [ -e "$RINGDIR"/mismatch ]; then
311
 
        rm --force "$RINGDIR"/mismatch
312
 
        exit 1
313
 
    fi
 
322
    done
314
323
    
315
324
    cat <<-EOF
316
325
        [$KEYNAME]