From: Jonathan McDowell Date: Mon, 31 May 2004 23:47:34 +0000 (+0000) Subject: cscvs to tla changeset 68 X-Git-Url: https://git.sommitrealweird.co.uk/onak.git/commitdiff_plain/e3ee7975fc8f8b343390272663b8c644030b17c1 cscvs to tla changeset 68 Author: noodles Date: 2003/04/19 14:18:33 Allow searching for multiple paths between keys. --- diff --git a/gpgwww.c b/gpgwww.c index f5b1644..f163ca4 100644 --- a/gpgwww.c +++ b/gpgwww.c @@ -59,7 +59,7 @@ int main(int argc, char *argv[]) initlogthing("gpgwww", config.logfile); initdb(); inithash(); - dofindpath(from, to, true); + dofindpath(from, to, true, 3); destroyhash(); cleanupdb(); cleanuplogthing(); diff --git a/keydb.c b/keydb.c index 3fe3d34..406f857 100644 --- a/keydb.c +++ b/keydb.c @@ -109,6 +109,7 @@ struct ll *cached_getkeysigs(uint64_t keyid) key->parent = 0; key->sigs = NULL; key->gotsigs = false; + key->disabled = false; addtohash(key); } else { perror("cached_getkeysigs()"); diff --git a/keystructs.h b/keystructs.h index ec1d555..e145fdf 100644 --- a/keystructs.h +++ b/keystructs.h @@ -95,6 +95,7 @@ struct stats_key { uint64_t parent; struct ll *sigs; bool gotsigs; + bool disabled; }; #endif /* __KEYSTRUCTS_H__ */ diff --git a/maxpath.c b/maxpath.c index 21f23c2..2f813de 100644 --- a/maxpath.c +++ b/maxpath.c @@ -64,7 +64,7 @@ void findmaxpath(unsigned long max) from->keyid, to->keyid, distance); - dofindpath(to->keyid, from->keyid, false); + dofindpath(to->keyid, from->keyid, false, 1); } int main(int argc, char *argv[]) diff --git a/stats.c b/stats.c index 2e63479..61b5278 100644 --- a/stats.c +++ b/stats.c @@ -74,7 +74,8 @@ unsigned long findpath(struct stats_key *have, struct stats_key *want) * Check if we've seen this key before and if not mark * it and add its sigs to the list we want to look at. */ - if (((struct stats_key *)sigs->object)->colour == 0) { + if (!((struct stats_key *)sigs->object)->disabled && + ((struct stats_key *)sigs->object)->colour == 0) { count++; ((struct stats_key *)sigs->object)->colour = curdegree; @@ -111,16 +112,18 @@ unsigned long findpath(struct stats_key *have, struct stats_key *want) * @have: The key we have. * @want: The key we want to get to. * @html: Should we output in html. + * @count: How many paths we should look for. * * This does a breadth first search on the key tree, starting with the * key we have. It returns as soon as a path is found or when we run out * of keys; whichever comes sooner. */ -void dofindpath(uint64_t have, uint64_t want, bool html) +void dofindpath(uint64_t have, uint64_t want, bool html, int count) { struct stats_key *keyinfoa, *keyinfob, *curkey; uint64_t fullhave, fullwant; int rec; + int pathnum; char *uid; fullhave = getfullkeyid(have); @@ -140,81 +143,94 @@ void dofindpath(uint64_t have, uint64_t want, bool html) printf("Couldn't find key 0x%llX.\n", want); return; } + + pathnum = 0; - /* - * Fill the tree info up. - */ - initcolour(true); - rec = findpath(keyinfoa, keyinfob); - keyinfob->parent = 0; + while (pathnum < count) { + /* + * Fill the tree info up. + */ + initcolour(true); + rec = findpath(keyinfoa, keyinfob); + keyinfob->parent = 0; - printf("%d nodes examined. %ld elements in the hash%s\n", rec, + printf("%s%d nodes examined. %ld elements in the hash%s\n", + html ? "
" : "", + rec, hashelements(), html ? "
" : ""); - if (keyinfoa->colour == 0) { - printf("Can't find a link from 0x%08llX to 0x%08llX%s\n", + if (keyinfoa->colour == 0) { + printf("Can't find a link from 0x%08llX to 0x%08llX" + "%s\n", have, want, html ? "
" : ""); - } else { - printf("%d steps from 0x%08llX to 0x%08llX%s\n", + } else { + printf("%d steps from 0x%08llX to 0x%08llX%s\n", keyinfoa->colour, have & 0xFFFFFFFF, want & 0xFFFFFFFF, html ? "
" : ""); - curkey = keyinfoa; - while (curkey != NULL && curkey->keyid != 0) { - uid = keyid2uid(curkey->keyid); - if (html && uid == NULL) { - printf("0x%08llX ([User id" - " not found])%s
\n", - curkey->keyid & 0xFFFFFFFF, - curkey->keyid & 0xFFFFFFFF, - (curkey->keyid == fullwant) ? "" : - " signs"); - } else if (html && uid != NULL) { - printf("0x%08llX" - " (%s)%s
\n", - curkey->keyid & 0xFFFFFFFF, - curkey->keyid & 0xFFFFFFFF, - curkey->keyid & 0xFFFFFFFF, - txt2html(uid), - (curkey->keyid == fullwant) ? "" : - " signs"); + curkey = keyinfoa; + while (curkey != NULL && curkey->keyid != 0) { + uid = keyid2uid(curkey->keyid); + if (html && uid == NULL) { + printf("0x%08llX ([" + "User id not found])%s
\n", + curkey->keyid & 0xFFFFFFFF, + curkey->keyid & 0xFFFFFFFF, + (curkey->keyid == fullwant) ? + "" : " signs"); + } else if (html && uid != NULL) { + printf("0x%08llX" + " (%s)%s" + "
\n", + curkey->keyid & 0xFFFFFFFF, + curkey->keyid & 0xFFFFFFFF, + curkey->keyid & 0xFFFFFFFF, + txt2html(uid), + (curkey->keyid == fullwant) ? + "" : " signs"); + } else { + printf("0x%08llX (%s)%s\n", + curkey->keyid & 0xFFFFFFFF, + (uid == NULL) ? + "[User id not found]" : + uid, + (curkey->keyid == fullwant) ? + "" : " signs"); + } + if (uid != NULL) { + free(uid); + uid = NULL; + } + if (curkey != keyinfoa && curkey != keyinfob) { + curkey->disabled = true; + } + curkey = findinhash(curkey->parent); + } + if (html) { + puts("

List of key ids in path:

"); } else { - printf("0x%08llX (%s)%s\n", - curkey->keyid & 0xFFFFFFFF, - (uid == NULL) ? "[User id not found]" : - uid, - (curkey->keyid == fullwant) ? "" : - " signs"); + puts("List of key ids in path:"); } - if (uid != NULL) { - free(uid); - uid = NULL; + curkey = keyinfoa; + while (curkey != NULL && curkey->keyid != 0) { + printf("0x%08llX ", curkey->keyid & 0xFFFFFFFF); + curkey = findinhash(curkey->parent); } - curkey = findinhash(curkey->parent); - } - if (html) { - puts("

List of key ids in path:

"); - } else { - puts("List of key ids in path:"); - } - curkey = keyinfoa; - while (curkey != NULL && curkey->keyid != 0) { - printf("0x%08llX ", curkey->keyid & 0xFFFFFFFF); - curkey = findinhash(curkey->parent); - } - putchar('\n'); - if (html) { - printf("
" - "" + putchar('\n'); + if (html) { + printf("
" "Find reverse path\n", want, have); + } } + pathnum++; } } diff --git a/stats.h b/stats.h index 4b7cf09..3696e08 100644 --- a/stats.h +++ b/stats.h @@ -50,12 +50,13 @@ unsigned long findpath(struct stats_key *have, struct stats_key *want); * @have: The key we have. * @want: The key we want to get to. * @html: Should we output in html. + * @count: How many paths we should look for at most. * * This does a breadth first search on the key tree, starting with the * key we have. It returns as soon as a path is found or when we run out * of keys; whichever comes sooner. */ -void dofindpath(uint64_t have, uint64_t want, bool html); +void dofindpath(uint64_t have, uint64_t want, bool html, int count); struct stats_key *furthestkey(struct stats_key *have);