diff --git a/keyserver/ChangeLog b/keyserver/ChangeLog index ab689e4df..fab77f9df 100644 --- a/keyserver/ChangeLog +++ b/keyserver/ChangeLog @@ -1,5 +1,17 @@ 2005-06-23 David Shaw + * gpgkeys_mailto.in, gpgkeys_test.in: Use @VERSION@ so version + string stays up to date. + + * gpgkeys_http.c: Don't need to define HTTP_PROXY_ENV here since + it's in ksutil.h. + + * gpgkeys_curl.c (get_key, main), gpgkeys_hkp.c (main): Pass AUTH + values to curl or curl-shim. + + * curl-shim.c (curl_easy_perform), gpgkeys_curl.c (main), + gpgkeys_hkp.c (main): Use curl-style proxy semantics. + * curl-shim.h, curl-shim.c (curl_easy_setopt, curl_easy_perform): Add CURLOPT_USERPWD option for HTTP auth. diff --git a/keyserver/curl-shim.c b/keyserver/curl-shim.c index 4828f5253..8575be220 100644 --- a/keyserver/curl-shim.c +++ b/keyserver/curl-shim.c @@ -29,6 +29,7 @@ #include #include "http.h" #include "util.h" +#include "ksutil.h" #include "curl-shim.h" static CURLcode @@ -142,10 +143,24 @@ curl_easy_perform(CURL *curl) int rc; CURLcode err=CURLE_OK; const char *errstr=NULL; + char *proxy=NULL; + + /* Emulate the libcurl proxy behavior. If the calling program set a + proxy, use it. If it didn't set a proxy or set it to NULL, check + for one in the environment. If the calling program explicitly + set a null-string proxy, don't set a proxy at all. */ + + if(curl->proxy) + { + if(*curl->proxy) + proxy=curl->proxy; + } + else + proxy=getenv(HTTP_PROXY_ENV); if(curl->flags.post) { - rc=http_open(&curl->hd,HTTP_REQ_POST,curl->url,curl->auth,0,curl->proxy); + rc=http_open(&curl->hd,HTTP_REQ_POST,curl->url,curl->auth,0,proxy); if(rc==0) { char content_len[50]; @@ -166,7 +181,7 @@ curl_easy_perform(CURL *curl) } else { - rc=http_open(&curl->hd,HTTP_REQ_GET,curl->url,curl->auth,0,curl->proxy); + rc=http_open(&curl->hd,HTTP_REQ_GET,curl->url,curl->auth,0,proxy); if(rc==0) { rc=http_wait_response(&curl->hd,&curl->status); diff --git a/keyserver/gpgkeys_curl.c b/keyserver/gpgkeys_curl.c index e935bb879..73aeb09cd 100644 --- a/keyserver/gpgkeys_curl.c +++ b/keyserver/gpgkeys_curl.c @@ -58,11 +58,8 @@ get_key(char *getkey) fprintf(output,"KEY 0x%s BEGIN\n",getkey); - sprintf(request,"%s://%s%s%s%s%s%s",opt->scheme, - opt->auth?opt->auth:"", - opt->auth?"@":"",opt->host, - opt->port?":":"",opt->port?opt->port:"", - opt->path?opt->path:"/"); + sprintf(request,"%s://%s%s%s%s",opt->scheme,opt->host, + opt->port?":":"",opt->port?opt->port:"",opt->path?opt->path:"/"); curl_easy_setopt(curl,CURLOPT_URL,request); curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,curl_writer); @@ -98,7 +95,7 @@ main(int argc,char *argv[]) char line[MAX_LINE]; char *thekey=NULL; long follow_redirects=5; - char proxy[MAX_PROXY+1]; + char *proxy=NULL; console=stderr; @@ -193,20 +190,19 @@ main(int argc,char *argv[]) if(strncasecmp(start,"http-proxy",10)==0) { + /* Safe to not check the return code of strdup() here. + If it fails, we simply won't use a proxy. */ if(no) - proxy[0]='\0'; + { + free(proxy); + proxy=strdup(""); + } else if(start[10]=='=') { - strncpy(proxy,&start[11],MAX_PROXY); - proxy[MAX_PROXY]='\0'; - } - else if(start[10]=='\0') - { - char *http_proxy=getenv(HTTP_PROXY_ENV); - if(http_proxy) + if(strlen(&start[11])auth) + curl_easy_setopt(curl,CURLOPT_USERPWD,opt->auth); + if(opt->debug) { curl_easy_setopt(curl,CURLOPT_STDERR,console); @@ -289,7 +288,7 @@ main(int argc,char *argv[]) curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,opt->flags.check_cert); curl_easy_setopt(curl,CURLOPT_CAINFO,opt->ca_cert_file); - if(proxy[0]) + if(proxy) curl_easy_setopt(curl,CURLOPT_PROXY,proxy); /* If it's a GET or a SEARCH, the next thing to come in is the @@ -372,6 +371,8 @@ main(int argc,char *argv[]) if(curl) curl_easy_cleanup(curl); + free(proxy); + curl_global_cleanup(); return ret; diff --git a/keyserver/gpgkeys_hkp.c b/keyserver/gpgkeys_hkp.c index 66f5a2cb0..1904cdefc 100644 --- a/keyserver/gpgkeys_hkp.c +++ b/keyserver/gpgkeys_hkp.c @@ -39,7 +39,6 @@ extern char *optarg; extern int optind; -static char proxy[MAX_PROXY+1]; static FILE *input,*output,*console; static CURL *curl; static struct ks_options *opt; @@ -384,6 +383,7 @@ main(int argc,char *argv[]) char line[MAX_LINE]; int failed=0; struct keylist *keylist=NULL,*keyptr=NULL; + char *proxy=NULL; console=stderr; @@ -479,19 +479,16 @@ main(int argc,char *argv[]) if(strncasecmp(start,"http-proxy",10)==0) { if(no) - proxy[0]='\0'; + { + free(proxy); + proxy=strdup(""); + } else if(start[10]=='=') { - strncpy(proxy,&start[11],MAX_PROXY); - proxy[MAX_PROXY]='\0'; - } - else if(start[10]=='\0') - { - char *http_proxy=getenv(HTTP_PROXY_ENV); - if(http_proxy) + if(strlen(&start[11])auth) + curl_easy_setopt(curl,CURLOPT_USERPWD,opt->auth); + if(opt->debug) { curl_easy_setopt(curl,CURLOPT_STDERR,console); curl_easy_setopt(curl,CURLOPT_VERBOSE,1); } - if(proxy[0]) + if(proxy) curl_easy_setopt(curl,CURLOPT_PROXY,proxy); #if 0 @@ -704,5 +704,12 @@ main(int argc,char *argv[]) if(output!=stdout) fclose(output); + free_ks_options(opt); + + if(curl) + curl_easy_cleanup(curl); + + free(proxy); + return ret; } diff --git a/keyserver/gpgkeys_http.c b/keyserver/gpgkeys_http.c index 158fec9ad..4a8844dfe 100644 --- a/keyserver/gpgkeys_http.c +++ b/keyserver/gpgkeys_http.c @@ -48,12 +48,6 @@ static char port[MAX_PORT+1]; static char path[URLMAX_PATH+1]; static FILE *input,*output,*console; -#ifdef __riscos__ -#define HTTP_PROXY_ENV "GnuPG$HttpProxy" -#else -#define HTTP_PROXY_ENV "http_proxy" -#endif - static int get_key(char *getkey) { diff --git a/keyserver/gpgkeys_mailto.in b/keyserver/gpgkeys_mailto.in index c20706ce8..e37f5c0bc 100755 --- a/keyserver/gpgkeys_mailto.in +++ b/keyserver/gpgkeys_mailto.in @@ -27,7 +27,7 @@ $sendmail="@SENDMAIL@ -t"; sub VERSION_MESSAGE () { - print STDOUT "gpgkeys_mailto (GnuPG) 1.3.91-cvs\n"; + print STDOUT "gpgkeys_mailto (GnuPG) @VERSION@\n"; } sub HELP_MESSAGE () diff --git a/keyserver/gpgkeys_test.in b/keyserver/gpgkeys_test.in index 07b63489d..97748cd3f 100755 --- a/keyserver/gpgkeys_test.in +++ b/keyserver/gpgkeys_test.in @@ -26,7 +26,7 @@ $|=1; sub VERSION_MESSAGE () { - print STDOUT "gpgkeys_test (GnuPG) 1.3.91-cvs\n"; + print STDOUT "gpgkeys_test (GnuPG) @VERSION@\n"; } sub HELP_MESSAGE ()