aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--keyserver/ChangeLog7
-rw-r--r--keyserver/Makefile.am16
-rw-r--r--keyserver/gpgkeys_curl.c (renamed from keyserver/gpgkeys_ftp.c)61
3 files changed, 67 insertions, 17 deletions
diff --git a/keyserver/ChangeLog b/keyserver/ChangeLog
index f4ae97201..d1be92262 100644
--- a/keyserver/ChangeLog
+++ b/keyserver/ChangeLog
@@ -1,5 +1,12 @@
2004-12-22 David Shaw <[email protected]>
+ * Makefile.am: Build gpgkeys_http or gpgkeys_curl as needed.
+
+ * gpgkeys_curl.c (main, get_key): Minor tweaks to work with either
+ FTP or HTTP.
+
+ * gpgkeys_ftp.c: renamed to gpgkeys_curl.c.
+
* gpgkeys_ftp.c (main, get_key): Use auth data as passed by gpg.
Use CURLOPT_FILE instead of CURLOPT_WRITEDATA (same option, but
backwards compatible).
diff --git a/keyserver/Makefile.am b/keyserver/Makefile.am
index 22b202b8c..ce24ca62b 100644
--- a/keyserver/Makefile.am
+++ b/keyserver/Makefile.am
@@ -19,19 +19,25 @@
## Process this file with automake to produce Makefile.in
INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/intl
-EXTRA_PROGRAMS = gpgkeys_ldap gpgkeys_hkp gpgkeys_http gpgkeys_finger gpgkeys_ftp
+EXTRA_PROGRAMS = gpgkeys_ldap gpgkeys_hkp gpgkeys_http gpgkeys_finger gpgkeys_curl
EXTRA_SCRIPTS = gpgkeys_mailto
libexecdir = @libexecdir@/@PACKAGE@
-libexec_PROGRAMS = @GPGKEYS_LDAP@ @GPGKEYS_HKP@ @GPGKEYS_HTTP@ @GPGKEYS_FINGER@ @GPGKEYS_FTP@
+libexec_PROGRAMS = @GPGKEYS_LDAP@ @GPGKEYS_HKP@ @GPGKEYS_FINGER@
libexec_SCRIPTS = @GPGKEYS_MAILTO@
noinst_SCRIPTS = gpgkeys_test
+if HAVE_LIBCURL
+libexec_PROGRAMS += @GPGKEYS_CURL@
+else
+libexec_PROGRAMS += @GPGKEYS_HTTP@
+endif
+
gpgkeys_ldap_SOURCES = gpgkeys_ldap.c ksutil.c ksutil.h
gpgkeys_hkp_SOURCES = gpgkeys_hkp.c ksutil.c ksutil.h
gpgkeys_http_SOURCES = gpgkeys_http.c ksutil.c ksutil.h
gpgkeys_finger_SOURCES = gpgkeys_finger.c ksutil.c ksutil.h
-gpgkeys_ftp_SOURCES = gpgkeys_ftp.c ksutil.c ksutil.h
+gpgkeys_curl_SOURCES = gpgkeys_curl.c ksutil.c ksutil.h
other_libs = $(LIBICONV) $(LIBINTL) $(CAPLIBS)
@@ -39,5 +45,5 @@ gpgkeys_ldap_LDADD = ../util/libutil.a @LDAPLIBS@ @NETLIBS@ $(other_libs) @GETOP
gpgkeys_hkp_LDADD = ../util/libutil.a @NETLIBS@ @SRVLIBS@ $(other_libs) @GETOPT@ @W32LIBS@
gpgkeys_http_LDADD = ../util/libutil.a @NETLIBS@ @SRVLIBS@ $(other_libs) @GETOPT@ @W32LIBS@
gpgkeys_finger_LDADD = ../util/libutil.a @NETLIBS@ $(other_libs) @GETOPT@ @W32LIBS@
-gpgkeys_ftp_CPPFLAGS = @LIBCURL_INCLUDES@
-gpgkeys_ftp_LDADD = @LIBCURL@ @GETOPT@
+gpgkeys_curl_CPPFLAGS = @LIBCURL_INCLUDES@
+gpgkeys_curl_LDADD = @LIBCURL@ @GETOPT@
diff --git a/keyserver/gpgkeys_ftp.c b/keyserver/gpgkeys_curl.c
index 74977e351..c1e2840ff 100644
--- a/keyserver/gpgkeys_ftp.c
+++ b/keyserver/gpgkeys_curl.c
@@ -1,4 +1,4 @@
-/* gpgkeys_ftp.c - fetch a key via FTP
+/* gpgkeys_curl.c - fetch a key via libcurl
* Copyright (C) 2004 Free Software Foundation, Inc.
*
* This file is part of GnuPG.
@@ -35,23 +35,34 @@ extern char *optarg;
extern int optind;
#define GET 0
+#define MAX_SCHEME 20
#define MAX_LINE 80
#define MAX_PATH 1023
#define MAX_AUTH 127
#define MAX_HOST 79
#define MAX_PORT 9
-#define MAX_URL (3+3+MAX_AUTH+1+MAX_HOST+1+1+MAX_PORT+1+1+MAX_PATH+1+50)
+#define MAX_URL (MAX_SCHEME+3+MAX_AUTH+1+1+MAX_HOST+1+1+MAX_PORT+1+1+MAX_PATH+1+50)
#define STRINGIFY(x) #x
#define MKSTRING(x) STRINGIFY(x)
static int verbose=0;
-static char auth[MAX_AUTH+1],host[MAX_HOST+1]={'\0'},port[MAX_PORT+1]={'\0'},path[MAX_PATH+1]={'\0'};
+static char scheme[MAX_SCHEME+1],auth[MAX_AUTH+1],host[MAX_HOST+1]={'\0'},port[MAX_PORT+1]={'\0'},path[MAX_PATH+1]={'\0'};
static FILE *input=NULL,*output=NULL,*console=NULL;
static CURL *curl;
static char request[MAX_URL]={'\0'};
static int
+curl_err_to_gpg_err(CURLcode error)
+{
+ switch(error)
+ {
+ case CURLE_FTP_COULDNT_RETR_FILE: return KEYSERVER_KEY_NOT_FOUND;
+ default: return KEYSERVER_INTERNAL_ERROR;
+ }
+}
+
+static int
get_key(char *getkey)
{
CURLcode res;
@@ -62,7 +73,7 @@ get_key(char *getkey)
fprintf(output,"KEY 0x%s BEGIN\n",getkey);
- sprintf(request,"ftp://%s%s%s%s%s%s%s",auth[0]?auth:"",auth[0]?"@":"",
+ sprintf(request,"%s://%s%s%s%s%s%s%s",scheme,auth[0]?auth:"",auth[0]?"@":"",
host,port[0]?":":"",port[0]?port:"",path[0]?"":"/",path);
curl_easy_setopt(curl,CURLOPT_URL,request);
@@ -70,7 +81,7 @@ get_key(char *getkey)
curl_easy_setopt(curl,CURLOPT_FILE,output);
curl_easy_setopt(curl,CURLOPT_ERRORBUFFER,errorbuffer);
- if(verbose>2)
+ if(verbose>1)
{
curl_easy_setopt(curl,CURLOPT_STDERR,console);
curl_easy_setopt(curl,CURLOPT_VERBOSE,TRUE);
@@ -79,10 +90,9 @@ get_key(char *getkey)
res=curl_easy_perform(curl);
if(res!=0)
{
- fprintf(console,"gpgkeys: FTP fetch error %d: %s\n",res,errorbuffer);
- fprintf(output,"KEY 0x%s FAILED %d\n",getkey,
- (res==CURLE_FTP_COULDNT_RETR_FILE)?KEYSERVER_KEY_NOT_FOUND:
- KEYSERVER_INTERNAL_ERROR);
+ fprintf(console,"gpgkeys: %s fetch error %d: %s\n",scheme,
+ res,errorbuffer);
+ fprintf(output,"KEY 0x%s FAILED %d\n",getkey,curl_err_to_gpg_err(res));
}
else
fprintf(output,"KEY 0x%s END\n",getkey);
@@ -111,7 +121,7 @@ main(int argc,char *argv[])
/* Kludge to implement standard GNU options. */
if (argc > 1 && !strcmp (argv[1], "--version"))
{
- fputs ("gpgkeys_ftp (GnuPG) " VERSION"\n", stdout);
+ fputs ("gpgkeys_curl (GnuPG) " VERSION"\n", stdout);
return 0;
}
else if (argc > 1 && !strcmp (argv[1], "--help"))
@@ -186,9 +196,15 @@ main(int argc,char *argv[])
continue;
}
+ if(sscanf(line,"SCHEME %" MKSTRING(MAX_SCHEME) "s\n",scheme)==1)
+ {
+ scheme[MAX_SCHEME]='\0';
+ continue;
+ }
+
if(sscanf(line,"AUTH %" MKSTRING(MAX_AUTH) "s\n",auth)==1)
{
- host[MAX_AUTH]='\0';
+ auth[MAX_AUTH]='\0';
continue;
}
@@ -253,6 +269,26 @@ main(int argc,char *argv[])
}
}
+ if(scheme[0]=='\0')
+ {
+ fprintf(console,"gpgkeys: no scheme supplied!\n");
+ return KEYSERVER_SCHEME_NOT_FOUND;
+ }
+#ifndef HTTP_SUPPORT
+ else if(strcasecmp(scheme,"http")==0)
+ {
+ fprintf(console,"gpgkeys: scheme `%s' not supported\n",scheme);
+ return KEYSERVER_SCHEME_NOT_FOUND;
+ }
+#endif /* HTTP_SUPPORT */
+#ifndef FTP_SUPPORT
+ else if(strcasecmp(scheme,"ftp")==0)
+ {
+ fprintf(console,"gpgkeys: scheme `%s' not supported\n",scheme);
+ return KEYSERVER_SCHEME_NOT_FOUND;
+ }
+#endif /* FTP_SUPPORT */
+
if(timeout && register_timeout()==-1)
{
fprintf(console,"gpgkeys: unable to register timeout handler\n");
@@ -318,8 +354,9 @@ main(int argc,char *argv[])
fprintf(output,"VERSION %d\n",KEYSERVER_PROTO_VERSION);
fprintf(output,"PROGRAM %s\n\n",VERSION);
- if(verbose>1)
+ if(verbose)
{
+ fprintf(console,"Scheme:\t\t%s\n",scheme);
fprintf(console,"Host:\t\t%s\n",host);
if(port[0])
fprintf(console,"Port:\t\t%s\n",port);