* keyserver.c (curl_can_handle): New. Do a runtime check against libcurl
authorDavid Shaw <dshaw@jabberwocky.com>
Wed, 20 Jul 2005 21:15:04 +0000 (21:15 +0000)
committerDavid Shaw <dshaw@jabberwocky.com>
Wed, 20 Jul 2005 21:15:04 +0000 (21:15 +0000)
to see if it can handle a particular protocol. (keyserver_typemap): Call
it here.

* Makefile.am: Pull in libcurl for curl_version_info() if used.

g10/ChangeLog
g10/Makefile.am
g10/keyserver.c

index f227536..5a9fa68 100644 (file)
@@ -1,3 +1,11 @@
+2005-07-20  David Shaw  <dshaw@jabberwocky.com>
+
+       * keyserver.c (curl_can_handle): New.  Do a runtime check against
+       libcurl to see if it can handle a particular protocol.
+       (keyserver_typemap): Call it here.
+
+       * Makefile.am: Pull in libcurl for curl_version_info() if used.
+
 2005-07-19  Werner Koch  <wk@g10code.com>
 
        * g10.c, options.h: New option --limit-card-insert-tries.
index 887f4c5..9e50eeb 100644 (file)
@@ -124,7 +124,8 @@ gpgv_SOURCES = gpgv.c           \
              verify.c          
 
 LDADD =  $(needed_libs) $(other_libs) @ZLIBS@ @W32LIBS@ @LIBREADLINE@
-gpg_LDADD = $(LDADD) @DLLIBS@ @NETLIBS@ @LIBUSB@
+gpg_LDADD = $(LDADD) @DLLIBS@ @NETLIBS@ @LIBUSB@ @LIBCURL@
+##gpg_CPPFLAGS = @LIBCURL_CPPFLAGS@
 
 $(PROGRAMS): $(needed_libs)
 
index 39911ac..e3c2391 100644 (file)
@@ -25,6 +25,9 @@
 #include <string.h>
 #include <stdlib.h>
 #include <assert.h>
+#ifdef HAVE_LIBCURL
+#include <curl/curl.h>
+#endif
 #include "filter.h"
 #include "keydb.h"
 #include "status.h"
@@ -155,6 +158,10 @@ free_keyserver_spec(struct keyserver_spec *keyserver)
   m_free(keyserver);
 }
 
+/* TODO: once we cut over to an all-curl world, we don't need this
+   parser any longer so it can be removed, or at least moved to
+   keyserver/ksutil.c for limited use in gpgkeys_ldap or the like. */
+
 struct keyserver_spec *
 parse_keyserver_uri(const char *uri,int require_scheme,
                    const char *configname,unsigned int configlineno)
@@ -822,6 +829,31 @@ keyserver_search_prompt(IOBUF buffer,const char *searchstr)
   m_free(line);
 }
 
+static int
+curl_can_handle(const char *scheme)
+{
+#if defined(HAVE_LIBCURL)
+
+  const char * const *proto;
+  curl_version_info_data *data=curl_version_info(CURLVERSION_NOW);
+
+  assert(data);
+
+  for(proto=data->protocols;*proto;proto++)
+    if(strcasecmp(*proto,scheme)==0)
+      return 1;
+
+#elif defined(FAKE_CURL)
+
+  /* If we're faking curl, then we only support HTTP */
+  if(strcasecmp(scheme,"http")==0)
+    return 1;
+
+#endif
+
+  return 0;
+}
+
 /* We sometimes want to use a different gpgkeys_xxx for a given
    protocol (for example, ldaps is handled by gpgkeys_ldap).  Map
    these here. */
@@ -830,22 +862,8 @@ keyserver_typemap(const char *type)
 {
   if(strcmp(type,"ldaps")==0)
     return "ldap";
-#ifdef FTP_VIA_LIBCURL
-  else if(strcmp(type,"ftp")==0)
-    return "curl";
-#endif
-#ifdef FTPS_VIA_LIBCURL
-  else if(strcmp(type,"ftps")==0)
+  else if(curl_can_handle(type))
     return "curl";
-#endif
-#ifdef HTTP_VIA_LIBCURL
-  else if(strcmp(type,"http")==0)
-    return "curl";
-#endif
-#ifdef HTTPS_VIA_LIBCURL
-  else if(strcmp(type,"https")==0)
-    return "curl";
-#endif
   else
     return type;
 }