Minor fixes.

This commit is contained in:
Werner Koch 2008-12-09 08:58:02 +00:00
parent 78ff45c49e
commit 382d2f8efb
23 changed files with 106 additions and 54 deletions

3
NEWS
View File

@ -41,7 +41,8 @@ Noteworthy changes in version 2.0.10 (unreleased)
* [w32] Fixed a race condition bteween gpg and gpgsm in the use of * [w32] Fixed a race condition bteween gpg and gpgsm in the use of
temporary file names. temporary file names.
* The gpg-preset-passphrase mechanism works again. * The gpg-preset-passphrase mechanism works again. An arbitrary
string may now be used for a custom cache ID.
* Admin PINs are cached again (bug in 2.0.9). * Admin PINs are cached again (bug in 2.0.9).

View File

@ -1,3 +1,12 @@
2008-12-09 Werner Koch <wk@g10code.com>
* gpg-agent.c (main): Call i18n_init before init_common_subsystems.
* preset-passphrase.c (main): Ditto.
* protect-tool.c (main): Ditto.
* command.c (cmd_preset_passphrase): Allow an arbitrary string for
the cache id.
2008-12-08 Werner Koch <wk@g10code.com> 2008-12-08 Werner Koch <wk@g10code.com>
* gpg-agent.c (handle_connections): Sync the ticker to the next * gpg-agent.c (handle_connections): Sync the ticker to the next

View File

@ -1093,7 +1093,7 @@ cmd_passwd (assuan_context_t ctx, char *line)
return rc; return rc;
} }
/* PRESET_PASSPHRASE <hexstring_with_keygrip> <timeout> <hexstring> /* PRESET_PASSPHRASE <string_or_keygrip> <timeout> <hexstring>
Set the cached passphrase/PIN for the key identified by the keygrip Set the cached passphrase/PIN for the key identified by the keygrip
to passwd for the given time, where -1 means infinite and 0 means to passwd for the given time, where -1 means infinite and 0 means
@ -1104,7 +1104,6 @@ static int
cmd_preset_passphrase (assuan_context_t ctx, char *line) cmd_preset_passphrase (assuan_context_t ctx, char *line)
{ {
int rc; int rc;
unsigned char grip[20];
char *grip_clear = NULL; char *grip_clear = NULL;
char *passphrase = NULL; char *passphrase = NULL;
int ttl; int ttl;
@ -1113,11 +1112,6 @@ cmd_preset_passphrase (assuan_context_t ctx, char *line)
if (!opt.allow_preset_passphrase) if (!opt.allow_preset_passphrase)
return set_error (GPG_ERR_NOT_SUPPORTED, "no --allow-preset-passphrase"); return set_error (GPG_ERR_NOT_SUPPORTED, "no --allow-preset-passphrase");
rc = parse_keygrip (ctx, line, grip);
if (rc)
return rc;
/* FIXME: parse_keygrip should return a tail pointer. */
grip_clear = line; grip_clear = line;
while (*line && (*line != ' ' && *line != '\t')) while (*line && (*line != ' ' && *line != '\t'))
line++; line++;

View File

@ -535,9 +535,9 @@ main (int argc, char **argv )
log_set_prefix ("gpg-agent", JNLIB_LOG_WITH_PREFIX|JNLIB_LOG_WITH_PID); log_set_prefix ("gpg-agent", JNLIB_LOG_WITH_PREFIX|JNLIB_LOG_WITH_PID);
/* Make sure that our subsystems are ready. */ /* Make sure that our subsystems are ready. */
i18n_init ();
init_common_subsystems (); init_common_subsystems ();
i18n_init ();
/* Libgcrypt requires us to register the threading model first. /* Libgcrypt requires us to register the threading model first.
Note that this will also do the pth_init. */ Note that this will also do the pth_init. */

View File

@ -209,9 +209,8 @@ main (int argc, char **argv)
log_set_prefix ("gpg-preset-passphrase", 1); log_set_prefix ("gpg-preset-passphrase", 1);
/* Make sure that our subsystems are ready. */ /* Make sure that our subsystems are ready. */
init_common_subsystems ();
i18n_init (); i18n_init ();
init_common_subsystems ();
opt_homedir = default_homedir (); opt_homedir = default_homedir ();

View File

@ -1059,9 +1059,8 @@ main (int argc, char **argv )
log_set_prefix ("gpg-protect-tool", 1); log_set_prefix ("gpg-protect-tool", 1);
/* Make sure that our subsystems are ready. */ /* Make sure that our subsystems are ready. */
init_common_subsystems ();
i18n_init (); i18n_init ();
init_common_subsystems ();
if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) ) if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) )
{ {

View File

@ -979,7 +979,7 @@ which will be printed to stdout.
.B gpg-preset-passphrase .B gpg-preset-passphrase
.RI [ options ] .RI [ options ]
.RI [ command ] .RI [ command ]
.I keygrip .I cache-id
@end ifset @end ifset
@mansect description @mansect description
@ -1009,14 +1009,19 @@ starting @command{gpg-agent} with the
@command{gpg-preset-passphrase} is invoked this way: @command{gpg-preset-passphrase} is invoked this way:
@example @example
gpg-preset-passphrase [options] [command] @var{keygrip} gpg-preset-passphrase [options] [command] @var{cacheid}
@end example @end example
@var{keygrip} is a 40 character string of hexadecimal characters @var{cacheid} is either a 40 character keygrip of hexadecimal
identifying the key for which the passphrase should be set or cleared. characters identifying the key for which the passphrase should be set
This keygrip is listed along with the key when running the command: or cleared. The keygrip is listed along with the key when running the
@code{gpgsm --dump-secret-keys}. One of the following command options command: @code{gpgsm --dump-secret-keys}. Alternatively an arbitrary
must be given: string may be used to identify a passphrase; it is suggested that such
a string is prefixed with the name of the application (e.g
@code{foo:12346}).
@noindent
One of the following command options must be given:
@table @gnupgtabopt @table @gnupgtabopt
@item --preset @item --preset
@ -1027,7 +1032,7 @@ use. @command{gpg-preset-passphrase} will then read the passphrase from
@item --forget @item --forget
@opindex forget @opindex forget
Flush the passphrase for the given keygrip from the cache. Flush the passphrase for the given cache ID from the cache.
@end table @end table

View File

@ -1,3 +1,15 @@
2008-12-09 Werner Koch <wk@g10code.com>
* gpg.c (open_info_file): Add arg BINARY and adjust callers.
* gpg.c (main): Call i18n_init before init_common_subsystems.
* gpgv.c (main): Ditto.
* keylist.c (set_attrib_fd): Do not close ATTRIB_FP if it is the
log stream.
(set_attrib_fd) [W32]: Set to binary mode.
(dump_attribs): Flush the stream after writing.
2008-12-05 Werner Koch <wk@g10code.com> 2008-12-05 Werner Koch <wk@g10code.com>
* call-agent.c (percent_plus_escape): Rename to * call-agent.c (percent_plus_escape): Rename to

View File

@ -229,7 +229,7 @@ write_status_buffer ( int no, const char *buffer, size_t len, int wrap )
/* Print the BEGIN_SIGNING status message. If MD is not NULL it is /* Print the BEGIN_SIGNING status message. If MD is not NULL it is
used retrieve the hash algorithms used for the message. */ used to retrieve the hash algorithms used for the message. */
void void
write_status_begin_signing (gcry_md_hd_t md) write_status_begin_signing (gcry_md_hd_t md)
{ {

View File

@ -1036,9 +1036,9 @@ set_screen_dimensions(void)
used with --status-file etc functions. Not generally useful but it used with --status-file etc functions. Not generally useful but it
avoids the riscos specific functions and well some Windows people avoids the riscos specific functions and well some Windows people
might like it too. Prints an error message and returns -1 on might like it too. Prints an error message and returns -1 on
error. On success the file descriptor is returned. */ error. On success the file descriptor is returned. */
static int static int
open_info_file (const char *fname, int for_write) open_info_file (const char *fname, int for_write, int binary)
{ {
#ifdef __riscos__ #ifdef __riscos__
return riscos_fdopenfile (fname, for_write); return riscos_fdopenfile (fname, for_write);
@ -1048,10 +1048,16 @@ open_info_file (const char *fname, int for_write)
similar to the option file but in that case it is unlikely that similar to the option file but in that case it is unlikely that
sensitive information may be retrieved by means of error sensitive information may be retrieved by means of error
messages. */ messages. */
(void)fname;
(void)for_write;
(void)binary;
return -1; return -1;
#else #else
int fd; int fd;
if (binary)
binary = MY_O_BINARY;
/* if (is_secured_filename (fname)) */ /* if (is_secured_filename (fname)) */
/* { */ /* { */
/* fd = -1; */ /* fd = -1; */
@ -1062,10 +1068,10 @@ open_info_file (const char *fname, int for_write)
do do
{ {
if (for_write) if (for_write)
fd = open (fname, O_CREAT | O_TRUNC | O_WRONLY, fd = open (fname, O_CREAT | O_TRUNC | O_WRONLY | binary,
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
else else
fd = open (fname, O_RDONLY | MY_O_BINARY); fd = open (fname, O_RDONLY | binary);
} }
while (fd == -1 && errno == EINTR); while (fd == -1 && errno == EINTR);
/* } */ /* } */
@ -1910,6 +1916,7 @@ main (int argc, char **argv)
log_set_prefix ("gpg", 1); log_set_prefix ("gpg", 1);
/* Make sure that our subsystems are ready. */ /* Make sure that our subsystems are ready. */
i18n_init();
init_common_subsystems (); init_common_subsystems ();
/* Check that the libraries are suitable. Do it right here because the /* Check that the libraries are suitable. Do it right here because the
@ -1929,7 +1936,6 @@ main (int argc, char **argv)
create_dotlock(NULL); /* Register locking cleanup. */ create_dotlock(NULL); /* Register locking cleanup. */
i18n_init();
opt.command_fd = -1; /* no command fd */ opt.command_fd = -1; /* no command fd */
opt.compress_level = -1; /* defaults to standard compress level */ opt.compress_level = -1; /* defaults to standard compress level */
@ -2216,16 +2222,16 @@ main (int argc, char **argv)
case oDebugLevel: debug_level = pargs.r.ret_str; break; case oDebugLevel: debug_level = pargs.r.ret_str; break;
case oStatusFD: case oStatusFD:
set_status_fd( translate_sys2libc_fd_int (pargs.r.ret_int, 1) ); set_status_fd ( translate_sys2libc_fd_int (pargs.r.ret_int, 1) );
break; break;
case oStatusFile: case oStatusFile:
set_status_fd ( open_info_file (pargs.r.ret_str, 1) ); set_status_fd ( open_info_file (pargs.r.ret_str, 1, 0) );
break; break;
case oAttributeFD: case oAttributeFD:
set_attrib_fd(translate_sys2libc_fd_int (pargs.r.ret_int, 1)); set_attrib_fd ( translate_sys2libc_fd_int (pargs.r.ret_int, 1) );
break; break;
case oAttributeFile: case oAttributeFile:
set_attrib_fd ( open_info_file (pargs.r.ret_str, 1) ); set_attrib_fd ( open_info_file (pargs.r.ret_str, 1, 1) );
break; break;
case oLoggerFD: case oLoggerFD:
log_set_fd (translate_sys2libc_fd_int (pargs.r.ret_int, 1)); log_set_fd (translate_sys2libc_fd_int (pargs.r.ret_int, 1));
@ -2522,14 +2528,14 @@ main (int argc, char **argv)
pwfd = translate_sys2libc_fd_int (pargs.r.ret_int, 0); pwfd = translate_sys2libc_fd_int (pargs.r.ret_int, 0);
break; break;
case oPasswdFile: case oPasswdFile:
pwfd = open_info_file (pargs.r.ret_str, 0); pwfd = open_info_file (pargs.r.ret_str, 0, 1);
break; break;
case oPasswdRepeat: opt.passwd_repeat=pargs.r.ret_int; break; case oPasswdRepeat: opt.passwd_repeat=pargs.r.ret_int; break;
case oCommandFD: case oCommandFD:
opt.command_fd = translate_sys2libc_fd_int (pargs.r.ret_int, 0); opt.command_fd = translate_sys2libc_fd_int (pargs.r.ret_int, 0);
break; break;
case oCommandFile: case oCommandFile:
opt.command_fd = open_info_file (pargs.r.ret_str, 0); opt.command_fd = open_info_file (pargs.r.ret_str, 0, 1);
break; break;
case oCipherAlgo: case oCipherAlgo:
def_cipher_string = xstrdup(pargs.r.ret_str); def_cipher_string = xstrdup(pargs.r.ret_str);

View File

@ -147,10 +147,10 @@ main( int argc, char **argv )
log_set_prefix ("gpgv", 1); log_set_prefix ("gpgv", 1);
/* Make sure that our subsystems are ready. */ /* Make sure that our subsystems are ready. */
i18n_init();
init_common_subsystems (); init_common_subsystems ();
gnupg_init_signals (0, NULL); gnupg_init_signals (0, NULL);
i18n_init();
opt.command_fd = -1; /* no command fd */ opt.command_fd = -1; /* no command fd */
opt.pgp2_workarounds = 1; opt.pgp2_workarounds = 1;

View File

@ -24,6 +24,9 @@
#include <string.h> #include <string.h>
#include <errno.h> #include <errno.h>
#include <assert.h> #include <assert.h>
#ifdef HAVE_DOSISH_SYSTEM
#include <fcntl.h> /* for setmode() */
#endif
#include "gpg.h" #include "gpg.h"
#include "options.h" #include "options.h"
@ -50,7 +53,8 @@ struct sig_stats
int oth_err; int oth_err;
}; };
static FILE *attrib_fp=NULL; /* The stream used to write attribute packets to. */
static FILE *attrib_fp = NULL;
/**************** /****************
* List the keys * List the keys
@ -745,6 +749,7 @@ dump_attribs(const PKT_user_id *uid,PKT_public_key *pk,PKT_secret_key *sk)
} }
fwrite(uid->attribs[i].data,uid->attribs[i].len,1,attrib_fp); fwrite(uid->attribs[i].data,uid->attribs[i].len,1,attrib_fp);
fflush (attrib_fp);
} }
} }
@ -1609,29 +1614,35 @@ print_card_serialno (PKT_secret_key *sk)
void set_attrib_fd(int fd) void
set_attrib_fd (int fd)
{ {
static int last_fd=-1; static int last_fd=-1;
if ( fd != -1 && last_fd == fd ) if ( fd != -1 && last_fd == fd )
return; return;
if ( attrib_fp && attrib_fp != stdout && attrib_fp != stderr ) if ( attrib_fp && attrib_fp != stdout && attrib_fp != stderr
&& attrib_fp != log_get_stream () )
fclose (attrib_fp); fclose (attrib_fp);
attrib_fp = NULL; attrib_fp = NULL;
if ( fd == -1 ) if ( fd == -1 )
return; return;
#ifdef HAVE_DOSISH_SYSTEM
setmode ( fileno(fp) , O_BINARY );
#endif
if( fd == 1 ) if( fd == 1 )
attrib_fp = stdout; attrib_fp = stdout;
else if( fd == 2 ) else if( fd == 2 )
attrib_fp = stderr; attrib_fp = stderr;
else else
attrib_fp = fdopen( fd, "wb" ); attrib_fp = fdopen (fd, "wb");
if( !attrib_fp ) { if (!attrib_fp)
log_fatal("can't open fd %d for attribute output: %s\n", {
fd, strerror(errno)); log_fatal("can't open fd %d for attribute output: %s\n",
} fd, strerror(errno));
}
last_fd = fd; last_fd = fd;
} }

View File

@ -1,3 +1,7 @@
2008-12-09 Werner Koch <wk@g10code.com>
* kbxutil.c (main): Call i18n_init before init_common_subsystems.
2008-11-20 Werner Koch <wk@g10code.com> 2008-11-20 Werner Koch <wk@g10code.com>
* keybox-update.c (create_tmp_file) [USE_ONLY_8DOT3]: Use other * keybox-update.c (create_tmp_file) [USE_ONLY_8DOT3]: Use other

View File

@ -419,9 +419,8 @@ main( int argc, char **argv )
log_set_prefix ("kbxutil", 1); log_set_prefix ("kbxutil", 1);
/* Make sure that our subsystems are ready. */ /* Make sure that our subsystems are ready. */
init_common_subsystems ();
i18n_init (); i18n_init ();
init_common_subsystems ();
/* Check that the libraries are suitable. Do it here because /* Check that the libraries are suitable. Do it here because
the option parsing may need services of the library. */ the option parsing may need services of the library. */

View File

@ -1,3 +1,7 @@
2008-12-09 Werner Koch <wk@g10code.com>
* scdaemon.c (main): Call i18n_init before init_common_subsystems.
2008-12-08 Werner Koch <wk@g10code.com> 2008-12-08 Werner Koch <wk@g10code.com>
* scdaemon.c (handle_connections): Sync ticker to the next full * scdaemon.c (handle_connections): Sync ticker to the next full

View File

@ -364,9 +364,9 @@ main (int argc, char **argv )
log_set_prefix ("scdaemon", 1|4); log_set_prefix ("scdaemon", 1|4);
/* Make sure that our subsystems are ready. */ /* Make sure that our subsystems are ready. */
i18n_init ();
init_common_subsystems (); init_common_subsystems ();
i18n_init ();
/* Libgcrypt requires us to register the threading model first. /* Libgcrypt requires us to register the threading model first.
Note that this will also do the pth_init. */ Note that this will also do the pth_init. */

View File

@ -1,3 +1,7 @@
2008-12-09 Werner Koch <wk@g10code.com>
* gpgsm.c (main): Call i18n_init before init_common_subsystems.
2008-12-05 Werner Koch <wk@g10code.com> 2008-12-05 Werner Koch <wk@g10code.com>
* certreqgen.c (create_request): Provide a custom prompt for the * certreqgen.c (create_request): Provide a custom prompt for the

View File

@ -869,6 +869,7 @@ main ( int argc, char **argv)
log_set_prefix ("gpgsm", 1); log_set_prefix ("gpgsm", 1);
/* Make sure that our subsystems are ready. */ /* Make sure that our subsystems are ready. */
i18n_init();
init_common_subsystems (); init_common_subsystems ();
/* Check that the libraries are suitable. Do it here because the /* Check that the libraries are suitable. Do it here because the
@ -888,7 +889,6 @@ main ( int argc, char **argv)
gnupg_init_signals (0, emergency_cleanup); gnupg_init_signals (0, emergency_cleanup);
create_dotlock (NULL); /* register locking cleanup */ create_dotlock (NULL); /* register locking cleanup */
i18n_init();
opt.def_cipher_algoid = "AES"; /*des-EDE3-CBC*/ opt.def_cipher_algoid = "AES"; /*des-EDE3-CBC*/

View File

@ -1,3 +1,11 @@
2008-12-09 Werner Koch <wk@g10code.com>
* gpg-check-pattern.c (main): Call i18n_init before
init_common_subsystems.
* gpg-connect-agent.c (main): Ditto.
* gpgconf.c (main): Ditto.
* symcryptrun.c (main): Ditto.
2008-12-08 Werner Koch <wk@g10code.com> 2008-12-08 Werner Koch <wk@g10code.com>
* gpgkey2ssh.c (main): Change order of output for RSA. Change name * gpgkey2ssh.c (main): Change order of output for RSA. Change name

View File

@ -168,9 +168,8 @@ main (int argc, char **argv )
log_set_prefix ("gpg-check-pattern", 1); log_set_prefix ("gpg-check-pattern", 1);
/* Make sure that our subsystems are ready. */ /* Make sure that our subsystems are ready. */
init_common_subsystems ();
i18n_init (); i18n_init ();
init_common_subsystems ();
/* We need Libgcrypt for hashing. */ /* We need Libgcrypt for hashing. */
if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) ) if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) )

View File

@ -1152,11 +1152,11 @@ main (int argc, char **argv)
log_set_prefix ("gpg-connect-agent", 1); log_set_prefix ("gpg-connect-agent", 1);
/* Make sure that our subsystems are ready. */ /* Make sure that our subsystems are ready. */
i18n_init();
init_common_subsystems (); init_common_subsystems ();
assuan_set_assuan_err_source (0); assuan_set_assuan_err_source (0);
i18n_init();
opt.homedir = default_homedir (); opt.homedir = default_homedir ();
opt.connect_flags = 1; /* Use extended connect mode. */ opt.connect_flags = 1; /* Use extended connect mode. */

View File

@ -147,9 +147,8 @@ main (int argc, char **argv)
log_set_prefix ("gpgconf", 1); log_set_prefix ("gpgconf", 1);
/* Make sure that our subsystems are ready. */ /* Make sure that our subsystems are ready. */
init_common_subsystems ();
i18n_init(); i18n_init();
init_common_subsystems ();
/* Parse the command line. */ /* Parse the command line. */
pargs.argc = &argc; pargs.argc = &argc;

View File

@ -884,9 +884,8 @@ main (int argc, char **argv)
log_set_prefix ("symcryptrun", 1); log_set_prefix ("symcryptrun", 1);
/* Make sure that our subsystems are ready. */ /* Make sure that our subsystems are ready. */
init_common_subsystems ();
i18n_init(); i18n_init();
init_common_subsystems ();
opt.homedir = default_homedir (); opt.homedir = default_homedir ();