* certcheck.c: Fixed use of DBG_CRYPTO and DBG_X509.
[gnupg.git] / sm / server.c
index 8cc1b90..7bfd3fc 100644 (file)
@@ -1,5 +1,5 @@
 /* server.c - Server mode and main entry point 
- *     Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+ * Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
@@ -353,7 +353,7 @@ cmd_encrypt (ASSUAN_CONTEXT ctx, char *line)
   rc = 0;
   if (!opt.no_encrypt_to)
     {
-      for (cl=ctrl->server_local->recplist; !rc && cl; cl = cl->next)
+      for (cl=ctrl->server_local->default_recplist; !rc && cl; cl = cl->next)
         if (cl->is_encrypt_to)
           rc = gpgsm_add_cert_to_certlist (ctrl, cl->cert,
                                            &ctrl->server_local->recplist, 1);
@@ -651,6 +651,7 @@ do_listkeys (ASSUAN_CONTEXT ctx, char *line, int mode)
   char *p;
   STRLIST list, sl;
   unsigned int listmode;
+  gpg_error_t err;
 
   if (!fp)
     return set_error (General_Error, "no data stream");
@@ -684,9 +685,9 @@ do_listkeys (ASSUAN_CONTEXT ctx, char *line, int mode)
     listmode |= (1<<6);
   if (ctrl->server_local->list_external)
     listmode |= (1<<7);
-  gpgsm_list_keys (assuan_get_pointer (ctx), list, fp, listmode);
+  err = gpgsm_list_keys (assuan_get_pointer (ctx), list, fp, listmode);
   free_strlist (list);
-  return 0;
+  return map_to_assuan_status (err);
 }
 
 static int 
@@ -785,6 +786,8 @@ gpgsm_server (certlist_t default_recplist)
   int filedes[2];
   ASSUAN_CONTEXT ctx;
   struct server_control_s ctrl;
+  static const char hello[] = ("GNU Privacy Guard's S/M server "
+                               VERSION " ready");
 
   memset (&ctrl, 0, sizeof ctrl);
   gpgsm_init_default_ctrl (&ctrl);
@@ -808,7 +811,30 @@ gpgsm_server (certlist_t default_recplist)
                  assuan_strerror(rc));
       gpgsm_exit (2);
     }
-  assuan_set_hello_line (ctx, "GNU Privacy Guard's S/M server ready");
+  if (opt.verbose || opt.debug)
+    {
+      char *tmp = NULL;
+      const char *s1 = getenv ("GPG_AGENT_INFO");
+      const char *s2 = getenv ("DIRMNGR_INFO");
+
+      if (asprintf (&tmp,
+                    "Home: %s\n"
+                    "Config: %s\n"
+                    "AgentInfo: %s\n"
+                    "DirmngrInfo: %s\n"
+                    "%s",
+                    opt.homedir,
+                    opt.config_filename,
+                    s1?s1:"[not set]",
+                    s2?s2:"[not set]",
+                    hello) > 0)
+        {
+          assuan_set_hello_line (ctx, tmp);
+          free (tmp);
+        }
+    }
+  else
+    assuan_set_hello_line (ctx, hello);
 
   assuan_register_reset_notify (ctx, reset_notify);
   assuan_register_input_notify (ctx, input_notify);
@@ -866,6 +892,7 @@ get_status_string ( int no )
     case STATUS_ENTER  : s = "ENTER"; break;
     case STATUS_LEAVE  : s = "LEAVE"; break;
     case STATUS_ABORT  : s = "ABORT"; break;
+    case STATUS_NEWSIG : s = "NEWSIG"; break;
     case STATUS_GOODSIG: s = "GOODSIG"; break;
     case STATUS_SIGEXPIRED: s = "SIGEXPIRED"; break;
     case STATUS_KEYREVOKED: s = "KEYREVOKED"; break;
@@ -937,18 +964,19 @@ get_status_string ( int no )
 }
 
 
-void
+gpg_error_t
 gpgsm_status2 (CTRL ctrl, int no, ...)
 {
+  gpg_error_t err = 0;
   va_list arg_ptr;
   const char *text;
 
   va_start (arg_ptr, no);
 
-  if (ctrl->no_server)
+  if (ctrl->no_server && ctrl->status_fd == -1)
+    ; /* No status wanted. */
+  else if (ctrl->no_server)
     {
-      if (ctrl->status_fd == -1)
-        return; /* no status wanted */
       if (!statusfp)
         {
           if (ctrl->status_fd == 1)
@@ -1003,19 +1031,21 @@ gpgsm_status2 (CTRL ctrl, int no, ...)
             *p++ = *text++;
         }
       *p = 0;
-      assuan_write_status (ctx, get_status_string (no), buf);
+      err = map_assuan_err (assuan_write_status (ctx,
+                                                 get_status_string (no), buf));
     }
 
   va_end (arg_ptr);
+  return err;
 }
 
-void
+gpg_error_t
 gpgsm_status (CTRL ctrl, int no, const char *text)
 {
-  gpgsm_status2 (ctrl, no, text, NULL);
+  return gpgsm_status2 (ctrl, no, text, NULL);
 }
 
-void
+gpg_error_t
 gpgsm_status_with_err_code (CTRL ctrl, int no, const char *text,
                             gpg_err_code_t ec)
 {
@@ -1023,9 +1053,9 @@ gpgsm_status_with_err_code (CTRL ctrl, int no, const char *text,
 
   sprintf (buf, "%u", (unsigned int)ec);
   if (text)
-    gpgsm_status2 (ctrl, no, text, buf, NULL);
+    return gpgsm_status2 (ctrl, no, text, buf, NULL);
   else
-    gpgsm_status2 (ctrl, no, buf, NULL);
+    return gpgsm_status2 (ctrl, no, buf, NULL);
 }
 
 #if 0