aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--keyserver/ChangeLog13
-rw-r--r--keyserver/Makefile.am2
-rw-r--r--keyserver/curl-shim.c26
-rw-r--r--keyserver/curl-shim.h1
-rw-r--r--keyserver/gpgkeys_curl.c25
-rw-r--r--keyserver/ksutil.c1
6 files changed, 37 insertions, 31 deletions
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 <[email protected]>
+
+ * 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 <[email protected]>
* 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;
}
}