W32 related keyserver fixes.
authorWerner Koch <wk@gnupg.org>
Mon, 21 Apr 2008 19:13:36 +0000 (19:13 +0000)
committerWerner Koch <wk@gnupg.org>
Mon, 21 Apr 2008 19:13:36 +0000 (19:13 +0000)
NEWS
common/ChangeLog
common/http.c
common/i18n.c
keyserver/ChangeLog
keyserver/curl-shim.c
keyserver/gpgkeys_finger.c
keyserver/ksutil.c
keyserver/ksutil.h
scd/ChangeLog

diff --git a/NEWS b/NEWS
index 5e19ff2..4d776dc 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,8 @@ Noteworthy changes in version 2.0.10 (unreleased)
  * New mechanisms "local" and "nodefault" for --auto-key-locate [gpg].
    Fixed a few problems with this option.
 
+ * [W32] Initialize the socket subsystem for all keyserver helpers.
+
 
 Noteworthy changes in version 2.0.9 (2008-03-26)
 ------------------------------------------------
index 3cc5426..943b9f0 100644 (file)
@@ -1,3 +1,9 @@
+2008-04-21  Werner Koch  <wk@g10code.com>
+
+       * http.c (http_wait_response) [W32]: Use DuplicateHandle because
+       it is a socket.
+       (cookie_read) [W32]: Use recv in place of read.
+
 2008-04-08  Werner Koch  <wk@g10code.com>
 
        * i18n.c (i18n_switchto_utf8, i18n_switchback)
index 5f7c053..4dda27a 100644 (file)
@@ -396,7 +396,16 @@ http_wait_response (http_t hd)
   else
 #endif /*HTTP_USE_ESTREAM*/
     {
+#ifdef HAVE_W32_SYSTEM
+      HANDLE handle = (HANDLE)hd->sock;
+      if (!DuplicateHandle (GetCurrentProcess(), handle,
+                           GetCurrentProcess(), &handle, 0,
+                           TRUE, DUPLICATE_SAME_ACCESS ))
+       return gpg_error_from_syserror ();
+      hd->sock = (int)handle;
+#else
       hd->sock = dup (hd->sock);
+#endif
       if (hd->sock == -1)
         return gpg_error_from_syserror ();
     }
@@ -1490,7 +1499,7 @@ start_server ()
 }
 #endif
 
-/* Actually connect to a server.  Returns the file descripto or -1 on
+/* Actually connect to a server.  Returns the file descriptor or -1 on
    error.  ERRNO is set on error. */
 static int
 connect_server (const char *server, unsigned short port,
@@ -1765,7 +1774,12 @@ cookie_read (void *cookie, void *buffer, size_t size)
     {
       do
         {
+#ifdef HAVE_W32_SYSTEM
+          /* Under Windows we need to use recv for a socket.  */
+          nread = recv (c->fd, buffer, size, 0);
+#else          
           nread = read (c->fd, buffer, size);
+#endif
         }
       while (nread == -1 && errno == EINTR);
     }
index 7ed4bb4..7db8e20 100644 (file)
@@ -52,7 +52,7 @@ i18n_switchto_utf8 (void)
 {
 #ifdef USE_SIMPLE_GETTEXT
   gettext_select_utf8 (1);
-#elif define(ENABLE_NLS)
+#elif defined(ENABLE_NLS)
   char *orig_codeset = bind_textdomain_codeset (PACKAGE_GT, NULL);
 # ifdef HAVE_LANGINFO_CODESET
   if (!orig_codeset)
index 28a5ed5..be11f7d 100644 (file)
@@ -1,3 +1,11 @@
+2008-04-21  Werner Koch  <wk@g10code.com>
+
+       * ksutil.c (w32_init_sockets) [HAVE_W32_SYSTEM]: New.
+       * curl-shim.c (curl_easy_init) [HAVE_W32_SYSTEM]: Call it.
+       * gpgkeys_finger.c: s/_WIN32/HAVE_W32_SYSTEM/.
+       (init_sockets): Remove.
+       (connect_server) [HAVE_W32_SYSTEM]: Call new function.  
+
 2008-04-14  David Shaw  <dshaw@jabberwocky.com>
 
        * gpgkeys_curl.c (main), gpgkeys_hkp.c (main): Make sure all
index 74b3f17..dfa3d1e 100644 (file)
@@ -89,6 +89,10 @@ curl_easy_init(void)
 {
   CURL *handle;
 
+#ifdef HAVE_W32_SYSTEM
+  w32_init_sockets ();
+#endif
+
   handle=calloc(1,sizeof(CURL));
   if(handle)
     handle->errors=stderr;
index 9933991..cdca85e 100644 (file)
@@ -27,7 +27,7 @@
 #include <getopt.h>
 #endif
 
-#ifdef _WIN32
+#ifdef HAVE_W32_SYSTEM
 #include <windows.h>
 #else
 #include <unistd.h>
@@ -46,7 +46,7 @@
 #include "ksutil.h"
 #include "iobuf.h"
 
-#ifdef _WIN32
+#ifdef HAVE_W32_SYSTEM
 #define sock_close(a)  closesocket(a)
 #else
 #define sock_close(a)  close(a)
@@ -58,40 +58,6 @@ extern int optind;
 static FILE *input,*output,*console;
 static struct ks_options *opt;
 
-#ifdef _WIN32
-static void
-deinit_sockets (void)
-{
-  WSACleanup();
-}
-
-static void
-init_sockets (void)
-{
-  static int initialized;
-  static WSADATA wsdata;
-
-  if (initialized)
-    return;
-
-  if (WSAStartup (0x0101, &wsdata) )
-    {
-      fprintf (console, "error initializing socket library: ec=%d\n", 
-               (int)WSAGetLastError () );
-      return;
-    }
-  if (wsdata.wVersion < 0x0001)
-    {
-      fprintf (console, "socket library version is %x.%x - but 1.1 needed\n",
-               LOBYTE(wsdata.wVersion), HIBYTE(wsdata.wVersion));
-      WSACleanup();
-      return;
-    }
-  atexit  (deinit_sockets);
-  initialized = 1;
-}
-#endif /*_WIN32*/
-
 
 /* Connect to SERVER at PORT and return a file descriptor or -1 on
    error. */
@@ -100,12 +66,12 @@ connect_server (const char *server, unsigned short port)
 {
   int sock = -1;
 
-#ifdef _WIN32
+#ifdef HAVE_W32_SYSTEM
   struct hostent *hp;
   struct sockaddr_in addr;
   unsigned long l;
 
-  init_sockets ();
+  w32_init_sockets ();
 
   memset (&addr, 0, sizeof addr);
   addr.sin_family = AF_INET;
@@ -201,7 +167,7 @@ write_server (int sock, const char *data, size_t length)
     {
       int nwritten;
       
-#ifdef _WIN32  
+#ifdef HAVE_W32_SYSTEM  
       nwritten = send (sock, data, nleft, 0);
       if ( nwritten == SOCKET_ERROR )
         {
index 04e21b6..b25f8eb 100644 (file)
 #include <string.h>
 #include <stdlib.h>
 
+#ifdef HAVE_W32_SYSTEM
+#include <windows.h>
+#endif
+
 #ifdef HAVE_LIBCURL
 #include <curl/curl.h>
 #else
@@ -83,6 +87,22 @@ register_timeout(void)
 
 #endif /* !HAVE_DOSISH_SYSTEM */
 
+#ifdef HAVE_W32_SYSTEM
+void
+w32_init_sockets (void)
+{
+  static int initialized;
+  static WSADATA wsdata;
+
+  if (!initialized)
+    {
+      WSAStartup (0x0202, &wsdata);
+      initialized = 1;
+    }
+}
+#endif /*HAVE_W32_SYSTEM*/
+
+
 struct ks_options *
 init_ks_options(void)
 {
index 3068592..9f51359 100644 (file)
@@ -79,6 +79,11 @@ struct keylist
 unsigned int set_timeout(unsigned int seconds);
 int register_timeout(void);
 
+#ifdef HAVE_W32_SYSTEM
+void w32_init_sockets (void);
+#endif
+
+
 enum ks_action {KS_UNKNOWN=0,KS_GET,KS_GETNAME,KS_SEND,KS_SEARCH};
 
 enum ks_search_type {KS_SEARCH_SUBSTR,KS_SEARCH_EXACT,
index a2ebbdc..41a9e33 100644 (file)
@@ -1,4 +1,4 @@
-2008-04-21  Werner Koch  <wk@g10code.com>
+2008-04-21  Moritz Schulte  <mo@g10code.com>  (wk)
 
        * app-openpgp.c (verify_a_chv): Make use of the default CHV flag.