http: Print human readable GNUTLS status.
[gnupg.git] / common / get-passphrase.c
index 68d7b70..5b11eb1 100644 (file)
@@ -3,12 +3,22 @@
  *
  * This file is part of GnuPG.
  *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of either
  *
- * GnuPG is distributed in the hope that it will be useful,
+ *   - the GNU Lesser General Public License as published by the Free
+ *     Software Foundation; either version 3 of the License, or (at
+ *     your option) any later version.
+ *
+ * or
+ *
+ *   - the GNU General Public License as published by the Free
+ *     Software Foundation; either version 2 of the License, or (at
+ *     your option) any later version.
+ *
+ * or both in parallel, as here.
+ *
+ * This file is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
@@ -39,12 +49,9 @@ static struct
   int verbosity;
   const char *homedir;
   const char *agent_program;
-  const char *display;
-  const char *ttyname;
-  const char *ttytype;
   const char *lc_ctype;
   const char *lc_messages;
-  const char *xauthority;
+  session_env_t session_env;
   const char *pinentry_user_data;
 } agentargs;
 
@@ -57,25 +64,17 @@ gnupg_prepare_get_passphrase (gpg_err_source_t errsource,
                               int verbosity,
                               const char *homedir,
                               const char *agent_program,
-                              const char *opt_display,
-                              const char *opt_ttyname,
-                              const char *opt_ttytype,
                               const char *opt_lc_ctype,
                               const char *opt_lc_messages,
-                              const char *opt_xauthority,
-                              const char *opt_pinentry_user_data)
+                              session_env_t session_env)
 {
   agentargs.errsource          = errsource;
   agentargs.verbosity          = verbosity;
   agentargs.homedir            = homedir;
   agentargs.agent_program      = agent_program;
-  agentargs.display            = opt_display;
-  agentargs.ttyname            = opt_ttyname;
-  agentargs.ttytype            = opt_ttytype;
   agentargs.lc_ctype           = opt_lc_ctype;
   agentargs.lc_messages        = opt_lc_messages;
-  agentargs.xauthority         = opt_xauthority;
-  agentargs.pinentry_user_data = opt_pinentry_user_data;
+  agentargs.session_env        = session_env;
 }
 
 
@@ -90,19 +89,15 @@ start_agent (void)
      pth.  We will need a context for each thread or serialize the
      access to the agent.  */
   if (agent_ctx)
-    return 0; 
+    return 0;
 
   err = start_new_gpg_agent (&agent_ctx,
                              agentargs.errsource,
                              agentargs.homedir,
                              agentargs.agent_program,
-                             agentargs.display, 
-                             agentargs.ttyname,
-                             agentargs.ttytype,
                              agentargs.lc_ctype,
                              agentargs.lc_messages,
-                             agentargs.xauthority,
-                             agentargs.pinentry_user_data,
+                             agentargs.session_env,
                              agentargs.verbosity, 0, NULL, NULL);
   if (!err)
     {
@@ -118,7 +113,7 @@ start_agent (void)
 
 /* This is the default inquiry callback.  It merely handles the
    Pinentry notification.  */
-static int
+static gpg_error_t
 default_inq_cb (void *opaque, const char *line)
 {
   (void)opaque;
@@ -129,13 +124,13 @@ default_inq_cb (void *opaque, const char *line)
       /* We do not return errors to avoid breaking other code.  */
     }
   else
-    log_debug ("ignoring gpg-agent inquiry `%s'\n", line);
+    log_debug ("ignoring gpg-agent inquiry '%s'\n", line);
 
   return 0;
 }
 
 
-static int
+static gpg_error_t
 membuf_data_cb (void *opaque, const void *buffer, size_t length)
 {
   membuf_t *data = opaque;
@@ -144,7 +139,7 @@ membuf_data_cb (void *opaque, const void *buffer, size_t length)
     put_membuf (data, buffer, length);
   return 0;
 }
-  
+
 
 /* Ask for a passphrase via gpg-agent.  On success the caller needs to
    free the string stored at R_PASSPHRASE.  On error NULL will be
@@ -173,8 +168,8 @@ gnupg_get_passphrase (const char *cache_id,
   gpg_error_t err;
   char line[ASSUAN_LINELENGTH];
   const char *arg1 = NULL;
-  char *arg2 = NULL;  
-  char *arg3 = NULL; 
+  char *arg2 = NULL;
+  char *arg3 = NULL;
   char *arg4 = NULL;
   membuf_t data;
 
@@ -185,7 +180,7 @@ gnupg_get_passphrase (const char *cache_id,
     return err;
 
   /* Check that the gpg-agent understands the repeat option.  */
-  if (assuan_transact (agent_ctx, 
+  if (assuan_transact (agent_ctx,
                        "GETINFO cmd_has_option GET_PASSPHRASE repeat",
                        NULL, NULL, NULL, NULL, NULL, NULL))
     return gpg_error (GPG_ERR_NOT_SUPPORTED);
@@ -201,10 +196,10 @@ gnupg_get_passphrase (const char *cache_id,
     if (!(arg4 = percent_plus_escape (desc_msg)))
       goto no_mem;
 
-  snprintf (line, DIM(line)-1, 
-            "GET_PASSPHRASE --data %s--repeat=%d -- %s %s %s %s", 
+  snprintf (line, DIM(line)-1,
+            "GET_PASSPHRASE --data %s--repeat=%d -- %s %s %s %s",
             check_quality? "--check ":"",
-            repeat, 
+            repeat,
             arg1? arg1:"X",
             arg2? arg2:"X",
             arg3? arg3:"X",
@@ -218,10 +213,10 @@ gnupg_get_passphrase (const char *cache_id,
     init_membuf_secure (&data, 64);
   else
     init_membuf (&data, 64);
-  err = assuan_transact (agent_ctx, line, 
+  err = assuan_transact (agent_ctx, line,
                          membuf_data_cb, &data,
                          default_inq_cb, NULL, NULL, NULL);
-  
+
   /* Older Pinentries return the old assuan error code for canceled
      which gets translated bt libassuan to GPG_ERR_ASS_CANCELED and
      not to the code for a user cancel.  Fix this here. */
@@ -239,7 +234,7 @@ gnupg_get_passphrase (const char *cache_id,
         wipememory (p, n);
       xfree (p);
     }
-  else 
+  else
     {
       put_membuf (&data, "", 1);
       *r_passphrase = get_membuf (&data, NULL);