aboutsummaryrefslogtreecommitdiffstats
path: root/g10/passphrase.c
diff options
context:
space:
mode:
Diffstat (limited to 'g10/passphrase.c')
-rw-r--r--g10/passphrase.c74
1 files changed, 43 insertions, 31 deletions
diff --git a/g10/passphrase.c b/g10/passphrase.c
index db1080739..4dd2f836d 100644
--- a/g10/passphrase.c
+++ b/g10/passphrase.c
@@ -1,6 +1,6 @@
/* passphrase.c - Get a passphrase
- * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- * 2005 Free Software Foundation, Inc.
+ * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ * 2006 Free Software Foundation, Inc.
*
* This file is part of GnuPG.
*
@@ -937,26 +937,32 @@ passphrase_to_dek( u32 *keyid, int pubkey_algo,
goto agent_died;
pw = xstrdup ("");
}
- if( *pw && mode == 2 ) {
- char *pw2 = agent_get_passphrase ( keyid, 2, NULL, NULL, NULL,
- NULL, canceled );
- if (!pw2)
- {
- if (!opt.use_agent)
- {
- xfree (pw);
- pw = NULL;
- goto agent_died;
- }
- pw2 = xstrdup ("");
- }
- if( strcmp(pw, pw2) ) {
+ if( *pw && mode == 2 )
+ {
+ int i;
+ for(i=0;i<opt.passwd_repeat;i++)
+ {
+ char *pw2 = agent_get_passphrase ( keyid, 2, NULL, NULL, NULL,
+ NULL, canceled );
+ if (!pw2)
+ {
+ if (!opt.use_agent)
+ {
+ xfree (pw);
+ pw = NULL;
+ goto agent_died;
+ }
+ pw2 = xstrdup ("");
+ }
+ if( strcmp(pw, pw2) )
+ {
+ xfree(pw2);
+ xfree(pw);
+ return NULL;
+ }
xfree(pw2);
- xfree(pw);
- return NULL;
- }
- xfree(pw2);
- }
+ }
+ }
}
else if( fd_passwd ) {
/* Return the passphrase we have store in FD_PASSWD. */
@@ -972,17 +978,23 @@ passphrase_to_dek( u32 *keyid, int pubkey_algo,
/* Read the passphrase from the tty or the command-fd. */
pw = cpr_get_hidden("passphrase.enter", _("Enter passphrase: ") );
tty_kill_prompt();
- if( mode == 2 && !cpr_enabled() ) {
- char *pw2 = cpr_get_hidden("passphrase.repeat",
- _("Repeat passphrase: ") );
- tty_kill_prompt();
- if( strcmp(pw, pw2) ) {
+ if( mode == 2 && !cpr_enabled() )
+ {
+ int i;
+ for(i=0;i<opt.passwd_repeat;i++)
+ {
+ char *pw2 = cpr_get_hidden("passphrase.repeat",
+ _("Repeat passphrase: ") );
+ tty_kill_prompt();
+ if( strcmp(pw, pw2) )
+ {
+ xfree(pw2);
+ xfree(pw);
+ return NULL;
+ }
xfree(pw2);
- xfree(pw);
- return NULL;
- }
- xfree(pw2);
- }
+ }
+ }
}
if( !pw || !*pw )