aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2008-04-21 19:13:36 +0000
committerWerner Koch <[email protected]>2008-04-21 19:13:36 +0000
commit08a612f26e7657daf7adb39cc62b91ab76e488fb (patch)
treec2f33a0073571cd5d47dc42a777f855cc75384a1
parentUse default PIN flag (diff)
downloadgnupg-08a612f26e7657daf7adb39cc62b91ab76e488fb.tar.gz
gnupg-08a612f26e7657daf7adb39cc62b91ab76e488fb.zip
W32 related keyserver fixes.
-rw-r--r--NEWS2
-rw-r--r--common/ChangeLog6
-rw-r--r--common/http.c16
-rw-r--r--common/i18n.c2
-rw-r--r--keyserver/ChangeLog8
-rw-r--r--keyserver/curl-shim.c4
-rw-r--r--keyserver/gpgkeys_finger.c44
-rw-r--r--keyserver/ksutil.c20
-rw-r--r--keyserver/ksutil.h5
-rw-r--r--scd/ChangeLog2
10 files changed, 67 insertions, 42 deletions
diff --git a/NEWS b/NEWS
index 5e19ff267..4d776dcdd 100644
--- 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)
------------------------------------------------
diff --git a/common/ChangeLog b/common/ChangeLog
index 3cc542682..943b9f033 100644
--- a/common/ChangeLog
+++ b/common/ChangeLog
@@ -1,3 +1,9 @@
+2008-04-21 Werner Koch <[email protected]>
+
+ * 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 <[email protected]>
* i18n.c (i18n_switchto_utf8, i18n_switchback)
diff --git a/common/http.c b/common/http.c
index 5f7c053fd..4dda27a2c 100644
--- a/common/http.c
+++ b/common/http.c
@@ -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);
}
diff --git a/common/i18n.c b/common/i18n.c
index 7ed4bb4de..7db8e20c5 100644
--- a/common/i18n.c
+++ b/common/i18n.c
@@ -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)
diff --git a/keyserver/ChangeLog b/keyserver/ChangeLog
index 28a5ed5c1..be11f7de5 100644
--- a/keyserver/ChangeLog
+++ b/keyserver/ChangeLog
@@ -1,3 +1,11 @@
+2008-04-21 Werner Koch <[email protected]>
+
+ * 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 <[email protected]>
* gpgkeys_curl.c (main), gpgkeys_hkp.c (main): Make sure all
diff --git a/keyserver/curl-shim.c b/keyserver/curl-shim.c
index 74b3f17e0..dfa3d1e3c 100644
--- a/keyserver/curl-shim.c
+++ b/keyserver/curl-shim.c
@@ -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;
diff --git a/keyserver/gpgkeys_finger.c b/keyserver/gpgkeys_finger.c
index 9933991b1..cdca85ef4 100644
--- a/keyserver/gpgkeys_finger.c
+++ b/keyserver/gpgkeys_finger.c
@@ -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 )
{
diff --git a/keyserver/ksutil.c b/keyserver/ksutil.c
index 04e21b6a8..b25f8eb7b 100644
--- a/keyserver/ksutil.c
+++ b/keyserver/ksutil.c
@@ -35,6 +35,10 @@
#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)
{
diff --git a/keyserver/ksutil.h b/keyserver/ksutil.h
index 3068592e8..9f51359df 100644
--- a/keyserver/ksutil.h
+++ b/keyserver/ksutil.h
@@ -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,
diff --git a/scd/ChangeLog b/scd/ChangeLog
index a2ebbdc78..41a9e3395 100644
--- a/scd/ChangeLog
+++ b/scd/ChangeLog
@@ -1,4 +1,4 @@
-2008-04-21 Werner Koch <[email protected]>
+2008-04-21 Moritz Schulte <[email protected]> (wk)
* app-openpgp.c (verify_a_chv): Make use of the default CHV flag.