Translate dirmngr strings
[gnupg.git] / dirmngr / dirmngr.c
index 52efb9b..8e1aa11 100644 (file)
@@ -44,6 +44,7 @@
 
 
 #define JNLIB_NEED_LOG_LOGV
+#define JNLIB_NEED_AFLOCAL
 #include "dirmngr.h"
 
 #include <assuan.h> 
@@ -193,7 +194,7 @@ static ARGPARSE_OPTS opts[] = {
   ARGPARSE_s_i (oMaxReplies, "max-replies", 
                 N_("|N|do not return more than N items in one query")),
 
-  ARGPARSE_s_s (oSocketName, "socket-name", N_("|FILE|listen on socket FILE")),
+  ARGPARSE_s_s (oSocketName, "socket-name", "@"),  /* Only for debugging.  */
 
   ARGPARSE_s_u (oFakedSystemTime, "faked-system-time", "@"), /*(epoch time)*/
   ARGPARSE_p_u (oDebug,    "debug", "@"),
@@ -859,9 +860,10 @@ main (int argc, char **argv)
   
   if (gnupg_faked_time_p ())
     {
-      gnupg_isotime_t tbuf;
+      log_info (_("WARNING: running with faked system time: "));
       gnupg_get_isotime (tbuf);
-      log_info (_("WARNING: running with faked system time %s\n"), tbuf);
+      dump_isotime (tbuf);
+      log_printf ("\n");
     }
 
   set_debug ();
@@ -896,6 +898,7 @@ main (int argc, char **argv)
 
   if (cmd == aServer)
     {
+      /* Note that this server mode is maily useful for debugging.  */
       if (argc)
         wrong_args ("--server");
 
@@ -963,12 +966,17 @@ main (int argc, char **argv)
       memset (&serv_addr, 0, sizeof serv_addr);
       serv_addr.sun_family = AF_UNIX;
       strcpy (serv_addr.sun_path, socket_name);
-      len = (offsetof (struct sockaddr_un, sun_path)
-             + strlen (serv_addr.sun_path) + 1);
+      len = SUN_LEN (&serv_addr);
 
       rc = assuan_sock_bind (fd, (struct sockaddr*) &serv_addr, len);
-      if (rc == -1 && errno == EADDRINUSE)
+      if (rc == -1 
+          && (errno == EADDRINUSE
+#ifdef HAVE_W32_SYSTEM
+              || errno == EEXIST
+#endif
+              ))
        {
+          /* Fixme: We should test whether a dirmngr is already running. */
          gnupg_remove (socket_name);
          rc = assuan_sock_bind (fd, (struct sockaddr*) &serv_addr, len);
        }
@@ -996,6 +1004,9 @@ main (int argc, char **argv)
 
       es_fflush (NULL);
 
+      /* Note: We keep the dirmngr_info output only for the sake of
+         existing scripts which might use this to detect a successful
+         start of the dirmngr.  */
 #ifdef HAVE_W32_SYSTEM
       pid = getpid ();
       printf ("set DIRMNGR_INFO=%s;%lu;1\n", socket_name, (ulong) pid);
@@ -1003,7 +1014,7 @@ main (int argc, char **argv)
       pid = pth_fork ();
       if (pid == (pid_t)-1) 
         {
-          log_fatal (_("fork failed: %s\n"), strerror (errno) );
+          log_fatal (_("error forking process: %s\n"), strerror (errno));
           dirmngr_exit (1);
         }
 
@@ -1026,7 +1037,7 @@ main (int argc, char **argv)
               dirmngr_exit (1);
             }
           /* Print the environment string, so that the caller can use
-             shell's eval to set it */
+             shell's eval to set it.  But see above.  */
           if (csh_style)
             {
               *strchr (infostr, '=') = ' ';
@@ -1060,7 +1071,7 @@ main (int argc, char **argv)
             }
           if (setsid() == -1)
             {
-              log_error (_("setsid() failed: %s\n"), strerror(errno) );
+              log_error ("setsid() failed: %s\n", strerror(errno) );
               dirmngr_exit (1);
             }
 
@@ -1070,7 +1081,7 @@ main (int argc, char **argv)
 
           if (chdir("/"))
             {
-              log_error (_("chdir to / failed: %s\n"), strerror (errno));
+              log_error ("chdir to / failed: %s\n", strerror (errno));
               dirmngr_exit (1);
             }
         }
@@ -1572,6 +1583,21 @@ reread_configuration (void)
 }
 
 
+/* A global function which allows us to trigger the reload stuff from
+   other places.  */
+void
+dirmngr_sighup_action (void)
+{
+  log_info (_("SIGHUP received - "
+              "re-reading configuration and flushing caches\n"));
+  reread_configuration ();
+  cert_cache_deinit (0);
+  crl_cache_deinit ();
+  cert_cache_init ();
+  crl_cache_init ();
+}
+
+
 
 /* The signal handler. */
 static void
@@ -1581,13 +1607,7 @@ handle_signal (int signo)
     {
 #ifndef HAVE_W32_SYSTEM
     case SIGHUP:
-      log_info (_("SIGHUP received - "
-                  "re-reading configuration and flushing caches\n"));
-      reread_configuration ();
-      cert_cache_deinit (0);
-      crl_cache_deinit ();
-      cert_cache_init ();
-      crl_cache_init ();
+      dirmngr_sighup_action ();
       break;
       
     case SIGUSR1: