Minor fixes.
authorWerner Koch <wk@gnupg.org>
Tue, 9 Dec 2008 08:58:02 +0000 (08:58 +0000)
committerWerner Koch <wk@gnupg.org>
Tue, 9 Dec 2008 08:58:02 +0000 (08:58 +0000)
23 files changed:
NEWS
agent/ChangeLog
agent/command.c
agent/gpg-agent.c
agent/preset-passphrase.c
agent/protect-tool.c
doc/tools.texi
g10/ChangeLog
g10/cpr.c
g10/gpg.c
g10/gpgv.c
g10/keylist.c
kbx/ChangeLog
kbx/kbxutil.c
scd/ChangeLog
scd/scdaemon.c
sm/ChangeLog
sm/gpgsm.c
tools/ChangeLog
tools/gpg-check-pattern.c
tools/gpg-connect-agent.c
tools/gpgconf.c
tools/symcryptrun.c

diff --git a/NEWS b/NEWS
index 0989312..b20b0ef 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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
    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).
 
index 65669d7..a9e7be6 100644 (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>
 
        * gpg-agent.c (handle_connections): Sync the ticker to the next
index e3e51f4..4f28d41 100644 (file)
@@ -1093,7 +1093,7 @@ cmd_passwd (assuan_context_t ctx, char *line)
   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
    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)
 {
   int rc;
-  unsigned char grip[20];
   char *grip_clear = NULL;
   char *passphrase = NULL;
   int ttl;
@@ -1113,11 +1112,6 @@ cmd_preset_passphrase (assuan_context_t ctx, char *line)
   if (!opt.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;
   while (*line && (*line != ' ' && *line != '\t'))
     line++;
index 8aae8a6..21e4c43 100644 (file)
@@ -535,9 +535,9 @@ main (int argc, char **argv )
   log_set_prefix ("gpg-agent", JNLIB_LOG_WITH_PREFIX|JNLIB_LOG_WITH_PID); 
 
   /* Make sure that our subsystems are ready.  */
+  i18n_init ();
   init_common_subsystems ();
 
-  i18n_init ();
 
   /* Libgcrypt requires us to register the threading model first.
      Note that this will also do the pth_init. */
index cb906ad..77646d8 100644 (file)
@@ -209,9 +209,8 @@ main (int argc, char **argv)
   log_set_prefix ("gpg-preset-passphrase", 1); 
 
   /* Make sure that our subsystems are ready.  */
-  init_common_subsystems ();
-
   i18n_init ();
+  init_common_subsystems ();
 
   opt_homedir = default_homedir ();
 
index 288dbe8..ddf91e0 100644 (file)
@@ -1059,9 +1059,8 @@ main (int argc, char **argv )
   log_set_prefix ("gpg-protect-tool", 1); 
 
   /* Make sure that our subsystems are ready.  */
-  init_common_subsystems ();
-
   i18n_init ();
+  init_common_subsystems ();
 
   if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) )
     {
index fdbabcd..e89a998 100644 (file)
@@ -979,7 +979,7 @@ which will be printed to stdout.
 .B  gpg-preset-passphrase
 .RI [ options ]
 .RI [ command ]
-.I keygrip
+.I cache-id
 @end ifset
 
 @mansect description
@@ -1009,14 +1009,19 @@ starting @command{gpg-agent} with the
 @command{gpg-preset-passphrase} is invoked this way:
 
 @example
-gpg-preset-passphrase [options] [command] @var{keygrip}
+gpg-preset-passphrase [options] [command] @var{cacheid}
 @end example
 
-@var{keygrip} is a 40 character string of hexadecimal characters
-identifying the key for which the passphrase should be set or cleared.
-This keygrip is listed along with the key when running the command:
-@code{gpgsm --dump-secret-keys}. One of the following command options
-must be given:
+@var{cacheid} is either a 40 character keygrip of hexadecimal
+characters identifying the key for which the passphrase should be set
+or cleared.  The keygrip is listed along with the key when running the
+command: @code{gpgsm --dump-secret-keys}.  Alternatively an arbitrary
+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
 @item --preset
@@ -1027,7 +1032,7 @@ use. @command{gpg-preset-passphrase} will then read the passphrase from
 
 @item --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
 
index 0ad19ab..23b254e 100644 (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>
 
        * call-agent.c (percent_plus_escape): Rename to
index a1e904e..6e89d39 100644 (file)
--- a/g10/cpr.c
+++ b/g10/cpr.c
@@ -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
-   used retrieve the hash algorithms used for the message. */
+   used to retrieve the hash algorithms used for the message. */
 void
 write_status_begin_signing (gcry_md_hd_t md)
 {
index ee6061a..9af97fb 100644 (file)
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -1036,9 +1036,9 @@ set_screen_dimensions(void)
    used with --status-file etc functions.  Not generally useful but it
    avoids the riscos specific functions and well some Windows people
    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
-open_info_file (const char *fname, int for_write)
+open_info_file (const char *fname, int for_write, int binary)
 {
 #ifdef __riscos__
   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
      sensitive information may be retrieved by means of error
      messages.  */
+  (void)fname;
+  (void)for_write;
+  (void)binary;
   return -1;
 #else 
   int fd;
 
+  if (binary)
+    binary = MY_O_BINARY;
+
 /*   if (is_secured_filename (fname)) */
 /*     { */
 /*       fd = -1; */
@@ -1062,10 +1068,10 @@ open_info_file (const char *fname, int for_write)
       do
         {
           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);
           else
-            fd = open (fname, O_RDONLY | MY_O_BINARY);
+            fd = open (fname, O_RDONLY | binary);
         }
       while (fd == -1 && errno == EINTR);
 /*     } */
@@ -1910,6 +1916,7 @@ main (int argc, char **argv)
     log_set_prefix ("gpg", 1);
 
     /* Make sure that our subsystems are ready.  */
+    i18n_init();
     init_common_subsystems ();
 
     /* 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. */
 
-    i18n_init();
 
     opt.command_fd = -1; /* no command fd */
     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 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;
          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;
          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;
          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;
          case oLoggerFD:
             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);
             break;
          case oPasswdFile:
-            pwfd = open_info_file (pargs.r.ret_str, 0);
+            pwfd = open_info_file (pargs.r.ret_str, 0, 1);
             break;
          case oPasswdRepeat: opt.passwd_repeat=pargs.r.ret_int; break;
          case oCommandFD:
             opt.command_fd = translate_sys2libc_fd_int (pargs.r.ret_int, 0);
             break;
          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;
          case oCipherAlgo: 
             def_cipher_string = xstrdup(pargs.r.ret_str);
index 2f64f83..fd0ae8b 100644 (file)
@@ -147,10 +147,10 @@ main( int argc, char **argv )
   log_set_prefix ("gpgv", 1);
   
   /* Make sure that our subsystems are ready.  */
+  i18n_init();
   init_common_subsystems ();
   
   gnupg_init_signals (0, NULL);
-  i18n_init();
 
   opt.command_fd = -1; /* no command fd */
   opt.pgp2_workarounds = 1;
index 5f86a38..91b3374 100644 (file)
@@ -24,6 +24,9 @@
 #include <string.h>
 #include <errno.h>
 #include <assert.h>
+#ifdef HAVE_DOSISH_SYSTEM
+#include <fcntl.h> /* for setmode() */
+#endif
 
 #include "gpg.h"
 #include "options.h"
@@ -50,7 +53,8 @@ struct sig_stats
   int oth_err;
 };
 
-static FILE *attrib_fp=NULL;
+/* The stream used to write attribute packets to.  */
+static FILE *attrib_fp = NULL;
 
 /****************
  * 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);
+      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;
 
   if ( fd != -1 && last_fd == fd )
     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);
   attrib_fp = NULL;
   if ( fd == -1 ) 
     return;
 
+#ifdef HAVE_DOSISH_SYSTEM
+  setmode ( fileno(fp) , O_BINARY );
+#endif
   if( fd == 1 )
     attrib_fp = stdout;
   else if( fd == 2 )
     attrib_fp = stderr;
   else
-    attrib_fp = fdopen( fd, "wb" );
-  if( !attrib_fp ) {
-    log_fatal("can't open fd %d for attribute output: %s\n",
-             fd, strerror(errno));
-  }
-
+    attrib_fp = fdopen (fd, "wb");
+  if (!attrib_fp) 
+    {
+      log_fatal("can't open fd %d for attribute output: %s\n",
+                fd, strerror(errno));
+    }
+  
   last_fd = fd;
 }
index c910928..b4f9882 100644 (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>
 
        * keybox-update.c (create_tmp_file) [USE_ONLY_8DOT3]: Use other
index afc4b79..efb2eff 100644 (file)
@@ -419,9 +419,8 @@ main( int argc, char **argv )
   log_set_prefix ("kbxutil", 1); 
 
   /* Make sure that our subsystems are ready.  */
-  init_common_subsystems ();
-
   i18n_init ();
+  init_common_subsystems ();
 
   /* Check that the libraries are suitable.  Do it here because
      the option parsing may need services of the library.  */
index e582ae5..4b65756 100644 (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>
 
        * scdaemon.c (handle_connections): Sync ticker to the next full
index 5f3078c..a094ae3 100644 (file)
@@ -364,9 +364,9 @@ main (int argc, char **argv )
   log_set_prefix ("scdaemon", 1|4); 
 
   /* Make sure that our subsystems are ready.  */
+  i18n_init ();
   init_common_subsystems ();
 
-  i18n_init ();
 
   /* Libgcrypt requires us to register the threading model first.
      Note that this will also do the pth_init. */
index 67e35f0..5f76a59 100644 (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>
 
        * certreqgen.c (create_request): Provide a custom prompt for the
index 5177d10..4aa0dc9 100644 (file)
@@ -869,6 +869,7 @@ main ( int argc, char **argv)
   log_set_prefix ("gpgsm", 1);
 
   /* Make sure that our subsystems are ready.  */
+  i18n_init();
   init_common_subsystems ();
 
   /* 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);
   
   create_dotlock (NULL); /* register locking cleanup */
-  i18n_init();
 
   opt.def_cipher_algoid = "AES";  /*des-EDE3-CBC*/
 
index b7cd7d5..c533085 100644 (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>
 
        * gpgkey2ssh.c (main): Change order of output for RSA. Change name
index a2926b9..b29687d 100644 (file)
@@ -168,9 +168,8 @@ main (int argc, char **argv )
   log_set_prefix ("gpg-check-pattern", 1); 
 
   /* Make sure that our subsystems are ready.  */
-  init_common_subsystems ();
-
   i18n_init ();
+  init_common_subsystems ();
 
   /* We need Libgcrypt for hashing.  */
   if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) )
index 92a6e70..ba97c1a 100644 (file)
@@ -1152,11 +1152,11 @@ main (int argc, char **argv)
   log_set_prefix ("gpg-connect-agent", 1);
 
   /* Make sure that our subsystems are ready.  */
+  i18n_init();
   init_common_subsystems ();
 
   assuan_set_assuan_err_source (0);
 
-  i18n_init();
 
   opt.homedir = default_homedir ();
   opt.connect_flags = 1; /* Use extended connect mode.  */
index 9054e29..57ea08b 100644 (file)
@@ -147,9 +147,8 @@ main (int argc, char **argv)
   log_set_prefix ("gpgconf", 1);
 
   /* Make sure that our subsystems are ready.  */
-  init_common_subsystems ();
-
   i18n_init();
+  init_common_subsystems ();
 
   /* Parse the command line. */
   pargs.argc  = &argc;
index e720eab..2866804 100644 (file)
@@ -884,9 +884,8 @@ main (int argc, char **argv)
   log_set_prefix ("symcryptrun", 1);
 
   /* Make sure that our subsystems are ready.  */
-  init_common_subsystems ();
-
   i18n_init();
+  init_common_subsystems ();
 
   opt.homedir = default_homedir ();