diff options
Diffstat (limited to '')
-rw-r--r-- | g10/ChangeLog | 7 | ||||
-rw-r--r-- | g10/gpg.c | 4 | ||||
-rw-r--r-- | g10/options.h | 4 | ||||
-rw-r--r-- | 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 <[email protected]> + + * 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 <[email protected]> * openfile.c (ask_outfile_name): Fixed buffer overflow occurring @@ -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<opt.passwd_repeat;i++) + { + 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); + } } } |