aboutsummaryrefslogtreecommitdiffstats
path: root/g10
diff options
context:
space:
mode:
Diffstat (limited to 'g10')
-rw-r--r--g10/call-dirmngr.c18
-rw-r--r--g10/getkey.c9
-rw-r--r--g10/gpgv.c11
-rw-r--r--g10/keyserver-internal.h2
-rw-r--r--g10/keyserver.c34
-rw-r--r--g10/options.h1
-rw-r--r--g10/test-stubs.c11
7 files changed, 71 insertions, 15 deletions
diff --git a/g10/call-dirmngr.c b/g10/call-dirmngr.c
index 06403317b..1b091bde2 100644
--- a/g10/call-dirmngr.c
+++ b/g10/call-dirmngr.c
@@ -963,6 +963,7 @@ ks_put_inq_cb (void *opaque, const char *line)
{
kbnode_t node;
estream_t fp;
+ char hexfpr[2*MAX_FINGERPRINT_LEN+1];
/* Parse the keyblock and send info lines back to the server. */
fp = es_fopenmem (0, "rw,samethread");
@@ -1020,6 +1021,8 @@ ks_put_inq_cb (void *opaque, const char *line)
nbits_from_pk (pk), pk->pubkey_algo,
pk->keyid, pk->timestamp, pk->expiredate,
NULL);
+ es_fprintf (fp, "fpr:::::::::%s:\n",
+ hexfingerprint (pk, hexfpr, sizeof hexfpr));
}
break;
@@ -1047,21 +1050,6 @@ ks_put_inq_cb (void *opaque, const char *line)
}
break;
- /* This bit is really for the benefit of people who
- store their keys in LDAP servers. It makes it easy
- to do queries for things like "all keys signed by
- Isabella". */
- case PKT_SIGNATURE:
- {
- PKT_signature *sig = node->pkt->pkt.signature;
-
- if (IS_UID_SIG (sig))
- record_output (fp, node->pkt->pkttype, NULL,
- -1, -1, sig->keyid,
- sig->timestamp, sig->expiredate, NULL);
- }
- break;
-
default:
continue;
}
diff --git a/g10/getkey.c b/g10/getkey.c
index 3f0a6922d..e758b43de 100644
--- a/g10/getkey.c
+++ b/g10/getkey.c
@@ -1202,6 +1202,13 @@ get_pubkey_byname (ctrl_t ctrl, enum get_pubkey_modes mode,
glo_ctrl.in_auto_key_retrieve--;
break;
+ case AKL_NTDS:
+ mechanism_string = "NTDS";
+ glo_ctrl.in_auto_key_retrieve++;
+ rc = keyserver_import_ntds (ctrl, name, &fpr, &fpr_len);
+ glo_ctrl.in_auto_key_retrieve--;
+ break;
+
case AKL_KEYSERVER:
/* Strictly speaking, we don't need to only use a valid
* mailbox for the getname search, but it helps cut down
@@ -4194,6 +4201,8 @@ parse_auto_key_locate (const char *options_arg)
akl->type = AKL_DANE;
else if (ascii_strcasecmp (tok, "wkd") == 0)
akl->type = AKL_WKD;
+ else if (ascii_strcasecmp (tok, "ntds") == 0)
+ akl->type = AKL_NTDS;
else if ((akl->spec = parse_keyserver_uri (tok, 1)))
akl->type = AKL_SPEC;
else
diff --git a/g10/gpgv.c b/g10/gpgv.c
index 6b9c88d40..ac4b1feb7 100644
--- a/g10/gpgv.c
+++ b/g10/gpgv.c
@@ -476,6 +476,17 @@ keyserver_import_name (const char *name,struct keyserver_spec *spec)
}
int
+keyserver_import_ntds (ctrl_t ctrl, const char *mbox,
+ unsigned char **fpr, size_t *fprlen)
+{
+ (void)ctrl;
+ (void)mbox;
+ (void)fpr;
+ (void)fprlen;
+ return -1;
+}
+
+int
keyserver_import_ldap (const char *name)
{
(void)name;
diff --git a/g10/keyserver-internal.h b/g10/keyserver-internal.h
index 46a1e1d9f..f5f7f3620 100644
--- a/g10/keyserver-internal.h
+++ b/g10/keyserver-internal.h
@@ -47,6 +47,8 @@ gpg_error_t keyserver_import_pka (ctrl_t ctrl, const char *name,
unsigned char **fpr,size_t *fpr_len);
gpg_error_t keyserver_import_wkd (ctrl_t ctrl, const char *name, int quick,
unsigned char **fpr, size_t *fpr_len);
+int keyserver_import_ntds (ctrl_t ctrl, const char *name,
+ unsigned char **fpr,size_t *fpr_len);
int keyserver_import_name (ctrl_t ctrl,
const char *name,unsigned char **fpr,size_t *fpr_len,
struct keyserver_spec *keyserver);
diff --git a/g10/keyserver.c b/g10/keyserver.c
index f171b9606..b0f52fa82 100644
--- a/g10/keyserver.c
+++ b/g10/keyserver.c
@@ -1159,6 +1159,21 @@ keyserver_import_name (ctrl_t ctrl, const char *name,
}
+/* Import the keys that match exactly MBOX */
+int
+keyserver_import_ntds (ctrl_t ctrl, const char *mbox,
+ unsigned char **fpr, size_t *fprlen)
+{
+ KEYDB_SEARCH_DESC desc = { 0 };
+ struct keyserver_spec keyserver = { NULL, "ldap:///" };
+
+ desc.mode = KEYDB_SEARCH_MODE_MAIL;
+ desc.u.name = mbox;
+
+ return keyserver_get (ctrl, &desc, 1, &keyserver, 0, fpr, fprlen);
+}
+
+
int
keyserver_import_fprint (ctrl_t ctrl, const byte *fprint,size_t fprint_len,
struct keyserver_spec *keyserver, int quick)
@@ -1690,6 +1705,25 @@ keyserver_get_chunk (ctrl_t ctrl, KEYDB_SEARCH_DESC *desc, int ndesc,
quiet = 1;
}
}
+ else if(desc[idx].mode == KEYDB_SEARCH_MODE_MAIL)
+ {
+ n = 1 + strlen (desc[idx].u.name) + 1 + 1;
+ if (idx && linelen + n > MAX_KS_GET_LINELEN)
+ break; /* Declare end of this chunk. */
+ linelen += n;
+
+ if (desc[idx].u.name[0] == '<')
+ pattern[npat] = xtrystrdup (desc[idx].u.name);
+ else
+ pattern[npat] = strconcat ("<", desc[idx].u.name, ">", NULL);
+ if (!pattern[npat])
+ err = gpg_error_from_syserror ();
+ else
+ {
+ npat++;
+ quiet = 1;
+ }
+ }
else if (desc[idx].mode == KEYDB_SEARCH_MODE_NONE)
continue;
else
diff --git a/g10/options.h b/g10/options.h
index 352c61275..3514a60dd 100644
--- a/g10/options.h
+++ b/g10/options.h
@@ -255,6 +255,7 @@ struct
AKL_DANE,
AKL_WKD,
AKL_LDAP,
+ AKL_NTDS,
AKL_KEYSERVER,
AKL_SPEC
} type;
diff --git a/g10/test-stubs.c b/g10/test-stubs.c
index 0ea9379c6..d09596ca2 100644
--- a/g10/test-stubs.c
+++ b/g10/test-stubs.c
@@ -234,6 +234,17 @@ keyserver_import_name (const char *name,struct keyserver_spec *spec)
}
int
+keyserver_import_ntds (ctrl_t ctrl, const char *mbox,
+ unsigned char **fpr, size_t *fprlen)
+{
+ (void)ctrl;
+ (void)mbox;
+ (void)fpr;
+ (void)fprlen;
+ return -1;
+}
+
+int
keyserver_import_ldap (const char *name)
{
(void)name;