Properly close files opened by es_fopen.

Allow setting of an empty passphrase.
Assorted W32 changes.
This commit is contained in:
Werner Koch 2007-07-16 09:53:47 +00:00
parent 5f97dd2c44
commit bce4ea798a
9 changed files with 65 additions and 23 deletions

View File

@ -1,3 +1,10 @@
2007-07-13 Werner Koch <wk@g10code.com>
* genkey.c (check_passphrase_constraints): Require a confirmation
for an empty passphrase.
(agent_genkey, agent_protect_and_store): No need to repeat an
empty passphrase.
2007-07-05 Werner Koch <wk@g10code.com> 2007-07-05 Werner Koch <wk@g10code.com>
* call-scd.c (struct inq_needpin_s): New. * call-scd.c (struct inq_needpin_s): New.
@ -89,7 +96,7 @@
* protect-tool.c (main) [W32]: Call pth_init. * protect-tool.c (main) [W32]: Call pth_init.
* preset-passphrase.c (main) [W32]: Repalce the explicit Winsocket * preset-passphrase.c (main) [W32]: Replace the explicit Winsocket
init by a call to pth_init. init by a call to pth_init.
* trustlist.c (initialize_module_trustlist): New. * trustlist.c (initialize_module_trustlist): New.

View File

@ -206,12 +206,22 @@ start_pinentry (ctrl_t ctrl)
if (opt.verbose) if (opt.verbose)
log_info ("starting a new PIN Entry\n"); log_info ("starting a new PIN Entry\n");
#ifdef HAVE_W32_SYSTEM
fflush (stdout);
fflush (stderr);
#endif
if (fflush (NULL)) if (fflush (NULL))
{ {
gpg_error_t tmperr = gpg_error (gpg_err_code_from_errno (errno)); gpg_error_t tmperr = gpg_error (gpg_err_code_from_errno (errno));
log_error ("error flushing pending output: %s\n", strerror (errno)); log_error ("error flushing pending output: %s\n", strerror (errno));
/* At least Windows XP fails here with EBADF. According to docs
and Wine an fflush(NULL) is the same as _flushall. However
the Wime implementaion does not flush stdin,stdout and stderr
- see above. Lets try to ignore the error. */
#ifndef HAVE_W32_SYSTEM
return unlock_pinentry (tmperr); return unlock_pinentry (tmperr);
#endif
} }
if (!opt.pinentry_program || !*opt.pinentry_program) if (!opt.pinentry_program || !*opt.pinentry_program)

View File

@ -1,5 +1,5 @@
/* pksign.c - Generate a keypair /* pksign.c - Generate a keypair
* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. * Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
* *
* This file is part of GnuPG. * This file is part of GnuPG.
* *
@ -102,6 +102,20 @@ check_passphrase_constraints (ctrl_t ctrl, const char *pw)
return err; return err;
} }
if (!*pw)
{
const char *desc = _("You have not entered a passphrase - "
"this is in general a bad idea!%0A"
"Please confirm that you do not want to "
"have any protection on your key.");
err = agent_get_confirmation (ctrl, desc,
_("Yes, protection is not needed"),
_("Enter new passphrase"));
if (err)
return err;
}
return 0; return 0;
} }
@ -166,12 +180,15 @@ agent_genkey (ctrl_t ctrl, const char *keyparam, size_t keyparamlen,
pi2->failed_tries = 0; pi2->failed_tries = 0;
goto next_try; goto next_try;
} }
rc = agent_askpin (ctrl, text2, NULL, NULL, pi2); if (pi->pin && *pi->pin)
if (rc == -1) {
{ /* The re-entered one did not match and the user did not rc = agent_askpin (ctrl, text2, NULL, NULL, pi2);
hit cancel. */ if (rc == -1)
initial_errtext = _("does not match - try again"); { /* The re-entered one did not match and the user did not
goto next_try; hit cancel. */
initial_errtext = _("does not match - try again");
goto next_try;
}
} }
} }
if (rc) if (rc)
@ -284,12 +301,16 @@ agent_protect_and_store (ctrl_t ctrl, gcry_sexp_t s_skey)
pi2->failed_tries = 0; pi2->failed_tries = 0;
goto next_try; goto next_try;
} }
rc = agent_askpin (ctrl, text2, NULL, NULL, pi2); /* Unless the passphrase is empty, ask to confirm it. */
if (rc == -1) if (pi->pin && *pi->pin)
{ /* The re-entered one did not match and the user did not {
hit cancel. */ rc = agent_askpin (ctrl, text2, NULL, NULL, pi2);
initial_errtext = _("does not match - try again"); if (rc == -1)
goto next_try; { /* The re-entered one did not match and the user did not
hit cancel. */
initial_errtext = _("does not match - try again");
goto next_try;
}
} }
} }
if (rc) if (rc)

View File

@ -1,3 +1,7 @@
2007-07-16 Werner Koch <wk@g10code.com>
* estream.c (es_func_file_create): Clear NO_CLOSE flag.
2007-07-12 Werner Koch <wk@g10code.com> 2007-07-12 Werner Koch <wk@g10code.com>
* sysutils.h (gnupg_fd_t): New. * sysutils.h (gnupg_fd_t): New.

View File

@ -861,6 +861,7 @@ es_func_file_create (void **cookie, int *filedes,
#endif #endif
file_cookie->fd = fd; file_cookie->fd = fd;
file_cookie->no_close = 0;
*cookie = file_cookie; *cookie = file_cookie;
*filedes = fd; *filedes = fd;

View File

@ -358,10 +358,7 @@ gnupg_spawn_process (const char *pgmname, const char *argv[],
if (x == -1) if (x == -1)
log_error ("failed to translate osfhandle %p\n", (void*)rp[0] ); log_error ("failed to translate osfhandle %p\n", (void*)rp[0] );
else else
{ *statusfile = fdopen (x, "r");
log_debug ("_open_osfhandle %p yields %d\n", (void*)fd, x );
*statusfile = fdopen (x, "r");
}
} }
if (!*statusfile) if (!*statusfile)
{ {

View File

@ -327,9 +327,6 @@ agent_open (int *rfd)
{ {
#ifdef SPWQ_USE_LOGGING #ifdef SPWQ_USE_LOGGING
log_error ( _("malformed GPG_AGENT_INFO environment variable\n")); log_error ( _("malformed GPG_AGENT_INFO environment variable\n"));
log_debug ( "a='%s'\n", infostr);
log_debug ( "a='%s'\n", strchr ( infostr, PATHSEP_C));
log_debug ( "a=%td\n", (p-infostr));
#endif #endif
return SPWQ_NO_AGENT; return SPWQ_NO_AGENT;
} }

View File

@ -1,3 +1,8 @@
2007-07-16 Werner Koch <wk@g10code.com>
* server.c (cmd_message): Use gnupg_fd_t to avoid dependecy on
newer assuan versions.
2007-07-12 Werner Koch <wk@g10code.com> 2007-07-12 Werner Koch <wk@g10code.com>
* gpgsm.c (check_special_filename): Use translate_sys2libc_fd_int * gpgsm.c (check_special_filename): Use translate_sys2libc_fd_int

View File

@ -734,7 +734,7 @@ static int
cmd_message (assuan_context_t ctx, char *line) cmd_message (assuan_context_t ctx, char *line)
{ {
int rc; int rc;
assuan_fd_t sysfd; gnupg_fd_t sysfd;
int fd; int fd;
ctrl_t ctrl = assuan_get_pointer (ctx); ctrl_t ctrl = assuan_get_pointer (ctx);