From STABLE-BRANCH-1-4
authorDavid Shaw <dshaw@jabberwocky.com>
Wed, 14 Mar 2007 04:24:55 +0000 (04:24 +0000)
committerDavid Shaw <dshaw@jabberwocky.com>
Wed, 14 Mar 2007 04:24:55 +0000 (04:24 +0000)
* 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.

keyserver/ChangeLog
keyserver/curl-shim.c
keyserver/curl-shim.h
keyserver/gpgkeys_curl.c

index e50826e..3e00943 100644 (file)
@@ -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
index 6c35c51..7d35320 100644 (file)
@@ -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;
 }
index e942ec7..9cec840 100644 (file)
@@ -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_ */
index 192f9ba..e326df6 100644 (file)
@@ -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);