aboutsummaryrefslogtreecommitdiffstats
path: root/g10/keyserver.c
diff options
context:
space:
mode:
Diffstat (limited to 'g10/keyserver.c')
-rw-r--r--g10/keyserver.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/g10/keyserver.c b/g10/keyserver.c
index af65ad365..240ea99e6 100644
--- a/g10/keyserver.c
+++ b/g10/keyserver.c
@@ -2016,3 +2016,38 @@ keyserver_import_name(const char *name)
return rc;
}
+
+/* Use the PGP Universal trick of asking ldap://keys.(maildomain) for
+ the key. */
+int
+keyserver_import_ldap(const char *name)
+{
+ char *domain;
+ struct keyserver_spec *keyserver;
+ STRLIST list=NULL;
+ int rc;
+
+ append_to_strlist(&list,name);
+
+ /* Parse out the domain */
+ domain=strrchr(name,'@');
+ if(!domain)
+ return G10ERR_GENERAL;
+
+ domain++;
+
+ keyserver=xmalloc_clear(sizeof(struct keyserver_spec));
+
+ keyserver->scheme=xstrdup("ldap");
+ keyserver->host=xmalloc(5+strlen(domain)+1);
+ strcpy(keyserver->host,"keys.");
+ strcat(keyserver->host,domain);
+
+ rc=keyserver_work(KS_GETNAME,list,NULL,0,keyserver);
+
+ free_strlist(list);
+
+ free_keyserver_spec(keyserver);
+
+ return rc;
+}