Forgot to commit this:
[gnupg.git] / agent / command.c
index e6f34fd..b98ec25 100644 (file)
@@ -110,7 +110,10 @@ cmd_istrusted (ASSUAN_CONTEXT ctx, char *line)
   else if (rc == -1)
     return ASSUAN_Not_Trusted;
   else
-    return map_to_assuan_status (rc);
+    {
+      log_error ("command is_trusted failed: %s\n", gnupg_strerror (rc));
+      return map_to_assuan_status (rc);
+    }
 }
 
 /* LISTTRUSTED 
@@ -119,7 +122,10 @@ cmd_istrusted (ASSUAN_CONTEXT ctx, char *line)
 static int
 cmd_listtrusted (ASSUAN_CONTEXT ctx, char *line)
 {
-  return map_to_assuan_status (agent_listtrusted (ctx));
+  int rc = agent_listtrusted (ctx);
+  if (rc)
+    log_error ("command listtrusted failed: %s\n", gnupg_strerror (rc));
+  return map_to_assuan_status (rc);
 }
 
 
@@ -158,6 +164,8 @@ cmd_marktrusted (ASSUAN_CONTEXT ctx, char *line)
     p++;
 
   rc = agent_marktrusted (p, fpr, flag);
+  if (rc)
+    log_error ("command marktrusted failed: %s\n", gnupg_strerror (rc));
   return map_to_assuan_status (rc);
 }
 
@@ -281,6 +289,8 @@ cmd_pksign (ASSUAN_CONTEXT ctx, char *line)
   CTRL ctrl = assuan_get_pointer (ctx);
 
   rc = agent_pksign (ctrl, assuan_get_data_fp (ctx));
+  if (rc)
+    log_error ("command pksign failed: %s\n", gnupg_strerror (rc));
   return map_to_assuan_status (rc);
 }
 
@@ -304,6 +314,8 @@ cmd_pkdecrypt (ASSUAN_CONTEXT ctx, char *line)
 
   rc = agent_pkdecrypt (ctrl, value, valuelen, assuan_get_data_fp (ctx));
   xfree (value);
+  if (rc)
+    log_error ("command pkdecrypt failed: %s\n", gnupg_strerror (rc));
   return map_to_assuan_status (rc);
 }
 
@@ -337,6 +349,8 @@ cmd_genkey (ASSUAN_CONTEXT ctx, char *line)
 
   rc = agent_genkey (ctrl, value, valuelen, assuan_get_data_fp (ctx));
   xfree (value);
+  if (rc)
+    log_error ("command genkey failed: %s\n", gnupg_strerror (rc));
   return map_to_assuan_status (rc);
 }
 
@@ -370,6 +384,7 @@ cmd_get_passphrase (ASSUAN_CONTEXT ctx, char *line)
   char *response;
   char *cacheid = NULL, *desc = NULL, *prompt = NULL, *errtext = NULL;
   char *p;
+  void *cache_marker;
 
   /* parse the stuff */
   for (p=line; *p == ' '; p++)
@@ -417,17 +432,18 @@ cmd_get_passphrase (ASSUAN_CONTEXT ctx, char *line)
     desc = NULL;
 
   /* Note: we store the hexified versions in the cache. */
-  pw = cacheid ? agent_get_cache (cacheid) : NULL;
+  pw = cacheid ? agent_get_cache (cacheid, &cache_marker) : NULL;
   if (pw)
     {
       assuan_begin_confidential (ctx);
       rc = assuan_set_okay_line (ctx, pw);
+      agent_unlock_cache_entry (&cache_marker);
     }
   else
     {
-      /* Note, that we only need to repalce the + characters and
-         should leave the other escaping in place becuase the escaped
-         sting is send verbatim to the pinentry which does the
+      /* Note, that we only need to replace the + characters and
+         should leave the other escaping in place because the escaped
+         string is send verbatim to the pinentry which does the
          unescaping (but not the + replacing) */
       if (errtext)
         plus_to_blank (errtext);
@@ -447,6 +463,8 @@ cmd_get_passphrase (ASSUAN_CONTEXT ctx, char *line)
         }
     }
 
+  if (rc)
+    log_error ("command get_passphrase failed: %s\n", gnupg_strerror (rc));
   return map_to_assuan_status (rc);
 }
 
@@ -489,7 +507,7 @@ cmd_learn (ASSUAN_CONTEXT ctx, char *line)
 
   rc = agent_handle_learn (has_option (line, "--send")? ctx : NULL);
   if (rc)
-    log_error ("agent_handle_learn failed: %s\n", gnupg_strerror (rc));
+    log_error ("command learn failed: %s\n", gnupg_strerror (rc));
   return map_to_assuan_status (rc);
 }
 
@@ -593,19 +611,18 @@ register_commands (ASSUAN_CONTEXT ctx)
 }
 
 
-/* Startup the server.  If LISTEN_FD is given as -1, this is a simple
+/* Startup the server.  If LISTEN_FD and FD is given as -1, this is a simple
    piper server, otherwise it is a regular server */
 void
-start_command_handler (int listen_fd)
+start_command_handler (int listen_fd, int fd)
 {
   int rc;
   ASSUAN_CONTEXT ctx;
   struct server_control_s ctrl;
 
   memset (&ctrl, 0, sizeof ctrl);
-
   
-  if (listen_fd == -1)
+  if (listen_fd == -1 && fd == -1)
     {
       int filedes[2];
 
@@ -613,10 +630,14 @@ start_command_handler (int listen_fd)
       filedes[1] = 1;
       rc = assuan_init_pipe_server (&ctx, filedes);
     }
-  else
+  else if (listen_fd != -1)
     {
       rc = assuan_init_socket_server (&ctx, listen_fd);
     }
+  else 
+    {
+      rc = assuan_init_connected_socket_server (&ctx, fd);
+    }
   if (rc)
     {
       log_error ("failed to initialize the server: %s\n",
@@ -664,5 +685,3 @@ start_command_handler (int listen_fd)
   assuan_deinit_server (ctx);
 }
 
-
-