From 884d1af0aec311630a18809d0c61a1a2fc5278a5 Mon Sep 17 00:00:00 2001 From: David Shaw Date: Sun, 3 Dec 2006 04:41:59 +0000 Subject: * options.h, gpg.c (main), passphrase.c (passphrase_to_dek): Add --passphrase-repeat option to control how many times gpg will re-prompt for a passphrase to ensure the user has typed it correctly. Defaults to 1. --- g10/ChangeLog | 7 +++++++ g10/gpg.c | 4 ++++ g10/options.h | 4 ++-- g10/passphrase.c | 26 +++++++++++++++----------- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/g10/ChangeLog b/g10/ChangeLog index 0ffc85094..7741f5e9c 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,3 +1,10 @@ +2006-12-02 David Shaw + + * options.h, gpg.c (main), passphrase.c (passphrase_to_dek): Add + --passphrase-repeat option to control how many times gpg will + re-prompt for a passphrase to ensure the user has typed it + correctly. Defaults to 1. + 2006-11-27 Werner Koch * openfile.c (ask_outfile_name): Fixed buffer overflow occurring diff --git a/g10/gpg.c b/g10/gpg.c index 391943ec6..dde5c6e56 100644 --- a/g10/gpg.c +++ b/g10/gpg.c @@ -211,6 +211,7 @@ enum cmd_and_opt_values oPasswd, oPasswdFD, oPasswdFile, + oPasswdRepeat, oCommandFD, oCommandFile, oQuickRandom, @@ -564,6 +565,7 @@ static ARGPARSE_OPTS opts[] = { { oPasswd, "passphrase",2, "@" }, { oPasswdFD, "passphrase-fd",1, "@" }, { oPasswdFile, "passphrase-file",2, "@" }, + { oPasswdRepeat, "passphrase-repeat", 1, "@"}, { oCommandFD, "command-fd",1, "@" }, { oCommandFile, "command-file",2, "@" }, { oQuickRandom, "debug-quick-random", 0, "@"}, @@ -1858,6 +1860,7 @@ main (int argc, char **argv ) opt.def_sig_expire="0"; opt.def_cert_expire="0"; set_homedir ( default_homedir () ); + opt.passwd_repeat=1; /* Check whether we have a config file on the command line. */ orig_argc = argc; @@ -2419,6 +2422,7 @@ main (int argc, char **argv ) case oPasswdFile: pwfd = open_info_file (pargs.r.ret_str, 0); break; + case oPasswdRepeat: opt.passwd_repeat=pargs.r.ret_int; break; case oCommandFD: opt.command_fd = iobuf_translate_file_handle (pargs.r.ret_int, 0); break; diff --git a/g10/options.h b/g10/options.h index 6fd8202fb..530eac206 100644 --- a/g10/options.h +++ b/g10/options.h @@ -239,8 +239,8 @@ struct } *auto_key_locate; /* True if multiple concatenated signatures may be verified. */ - int allow_multisig_verification; - + int allow_multisig_verification; + int passwd_repeat; } opt; /* CTRL is used to keep some global variables we currently can't diff --git a/g10/passphrase.c b/g10/passphrase.c index 744da06ba..ae22074f6 100644 --- a/g10/passphrase.c +++ b/g10/passphrase.c @@ -613,17 +613,21 @@ passphrase_to_dek (u32 *keyid, int pubkey_algo, pw = xstrdup (""); if ( *pw && mode == 2 ) { - char *pw2 = passphrase_get ( keyid, 2, NULL, NULL, NULL, - NULL, canceled ); - if (!pw2) - pw2 = xstrdup (""); - if ( strcmp(pw, pw2) ) - { - xfree(pw2); - xfree(pw); - return NULL; - } - xfree(pw2); + int i; + for(i=0;i