gpg: Add dedicated error code for PGP-2 keys.
[gnupg.git] / common / logging.c
index 94e7fba..40d098c 100644 (file)
@@ -2,20 +2,31 @@
  * Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
  *               2009, 2010 Free Software Foundation, Inc.
  *
- * This file is part of JNLIB.
+ * This file is part of JNLIB, which is a subsystem of GnuPG.
  *
  * JNLIB is free software; you can redistribute it and/or modify it
- * under the terms of 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.
+ * under the terms of either
+ *
+ *   - 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.
  *
  * JNLIB 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
- * Lesser General Public License for more details.
+ * General Public License for more details.
  *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copies of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, see <http://www.gnu.org/licenses/>.
  */
 
 
@@ -30,6 +41,9 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #ifdef HAVE_W32_SYSTEM
+# ifdef HAVE_WINSOCK2_H
+#  include <winsock2.h>
+# endif
 # include <windows.h>
 #else /*!HAVE_W32_SYSTEM*/
 # include <sys/socket.h>
@@ -85,6 +99,9 @@ static char prefix_buffer[80];
 static int with_time;
 static int with_prefix;
 static int with_pid;
+#ifdef HAVE_W32_SYSTEM
+static int no_registry;
+#endif
 static int (*get_pid_suffix_cb)(unsigned long *r_value);
 static int running_detached;
 static int force_prefixes;
@@ -240,7 +257,9 @@ fun_writer (void *cookie_arg, const void *buffer, size_t size)
       else
         {
           char *addrstr, *p;
+#ifdef HAVE_INET_PTON
           void *addrbuf = NULL;
+#endif /*HAVE_INET_PTON*/
 
           addrstr = jnlib_malloc (strlen (name) + 1);
           if (!addrstr)
@@ -264,7 +283,9 @@ fun_writer (void *cookie_arg, const void *buffer, size_t size)
                   memset (&srvr_addr_in6, 0, sizeof srvr_addr_in6);
                   srvr_addr_in6.sin6_family = af;
                   srvr_addr_in6.sin6_port = htons (port);
+#ifdef HAVE_INET_PTON
                   addrbuf = &srvr_addr_in6.sin6_addr;
+#endif /*HAVE_INET_PTON*/
                   srvr_addr = (struct sockaddr *)&srvr_addr_in6;
                   addrlen = sizeof srvr_addr_in6;
 #else
@@ -289,7 +310,9 @@ fun_writer (void *cookie_arg, const void *buffer, size_t size)
                   memset (&srvr_addr_in, 0, sizeof srvr_addr_in);
                   srvr_addr_in.sin_family = af;
                   srvr_addr_in.sin_port = htons (port);
+#ifdef HAVE_INET_PTON
                   addrbuf = &srvr_addr_in.sin_addr;
+#endif /*HAVE_INET_PTON*/
                   srvr_addr = (struct sockaddr *)&srvr_addr_in;
                   addrlen = sizeof srvr_addr_in;
                 }
@@ -328,7 +351,7 @@ fun_writer (void *cookie_arg, const void *buffer, size_t size)
             {
               if (!cookie->quiet && !running_detached
                   && isatty (es_fileno (es_stderr)))
-                es_fprintf (es_stderr, "can't connect to `%s': %s\n",
+                es_fprintf (es_stderr, "can't connect to '%s': %s\n",
                             cookie->name, strerror(errno));
               sock_close (cookie->fd);
               cookie->fd = -1;
@@ -378,7 +401,7 @@ fun_writer (void *cookie_arg, const void *buffer, size_t size)
       && isatty (es_fileno (es_stderr)))
     {
       if (*cookie->name)
-        es_fprintf (es_stderr, "error writing to `%s': %s\n",
+        es_fprintf (es_stderr, "error writing to '%s': %s\n",
                     cookie->name, strerror(errno));
       else
         es_fprintf (es_stderr, "error writing to file descriptor %d: %s\n",
@@ -446,7 +469,7 @@ set_file_fd (const char *name, int fd)
     {
       HANDLE hd;
 
-      ActivateDevice (L"Drivers\\GnuPG_Log", 0);
+      ActivateDevice (L"Drivers\\"GNUPG_NAME"_Log", 0);
       /* Ignore a filename and write the debug output to the GPG2:
          device.  */
       hd = CreateFile (L"GPG2:", GENERIC_WRITE,
@@ -550,6 +573,9 @@ log_set_prefix (const char *text, unsigned int flags)
   with_time = (flags & JNLIB_LOG_WITH_TIME);
   with_pid  = (flags & JNLIB_LOG_WITH_PID);
   running_detached = (flags & JNLIB_LOG_RUN_DETACHED);
+#ifdef HAVE_W32_SYSTEM
+  no_registry = (flags & JNLIB_LOG_NO_REGISTRY);
+#endif
 }
 
 
@@ -567,6 +593,10 @@ log_get_prefix (unsigned int *flags)
         *flags |= JNLIB_LOG_WITH_PID;
       if (running_detached)
         *flags |= JNLIB_LOG_RUN_DETACHED;
+#ifdef HAVE_W32_SYSTEM
+      if (no_registry)
+        *flags |= JNLIB_LOG_NO_REGISTRY;
+#endif
     }
   return prefix_buffer;
 }
@@ -613,8 +643,10 @@ do_logv (int level, int ignore_arg_ptr, const char *fmt, va_list arg_ptr)
 #ifdef HAVE_W32_SYSTEM
       char *tmp;
 
-      tmp = read_w32_registry_string (NULL, "Software\\GNU\\GnuPG",
-                                            "DefaultLogFile");
+      tmp = (no_registry
+             ? NULL
+             : read_w32_registry_string (NULL, GNUPG_REGISTRY_DIR,
+                                         "DefaultLogFile"));
       log_set_file (tmp && *tmp? tmp : NULL);
       jnlib_free (tmp);
 #else
@@ -846,6 +878,46 @@ log_printhex (const char *text, const void *buffer, size_t length)
 }
 
 
+/*
+void
+log_printcanon () {}
+is found in sexputils.c
+*/
+
+/*
+void
+log_printsexp () {}
+is found in sexputils.c
+*/
+
+
+void
+log_clock (const char *string)
+{
+#if 0
+  static unsigned long long initial;
+  struct timespec tv;
+  unsigned long long now;
+
+  if (clock_gettime (CLOCK_REALTIME, &tv))
+    {
+      log_debug ("error getting the realtime clock value\n");
+      return;
+    }
+  now = tv.tv_sec * 1000000000ull;
+  now += tv.tv_nsec;
+
+  if (!initial)
+    initial = now;
+
+  log_debug ("[%6llu] %s", (now - initial)/1000, string);
+#else
+  /* You need to link with -ltr to enable the above code.  */
+  log_debug ("[not enabled in the source] %s", string);
+#endif
+}
+
+
 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 )
 void
 bug_at( const char *file, int line, const char *func )