From 0361c6f01b94ebf6a390caf4524b2369233218ae Mon Sep 17 00:00:00 2001 From: David Shaw Date: Wed, 22 Dec 2004 18:07:21 +0000 Subject: [PATCH] * 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. --- keyserver/ChangeLog | 6 ++++++ keyserver/gpgkeys_curl.c | 10 +++++++++- keyserver/gpgkeys_http.c | 12 +++++++++--- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/keyserver/ChangeLog b/keyserver/ChangeLog index d1be92262..de8516dcf 100644 --- a/keyserver/ChangeLog +++ b/keyserver/ChangeLog @@ -1,5 +1,11 @@ 2004-12-22 David Shaw + * 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 diff --git a/keyserver/gpgkeys_curl.c b/keyserver/gpgkeys_curl.c index c1e2840ff..1d206e0c5 100644 --- a/keyserver/gpgkeys_curl.c +++ b/keyserver/gpgkeys_curl.c @@ -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); diff --git a/keyserver/gpgkeys_http.c b/keyserver/gpgkeys_http.c index 6c9768e42..dad141fd6 100644 --- a/keyserver/gpgkeys_http.c +++ b/keyserver/gpgkeys_http.c @@ -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';