* options.h, gpg.c (main), passphrase.c (passphrase_to_dek): Add
authorDavid Shaw <dshaw@jabberwocky.com>
Sun, 3 Dec 2006 04:41:59 +0000 (04:41 +0000)
committerDavid Shaw <dshaw@jabberwocky.com>
Sun, 3 Dec 2006 04:41:59 +0000 (04:41 +0000)
--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
g10/gpg.c
g10/options.h
g10/passphrase.c

index 0ffc850..7741f5e 100644 (file)
@@ -1,3 +1,10 @@
+2006-12-02  David Shaw  <dshaw@jabberwocky.com>
+
+       * 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  <wk@g10code.com>
 
        * openfile.c (ask_outfile_name): Fixed buffer overflow occurring
index 391943e..dde5c6e 100644 (file)
--- 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;
index 6fd8202..530eac2 100644 (file)
@@ -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
index 744da06..ae22074 100644 (file)
@@ -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);
+           }
        }
     }