diff options
Diffstat (limited to 'g10')
-rw-r--r-- | g10/call-dirmngr.c | 18 | ||||
-rw-r--r-- | g10/getkey.c | 9 | ||||
-rw-r--r-- | g10/gpgv.c | 11 | ||||
-rw-r--r-- | g10/keyserver-internal.h | 2 | ||||
-rw-r--r-- | g10/keyserver.c | 34 | ||||
-rw-r--r-- | g10/options.h | 1 | ||||
-rw-r--r-- | g10/test-stubs.c | 11 |
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; |