* gpgkeys_curl.c (get_key, writer): New function to wrap around fwrite to
authorDavid Shaw <dshaw@jabberwocky.com>
Wed, 22 Dec 2004 18:07:21 +0000 (18:07 +0000)
committerDavid Shaw <dshaw@jabberwocky.com>
Wed, 22 Dec 2004 18:07:21 +0000 (18:07 +0000)
avoid DLL access problem on win32.

* gpgkeys_http.c (main, get_key): Properly pass authentication info
through to the http library.

keyserver/ChangeLog
keyserver/gpgkeys_curl.c
keyserver/gpgkeys_http.c

index d1be922..de8516d 100644 (file)
@@ -1,5 +1,11 @@
 2004-12-22  David Shaw  <dshaw@jabberwocky.com>
 
+       * gpgkeys_curl.c (get_key, writer): New function to wrap around
+       fwrite to avoid DLL access problem on win32.
+
+       * gpgkeys_http.c (main, get_key): Properly pass authentication
+       info through to the http library.
+
        * Makefile.am: Build gpgkeys_http or gpgkeys_curl as needed.
 
        * gpgkeys_curl.c (main, get_key): Minor tweaks to work with either
index c1e2840..1d206e0 100644 (file)
@@ -62,6 +62,14 @@ curl_err_to_gpg_err(CURLcode error)
     }
 }
 
+/* We wrap fwrite so to avoid DLL problems on Win32 (see curl faq for
+   more). */
+static size_t
+writer(const void *ptr,size_t size,size_t nmemb,void *stream)
+{
+  return fwrite(ptr,size,nmemb,stream);
+}
+
 static int
 get_key(char *getkey)
 {
@@ -77,7 +85,7 @@ get_key(char *getkey)
          host,port[0]?":":"",port[0]?port:"",path[0]?"":"/",path);
 
   curl_easy_setopt(curl,CURLOPT_URL,request);
-  curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,fwrite);
+  curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,writer);
   curl_easy_setopt(curl,CURLOPT_FILE,output);
   curl_easy_setopt(curl,CURLOPT_ERRORBUFFER,errorbuffer);
 
index 6c9768e..dad141f 100644 (file)
@@ -41,7 +41,7 @@ extern int optind;
 
 static int verbose=0;
 static unsigned int http_flags=0;
-static char host[80]={'\0'},proxy[80]={'\0'},port[10]={'\0'},path[1024]={'\0'};
+static char auth[128]={'\0'},host[80]={'\0'},proxy[80]={'\0'},port[10]={'\0'},path[1024]={'\0'};
 static FILE *input=NULL,*output=NULL,*console=NULL;
 
 #define BEGIN "-----BEGIN PGP PUBLIC KEY BLOCK-----"
@@ -72,8 +72,8 @@ get_key(char *getkey)
       return KEYSERVER_NO_MEMORY;
     }
 
-  sprintf(request,"http://%s%s%s%s%s",host,port[0]?":":"",
-         port[0]?port:"",path[0]?"":"/",path);
+  sprintf(request,"http://%s%s%s%s%s%s%s",auth[0]?auth:"",auth[0]?"@":"",
+         host,port[0]?":":"",port[0]?port:"",path[0]?"":"/",path);
 
   rc=http_open_document(&hd,request,http_flags,proxy[0]?proxy:NULL);
   if(rc!=0)
@@ -219,6 +219,12 @@ main(int argc,char *argv[])
          continue;
        }
 
+      if(sscanf(line,"AUTH %127s\n",auth)==1)
+       {
+         auth[127]='\0';
+         continue;
+       }
+
       if(sscanf(line,"HOST %79s\n",host)==1)
        {
          host[79]='\0';