Hack to start the agent as a side-effect of a secret key listing
authorWerner Koch <wk@gnupg.org>
Tue, 9 Mar 2010 11:15:53 +0000 (11:15 +0000)
committerWerner Koch <wk@gnupg.org>
Tue, 9 Mar 2010 11:15:53 +0000 (11:15 +0000)
src/ChangeLog
src/engine-gpgsm.c

index 57a09ff8c91ff14d29afa99f20573cb9cf4ea733..2582893eb1e8c48ab0954277c6b4c8d560d68b1e 100644 (file)
@@ -1,3 +1,7 @@
+2010-03-09  Werner Koch  <wk@g10code.com>
+
+       * engine-gpgsm.c (gpgsm_keylist): Try to start the agent.
+
 2010-02-17  Werner Koch  <wk@g10code.com>
 
        * posix-io.c (notify_table): Change implementation.
index 88039d7ac57553e6eb993709b35efd01c7a4e4ec..76760d56ec7da5f7cfc682c959beca2f21c17572 100644 (file)
@@ -1538,6 +1538,18 @@ gpgsm_keylist (void *engine, const char *pattern, int secret_only,
   if (!pattern)
     pattern = "";
 
+  /* Hack to make sure that the agent is started.  Only if the agent
+     has been started an application may connect to the agent via
+     GPGME_PROTOCOL_ASSUAN - for example to look for smartcards.  We
+     do this only if a secret key listing has been requested.  In
+     general this is not needed because a secret key listing starts
+     the agent.  However on a fresh installation no public keys are
+     available and thus there is no need for gpgsm to ask the agent
+     whether a secret key exists for the public key.  */
+  if (secret_only)
+    gpgsm_assuan_simple_command (gpgsm->assuan_ctx, "GETINFO agent-check",
+                                 NULL, NULL);
+
   /* Always send list-mode option because RESET does not reset it.  */
   if (asprintf (&line, "OPTION list-mode=%d", (list_mode & 3)) < 0)
     return gpg_error_from_errno (errno);