aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeal H. Walfield <[email protected]>2015-11-17 10:36:38 +0000
committerNeal H. Walfield <[email protected]>2015-11-17 13:53:01 +0000
commit11ec4785df1646643966d872b1b53ef675092c98 (patch)
tree05ca7346bc30e4aec6a4e6020764a5b802337562
parentgpg: Add function format_keyid. (diff)
downloadgnupg-11ec4785df1646643966d872b1b53ef675092c98.tar.gz
gnupg-11ec4785df1646643966d872b1b53ef675092c98.zip
gpg: Make debugging search descriptors easier.
* g10/keydb.c (dump_search_desc): Rename from this... (keydb_search_desc_dump): ... to this. Only process a single search descriptor. Improve output. Don't mark as static. Update callers. -- Signed-off-by: Neal H. Walfield <[email protected]>
-rw-r--r--g10/keydb.c124
-rw-r--r--g10/keydb.h4
2 files changed, 78 insertions, 50 deletions
diff --git a/g10/keydb.c b/g10/keydb.c
index 1705c7135..22fec244c 100644
--- a/g10/keydb.c
+++ b/g10/keydb.c
@@ -465,8 +465,70 @@ rt_from_file (const char *filename, int *r_found, int *r_openpgp)
return rt;
}
+
+char *
+keydb_search_desc_dump (struct keydb_search_desc *desc)
+{
+ char b[MAX_FORMATTED_FINGERPRINT_LEN + 1];
+ char fpr[MAX_FINGERPRINT_LEN + 1];
-
+ switch (desc->mode)
+ {
+ case KEYDB_SEARCH_MODE_EXACT:
+ return xasprintf ("EXACT: '%s'", desc->u.name);
+ case KEYDB_SEARCH_MODE_SUBSTR:
+ return xasprintf ("SUBSTR: '%s'", desc->u.name);
+ case KEYDB_SEARCH_MODE_MAIL:
+ return xasprintf ("MAIL: '%s'", desc->u.name);
+ case KEYDB_SEARCH_MODE_MAILSUB:
+ return xasprintf ("MAILSUB: '%s'", desc->u.name);
+ case KEYDB_SEARCH_MODE_MAILEND:
+ return xasprintf ("MAILEND: '%s'", desc->u.name);
+ case KEYDB_SEARCH_MODE_WORDS:
+ return xasprintf ("WORDS: '%s'", desc->u.name);
+ case KEYDB_SEARCH_MODE_SHORT_KID:
+ return xasprintf ("SHORT_KID: '%s'",
+ format_keyid (desc->u.kid, KF_SHORT, b, sizeof (b)));
+ case KEYDB_SEARCH_MODE_LONG_KID:
+ return xasprintf ("LONG_KID: '%s'",
+ format_keyid (desc->u.kid, KF_LONG, b, sizeof (b)));
+ case KEYDB_SEARCH_MODE_FPR16:
+ bin2hex (desc->u.fpr, 16, fpr);
+ return xasprintf ("FPR16: '%s'",
+ format_hexfingerprint (fpr, b, sizeof (b)));
+ case KEYDB_SEARCH_MODE_FPR20:
+ bin2hex (desc->u.fpr, 20, fpr);
+ return xasprintf ("FPR20: '%s'",
+ format_hexfingerprint (fpr, b, sizeof (b)));
+ case KEYDB_SEARCH_MODE_FPR:
+ bin2hex (desc->u.fpr, 20, fpr);
+ return xasprintf ("FPR: '%s'",
+ format_hexfingerprint (fpr, b, sizeof (b)));
+ case KEYDB_SEARCH_MODE_ISSUER:
+ return xasprintf ("ISSUER: '%s'", desc->u.name);
+ case KEYDB_SEARCH_MODE_ISSUER_SN:
+ return xasprintf ("ISSUER_SN: '%*s'",
+ (int) (desc->snlen == -1
+ ? strlen (desc->sn) : desc->snlen),
+ desc->sn);
+ case KEYDB_SEARCH_MODE_SN:
+ return xasprintf ("SN: '%*s'",
+ (int) (desc->snlen == -1
+ ? strlen (desc->sn) : desc->snlen),
+ desc->sn);
+ case KEYDB_SEARCH_MODE_SUBJECT:
+ return xasprintf ("SUBJECT: '%s'", desc->u.name);
+ case KEYDB_SEARCH_MODE_KEYGRIP:
+ return xasprintf ("KEYGRIP: %s", desc->u.grip);
+ case KEYDB_SEARCH_MODE_FIRST:
+ return xasprintf ("FIRST");
+ case KEYDB_SEARCH_MODE_NEXT:
+ return xasprintf ("NEXT");
+ default:
+ return xasprintf ("Bad search mode (%d)", desc->mode);
+ }
+}
+
gpg_error_t
keydb_add_resource (const char *url, unsigned int flags)
{
@@ -1571,57 +1633,11 @@ keydb_search_reset (KEYDB_HANDLE hd)
}
-static void
-dump_search_desc (KEYDB_HANDLE hd, const char *text,
- KEYDB_SEARCH_DESC *desc, size_t ndesc)
-{
- int n;
- const char *s;
-
- for (n=0; n < ndesc; n++)
- {
- switch (desc[n].mode)
- {
- case KEYDB_SEARCH_MODE_NONE: s = "none"; break;
- case KEYDB_SEARCH_MODE_EXACT: s = "exact"; break;
- case KEYDB_SEARCH_MODE_SUBSTR: s = "substr"; break;
- case KEYDB_SEARCH_MODE_MAIL: s = "mail"; break;
- case KEYDB_SEARCH_MODE_MAILSUB: s = "mailsub"; break;
- case KEYDB_SEARCH_MODE_MAILEND: s = "mailend"; break;
- case KEYDB_SEARCH_MODE_WORDS: s = "words"; break;
- case KEYDB_SEARCH_MODE_SHORT_KID: s = "short_kid"; break;
- case KEYDB_SEARCH_MODE_LONG_KID: s = "long_kid"; break;
- case KEYDB_SEARCH_MODE_FPR16: s = "fpr16"; break;
- case KEYDB_SEARCH_MODE_FPR20: s = "fpr20"; break;
- case KEYDB_SEARCH_MODE_FPR: s = "fpr"; break;
- case KEYDB_SEARCH_MODE_ISSUER: s = "issuer"; break;
- case KEYDB_SEARCH_MODE_ISSUER_SN: s = "issuer_sn"; break;
- case KEYDB_SEARCH_MODE_SN: s = "sn"; break;
- case KEYDB_SEARCH_MODE_SUBJECT: s = "subject"; break;
- case KEYDB_SEARCH_MODE_KEYGRIP: s = "keygrip"; break;
- case KEYDB_SEARCH_MODE_FIRST: s = "first"; break;
- case KEYDB_SEARCH_MODE_NEXT: s = "next"; break;
- default: s = "?"; break;
- }
- if (!n)
- log_debug ("%s: mode=%s (hd=%p)", text, s, hd);
- else
- log_debug ("%*s mode=%s", (int)strlen (text), "", s);
- if (desc[n].mode == KEYDB_SEARCH_MODE_LONG_KID)
- log_printf (" %08lX%08lX", (unsigned long)desc[n].u.kid[0],
- (unsigned long)desc[n].u.kid[1]);
- else if (desc[n].mode == KEYDB_SEARCH_MODE_SHORT_KID)
- log_printf (" %08lX", (unsigned long)desc[n].u.kid[1]);
- else if (desc[n].mode == KEYDB_SEARCH_MODE_SUBSTR)
- log_printf (" '%s'", desc[n].u.name);
- }
-}
-
-
gpg_error_t
keydb_search (KEYDB_HANDLE hd, KEYDB_SEARCH_DESC *desc,
size_t ndesc, size_t *descindex)
{
+ int i;
gpg_error_t rc;
int was_reset = hd->is_reset;
/* If an entry is already in the cache, then don't add it again. */
@@ -1636,8 +1652,16 @@ keydb_search (KEYDB_HANDLE hd, KEYDB_SEARCH_DESC *desc,
if (DBG_CLOCK)
log_clock ("keydb_search enter");
- if (DBG_CACHE)
- dump_search_desc (hd, "keydb_search", desc, ndesc);
+ if (DBG_LOOKUP)
+ {
+ log_debug ("%s: %zd search descriptions:\n", __func__, ndesc);
+ for (i = 0; i < ndesc; i ++)
+ {
+ char *t = keydb_search_desc_dump (&desc[i]);
+ log_debug ("%s %d: %s\n", __func__, i, t);
+ xfree (t);
+ }
+ }
if (ndesc == 1 && desc[0].mode == KEYDB_SEARCH_MODE_LONG_KID
diff --git a/g10/keydb.h b/g10/keydb.h
index b1dfa08c7..203c7ecbf 100644
--- a/g10/keydb.h
+++ b/g10/keydb.h
@@ -133,6 +133,10 @@ union pref_hint
#define KEYDB_RESOURCE_FLAG_READONLY 8 /* Open in read only mode. */
#define KEYDB_RESOURCE_FLAG_GPGVDEF 16 /* Default file for gpgv. */
+/* Format a search term for debugging output. The caller must free
+ the result. */
+char *keydb_search_desc_dump (struct keydb_search_desc *desc);
+
/* Register a resource (keyring or keybox). The first keyring or
keybox that is added using this function is created if it does not
already exist and the KEYDB_RESOURCE_FLAG_READONLY is not set.