summaryrefslogtreecommitdiffstats
path: root/keyserver
diff options
context:
space:
mode:
authorDavid Shaw <dshaw@jabberwocky.com>2007-03-14 05:24:55 +0100
committerDavid Shaw <dshaw@jabberwocky.com>2007-03-14 05:24:55 +0100
commit458efc1d6f84262f72471de173e5f8bb065cbec8 (patch)
tree351d476109019708aadab0ad6140802310217a62 /keyserver
parentFrom STABLE-BRANCH-1-4 (diff)
downloadgnupg2-458efc1d6f84262f72471de173e5f8bb065cbec8.tar.xz
gnupg2-458efc1d6f84262f72471de173e5f8bb065cbec8.zip
From STABLE-BRANCH-1-4
* gpgkeys_curl.c (main): Use curl_version_info to verify that the protocol we're about to use is actually available. * curl-shim.h, curl-shim.c (curl_free): Make into a macro. (curl_version_info): New. Only advertises "http" for our shim, of course.
Diffstat (limited to 'keyserver')
-rw-r--r--keyserver/ChangeLog11
-rw-r--r--keyserver/curl-shim.c11
-rw-r--r--keyserver/curl-shim.h9
-rw-r--r--keyserver/gpgkeys_curl.c20
4 files changed, 45 insertions, 6 deletions
diff --git a/keyserver/ChangeLog b/keyserver/ChangeLog
index e50826eef..3e009430a 100644
--- a/keyserver/ChangeLog
+++ b/keyserver/ChangeLog
@@ -1,3 +1,14 @@
+2007-03-13 David Shaw <dshaw@jabberwocky.com>
+
+ From STABLE-BRANCH-1-4
+
+ * gpgkeys_curl.c (main): Use curl_version_info to verify that the
+ protocol we're about to use is actually available.
+
+ * curl-shim.h, curl-shim.c (curl_free): Make into a macro.
+ (curl_version_info): New. Only advertises "http" for our shim, of
+ course.
+
2007-03-09 David Shaw <dshaw@jabberwocky.com>
From STABLE-BRANCH-1-4
diff --git a/keyserver/curl-shim.c b/keyserver/curl-shim.c
index 6c35c51d4..7d35320db 100644
--- a/keyserver/curl-shim.c
+++ b/keyserver/curl-shim.c
@@ -332,8 +332,13 @@ curl_escape(char *str,int length)
return enc;
}
-void
-curl_free(char *ptr)
+curl_version_info_data *
+curl_version_info(int type)
{
- free(ptr);
+ static curl_version_info_data data;
+ static const char *protocols[]={"http",NULL};
+
+ data.protocols=protocols;
+
+ return &data;
}
diff --git a/keyserver/curl-shim.h b/keyserver/curl-shim.h
index e942ec710..9cec84065 100644
--- a/keyserver/curl-shim.h
+++ b/keyserver/curl-shim.h
@@ -76,8 +76,14 @@ typedef struct
http_t hd;
} CURL;
+typedef struct
+{
+ const char **protocols;
+} curl_version_info_data;
+
#define CURL_ERROR_SIZE 256
#define CURL_GLOBAL_DEFAULT 0
+#define CURLVERSION_NOW 0
CURLcode curl_global_init(long flags);
void curl_global_cleanup(void);
@@ -86,7 +92,8 @@ CURLcode curl_easy_setopt(CURL *curl,CURLoption option,...);
CURLcode curl_easy_perform(CURL *curl);
void curl_easy_cleanup(CURL *curl);
char *curl_escape(char *str,int len);
-void curl_free(char *ptr);
+#define curl_free(x) free(x)
#define curl_version() "GnuPG curl-shim "VERSION
+curl_version_info_data *curl_version_info(int type);
#endif /* !_CURL_SHIM_H_ */
diff --git a/keyserver/gpgkeys_curl.c b/keyserver/gpgkeys_curl.c
index 192f9ba66..e326df63c 100644
--- a/keyserver/gpgkeys_curl.c
+++ b/keyserver/gpgkeys_curl.c
@@ -1,5 +1,5 @@
/* gpgkeys_curl.c - fetch a key via libcurl
- * Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+ * Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
*
* This file is part of GnuPG.
*
@@ -112,11 +112,12 @@ show_help (FILE *fp)
int
main(int argc,char *argv[])
{
- int arg,ret=KEYSERVER_INTERNAL_ERROR;
+ int arg,ret=KEYSERVER_INTERNAL_ERROR,i;
char line[MAX_LINE];
char *thekey=NULL;
long follow_redirects=5;
char *proxy=NULL;
+ curl_version_info_data *curldata;
console=stderr;
@@ -261,6 +262,7 @@ main(int argc,char *argv[])
}
curl_global_init(CURL_GLOBAL_DEFAULT);
+
curl=curl_easy_init();
if(!curl)
{
@@ -269,6 +271,20 @@ main(int argc,char *argv[])
goto fail;
}
+ /* Make sure we have the protocol the user is asking for so we can
+ print a nicer error message. */
+ curldata=curl_version_info(CURLVERSION_NOW);
+ for(i=0;curldata->protocols[i];i++)
+ if(strcasecmp(curldata->protocols[i],opt->scheme)==0)
+ break;
+
+ if(curldata->protocols[i]==NULL)
+ {
+ fprintf(console,"gpgkeys: protocol `%s' not supported\n",opt->scheme);
+ ret=KEYSERVER_SCHEME_NOT_FOUND;
+ goto fail;
+ }
+
if(follow_redirects)
{
curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1);