A whole bunch of changes to allow building for W32.
[gnupg.git] / sm / server.c
index 549c353..e39c78a 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.
  *
@@ -170,6 +170,11 @@ option_handler (ASSUAN_CONTEXT ctx, const char *key, const char *value)
       else
         return ASSUAN_Parameter_Error;
     }
+  else if (!strcmp (key, "with-validation"))
+    {
+      int i = *value? atoi (value) : 0;
+      ctrl->with_validation = i;
+    }
   else
     return ASSUAN_Invalid_Option;
 
@@ -348,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);
@@ -646,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");
@@ -679,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 
@@ -780,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);
@@ -803,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);
@@ -861,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;
@@ -898,6 +930,7 @@ get_status_string ( int no )
     case STATUS_BADMDC  : s = "BADMDC"; break;
     case STATUS_ERRMDC  : s = "ERRMDC"; break;
     case STATUS_IMPORTED        : s = "IMPORTED"; break;
+    case STATUS_IMPORT_OK        : s = "IMPORT_OK"; break;
     case STATUS_IMPORT_RES      : s = "IMPORT_RES"; break;
     case STATUS_FILE_START      : s = "FILE_START"; break;
     case STATUS_FILE_DONE       : s = "FILE_DONE"; break;