diff options
author | Werner Koch <[email protected]> | 2008-04-21 19:13:36 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2008-04-21 19:13:36 +0000 |
commit | 08a612f26e7657daf7adb39cc62b91ab76e488fb (patch) | |
tree | c2f33a0073571cd5d47dc42a777f855cc75384a1 | |
parent | Use default PIN flag (diff) | |
download | gnupg-08a612f26e7657daf7adb39cc62b91ab76e488fb.tar.gz gnupg-08a612f26e7657daf7adb39cc62b91ab76e488fb.zip |
W32 related keyserver fixes.
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | common/ChangeLog | 6 | ||||
-rw-r--r-- | common/http.c | 16 | ||||
-rw-r--r-- | common/i18n.c | 2 | ||||
-rw-r--r-- | keyserver/ChangeLog | 8 | ||||
-rw-r--r-- | keyserver/curl-shim.c | 4 | ||||
-rw-r--r-- | keyserver/gpgkeys_finger.c | 44 | ||||
-rw-r--r-- | keyserver/ksutil.c | 20 | ||||
-rw-r--r-- | keyserver/ksutil.h | 5 | ||||
-rw-r--r-- | scd/ChangeLog | 2 |
10 files changed, 67 insertions, 42 deletions
@@ -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. |