aboutsummaryrefslogtreecommitdiffstats
path: root/g10/keyserver.c
diff options
context:
space:
mode:
authorDavid Shaw <[email protected]>2004-12-22 17:49:44 +0000
committerDavid Shaw <[email protected]>2004-12-22 17:49:44 +0000
commitb96038387bb86a6608f74027fed43bd85cfe2941 (patch)
tree670def0b8e692befe8f9b92ed729812093bd38d1 /g10/keyserver.c
parent* Makefile.am: Build gpgkeys_http or gpgkeys_curl as needed. (diff)
downloadgnupg-b96038387bb86a6608f74027fed43bd85cfe2941.tar.gz
gnupg-b96038387bb86a6608f74027fed43bd85cfe2941.zip
* keyserver.c (keyserver_typemap): New. Map certain keyserver types to a
common type (e.g. ldaps -> ldap). If we are building with curl, map both http and ftp to curl. * build-packet.c (build_sig_subpkt): Only allow one preferred keyserver subpacket at a time.
Diffstat (limited to '')
-rw-r--r--g10/keyserver.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/g10/keyserver.c b/g10/keyserver.c
index 5084a7c15..854187f74 100644
--- a/g10/keyserver.c
+++ b/g10/keyserver.c
@@ -759,6 +759,24 @@ keyserver_search_prompt(IOBUF buffer,const char *searchstr)
m_free(line);
}
+/* We sometimes want to use a different gpgkeys_xxx for a given
+ protocol (for example, ldaps is handled by gpgkeys_ldap). Map
+ these here. */
+static const char *
+keyserver_typemap(const char *type)
+{
+ if(strcmp(type,"ldaps")==0)
+ return "ldap";
+#ifdef HAVE_LIBCURL
+ else if(strcmp(type,"ftp")==0)
+ return "curl";
+ else if(strcmp(type,"http")==0)
+ return "curl";
+#endif /* HAVE_LIBCURL */
+ else
+ return type;
+}
+
#define KEYSERVER_ARGS_KEEP " -o \"%O\" \"%I\""
#define KEYSERVER_ARGS_NOKEEP " -o \"%o\" \"%i\""
@@ -773,6 +791,7 @@ keyserver_spawn(int action,STRLIST list,KEYDB_SEARCH_DESC *desc,
byte *line=NULL;
struct parse_options *kopts;
struct exec_info *spawn;
+ const char *scheme;
assert(keyserver);
@@ -789,14 +808,10 @@ keyserver_spawn(int action,STRLIST list,KEYDB_SEARCH_DESC *desc,
#endif
/* Build the filename for the helper to execute */
- /* Note that we don't use a symlink for "ldaps" anymore because this
- won't work under MS Windows. */
- command=m_alloc(strlen("gpgkeys_")+strlen(keyserver->scheme)+1);
+ scheme=keyserver_typemap(keyserver->scheme);
+ command=m_alloc(strlen("gpgkeys_")+strlen(scheme)+1);
strcpy(command,"gpgkeys_");
- if (!strcmp (keyserver->scheme, "ldaps"))
- strcat(command, "ldap");
- else
- strcat(command,keyserver->scheme);
+ strcat(command,scheme);
if(opt.keyserver_options.options&KEYSERVER_USE_TEMP_FILES)
{
@@ -1252,9 +1267,8 @@ keyserver_work(int action,STRLIST list,KEYDB_SEARCH_DESC *desc,
case KEYSERVER_VERSION_ERROR:
log_error(_("gpgkeys_%s does not support handler version %d\n"),
- !strcmp (keyserver->scheme,"ldaps")?
- "ldap": keyserver->scheme,
- KEYSERVER_PROTO_VERSION);
+ keyserver_typemap(keyserver->scheme),
+ KEYSERVER_PROTO_VERSION);
break;
case KEYSERVER_TIMEOUT: