1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-06-27 02:02:45 +02:00

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.
This commit is contained in:
David Shaw 2007-03-14 04:24:55 +00:00
parent 24feaa4f8a
commit 458efc1d6f
4 changed files with 45 additions and 6 deletions

View 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> 2007-03-09 David Shaw <dshaw@jabberwocky.com>
From STABLE-BRANCH-1-4 From STABLE-BRANCH-1-4

View File

@ -332,8 +332,13 @@ curl_escape(char *str,int length)
return enc; return enc;
} }
void curl_version_info_data *
curl_free(char *ptr) curl_version_info(int type)
{ {
free(ptr); static curl_version_info_data data;
static const char *protocols[]={"http",NULL};
data.protocols=protocols;
return &data;
} }

View File

@ -76,8 +76,14 @@ typedef struct
http_t hd; http_t hd;
} CURL; } CURL;
typedef struct
{
const char **protocols;
} curl_version_info_data;
#define CURL_ERROR_SIZE 256 #define CURL_ERROR_SIZE 256
#define CURL_GLOBAL_DEFAULT 0 #define CURL_GLOBAL_DEFAULT 0
#define CURLVERSION_NOW 0
CURLcode curl_global_init(long flags); CURLcode curl_global_init(long flags);
void curl_global_cleanup(void); void curl_global_cleanup(void);
@ -86,7 +92,8 @@ CURLcode curl_easy_setopt(CURL *curl,CURLoption option,...);
CURLcode curl_easy_perform(CURL *curl); CURLcode curl_easy_perform(CURL *curl);
void curl_easy_cleanup(CURL *curl); void curl_easy_cleanup(CURL *curl);
char *curl_escape(char *str,int len); 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 #define curl_version() "GnuPG curl-shim "VERSION
curl_version_info_data *curl_version_info(int type);
#endif /* !_CURL_SHIM_H_ */ #endif /* !_CURL_SHIM_H_ */

View File

@ -1,5 +1,5 @@
/* gpgkeys_curl.c - fetch a key via libcurl /* 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. * This file is part of GnuPG.
* *
@ -112,11 +112,12 @@ show_help (FILE *fp)
int int
main(int argc,char *argv[]) main(int argc,char *argv[])
{ {
int arg,ret=KEYSERVER_INTERNAL_ERROR; int arg,ret=KEYSERVER_INTERNAL_ERROR,i;
char line[MAX_LINE]; char line[MAX_LINE];
char *thekey=NULL; char *thekey=NULL;
long follow_redirects=5; long follow_redirects=5;
char *proxy=NULL; char *proxy=NULL;
curl_version_info_data *curldata;
console=stderr; console=stderr;
@ -261,6 +262,7 @@ main(int argc,char *argv[])
} }
curl_global_init(CURL_GLOBAL_DEFAULT); curl_global_init(CURL_GLOBAL_DEFAULT);
curl=curl_easy_init(); curl=curl_easy_init();
if(!curl) if(!curl)
{ {
@ -269,6 +271,20 @@ main(int argc,char *argv[])
goto fail; 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) if(follow_redirects)
{ {
curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1); curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1);