diff --git a/keyserver/ChangeLog b/keyserver/ChangeLog index fab77f9df..ed86e2296 100644 --- a/keyserver/ChangeLog +++ b/keyserver/ChangeLog @@ -1,3 +1,16 @@ +2005-07-20 David Shaw + + * gpgkeys_curl.c (get_key, main): Don't try and be smart about + what protocols we handle. Directly pass them to curl or fake-curl + and see if an error comes back. + + * curl-shim.h, curl-shim.c (handle_error), ksutil.c + (curl_err_to_gpg_err): Add support for CURLE_UNSUPPORTED_PROTOCOL + in fake curl. + + * Makefile.am: Don't need -DFAKE_CURL any longer since it's in + config.h. + 2005-06-23 David Shaw * gpgkeys_mailto.in, gpgkeys_test.in: Use @VERSION@ so version diff --git a/keyserver/Makefile.am b/keyserver/Makefile.am index 01c059070..8f93c208e 100644 --- a/keyserver/Makefile.am +++ b/keyserver/Makefile.am @@ -44,10 +44,8 @@ if WITH_CURL gpgkeys_hkp_SOURCES += gpgkeys_hkp.c if FAKE_CURL gpgkeys_curl_SOURCES += curl-shim.c curl-shim.h -gpgkeys_curl_CPPFLAGS = -DFAKE_CURL gpgkeys_curl_LDADD = ../util/libutil.a @NETLIBS@ @SRVLIBS@ $(other_libs) @GETOPT@ @W32LIBS@ gpgkeys_hkp_SOURCES += curl-shim.c curl-shim.h -gpgkeys_hkp_CPPFLAGS = -DFAKE_CURL gpgkeys_hkp_LDADD = ../util/libutil.a @NETLIBS@ @SRVLIBS@ $(other_libs) @GETOPT@ @W32LIBS@ else gpgkeys_curl_CPPFLAGS = @LIBCURL_CPPFLAGS@ diff --git a/keyserver/curl-shim.c b/keyserver/curl-shim.c index 8575be220..3ba52a483 100644 --- a/keyserver/curl-shim.c +++ b/keyserver/curl-shim.c @@ -45,6 +45,10 @@ handle_error(CURL *curl,CURLcode err,const char *str) strcpy(curl->errorbuffer,"okay"); break; + case CURLE_UNSUPPORTED_PROTOCOL: + strcpy(curl->errorbuffer,"unsupported protocol"); + break; + case CURLE_COULDNT_CONNECT: strcpy(curl->errorbuffer,"couldn't connect"); break; @@ -217,16 +221,26 @@ curl_easy_perform(CURL *curl) } } - if(rc!=0) + switch(rc) { - if(rc==G10ERR_NETWORK) - errstr=strerror(errno); - else - errstr=g10_errstr(rc); + case 0: + break; + case G10ERR_INVALID_URI: + err=CURLE_UNSUPPORTED_PROTOCOL; + break; + + case G10ERR_NETWORK: + errstr=strerror(errno); err=CURLE_COULDNT_CONNECT; - } + break; + default: + errstr=g10_errstr(rc); + err=CURLE_COULDNT_CONNECT; + break; + } + return handle_error(curl,err,errstr); } diff --git a/keyserver/curl-shim.h b/keyserver/curl-shim.h index 6c5bc4368..c78c12960 100644 --- a/keyserver/curl-shim.h +++ b/keyserver/curl-shim.h @@ -27,6 +27,7 @@ typedef enum { CURLE_OK=0, + CURLE_UNSUPPORTED_PROTOCOL=1, CURLE_COULDNT_CONNECT=7, CURLE_FTP_COULDNT_RETR_FILE=19, CURLE_HTTP_RETURNED_ERROR=22, diff --git a/keyserver/gpgkeys_curl.c b/keyserver/gpgkeys_curl.c index 73aeb09cd..c3dce6abd 100644 --- a/keyserver/gpgkeys_curl.c +++ b/keyserver/gpgkeys_curl.c @@ -68,7 +68,7 @@ get_key(char *getkey) curl_easy_setopt(curl,CURLOPT_ERRORBUFFER,errorbuffer); res=curl_easy_perform(curl); - if(res!=0) + if(res!=CURLE_OK) { fprintf(console,"gpgkeys: %s fetch error %d: %s\n",opt->scheme, res,errorbuffer); @@ -77,7 +77,7 @@ get_key(char *getkey) else fprintf(output,"\nKEY 0x%s END\n",getkey); - return KEYSERVER_OK; + return curl_err_to_gpg_err(res); } static void @@ -226,27 +226,6 @@ main(int argc,char *argv[]) ret=KEYSERVER_SCHEME_NOT_FOUND; goto fail; } -#ifdef HTTP_VIA_LIBCURL - else if(strcasecmp(opt->scheme,"http")==0) - ; -#endif /* HTTP_VIA_LIBCURL */ -#ifdef HTTPS_VIA_LIBCURL - else if(strcasecmp(opt->scheme,"https")==0) - ; -#endif /* HTTP_VIA_LIBCURL */ -#ifdef FTP_VIA_LIBCURL - else if(strcasecmp(opt->scheme,"ftp")==0) - ; -#endif /* FTP_VIA_LIBCURL */ -#ifdef FTPS_VIA_LIBCURL - else if(strcasecmp(opt->scheme,"ftps")==0) - ; -#endif /* FTPS_VIA_LIBCURL */ - else - { - fprintf(console,"gpgkeys: scheme `%s' not supported\n",opt->scheme); - return KEYSERVER_SCHEME_NOT_FOUND; - } if(!opt->host) { diff --git a/keyserver/ksutil.c b/keyserver/ksutil.c index 813d1eb72..fd28b0390 100644 --- a/keyserver/ksutil.c +++ b/keyserver/ksutil.c @@ -342,6 +342,7 @@ curl_err_to_gpg_err(CURLcode error) switch(error) { case CURLE_FTP_COULDNT_RETR_FILE: return KEYSERVER_KEY_NOT_FOUND; + case CURLE_UNSUPPORTED_PROTOCOL: return KEYSERVER_SCHEME_NOT_FOUND; default: return KEYSERVER_INTERNAL_ERROR; } }