From 4aafe74aea2d616a5d9611c6e3c01a182a0b37ec Mon Sep 17 00:00:00 2001 From: Jonathan McDowell Date: Mon, 31 May 2004 23:46:57 +0000 Subject: [PATCH] cscvs to tla changeset 8 Author: noodles Date: 2002/09/08 10:33:20 Pulling dofindpath out of gpgwww.c into stats.c. --- gpgwww.c | 87 ++-------------------------------------------- stats.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- stats.h | 11 ++++++ 3 files changed, 116 insertions(+), 85 deletions(-) diff --git a/gpgwww.c b/gpgwww.c index dc79135..75022b8 100644 --- a/gpgwww.c +++ b/gpgwww.c @@ -17,80 +17,6 @@ #include "onak-conf.h" #include "stats.h" -void dofindpath(uint64_t have, uint64_t want, bool html) -{ - struct stats_key *keyinfoa, *keyinfob, *curkey; - int rec; - char *uid; - - have = getfullkeyid(have); - want = getfullkeyid(want); - - /* - * Make sure the keys we have and want are in the cache. - */ - hash_getkeysigs(have); - hash_getkeysigs(want); - - if ((keyinfoa = findinhash(have)) == NULL) { - printf("Couldn't find key 0x%llX.\n", have); - return; - } - if ((keyinfob = findinhash(want)) == NULL) { - printf("Couldn't find key 0x%llX.\n", want); - return; - } - - /* - * Fill the tree info up. - */ - initcolour(true); - rec = findpath(keyinfoa, keyinfob); - keyinfob->parent = 0; - - printf("%d nodes examined. %ld elements in the hash\n", rec, - hashelements()); - if (keyinfoa->colour == 0) { - printf("Can't find a link from 0x%llX to 0x%llX\n", - have, - want); - } else { - printf("%d steps from 0x%llX to 0x%llX\n", - keyinfoa->colour, have & 0xFFFFFFFF, - want & 0xFFFFFFFF); - curkey = keyinfoa; - while (curkey != NULL && curkey->keyid != 0) { - uid = keyid2uid(curkey->keyid); - if (html && uid == NULL) { - printf("" - "0x%llX ([User id not found])%s)%s\n", - curkey->keyid & 0xFFFFFFFF, - curkey->keyid & 0xFFFFFFFF, - (curkey->keyid == want) ? "" : - " signs"); - } else if (html && uid != NULL) { - printf("" - "0x%llX (%s)%s\n", - curkey->keyid & 0xFFFFFFFF, - curkey->keyid & 0xFFFFFFFF, - curkey->keyid & 0xFFFFFFFF, - txt2html(keyid2uid(curkey->keyid)), - (curkey->keyid == want) ? "" : - " signs"); - } else { - printf("0x%llX (%s)%s\n", - curkey->keyid & 0xFFFFFFFF, - (uid == NULL) ? "[User id not found]" : - uid, - (curkey->keyid == want) ? "" : - " signs"); - } - curkey = findinhash(curkey->parent); - } - } -} - void parsecgistuff(char **cgiparams, uint64_t *from, uint64_t *to) { int i = 0; @@ -117,13 +43,7 @@ int main(int argc, char *argv[]) cgiparams = getcgivars(argc, argv); - puts("Content-Type: text/html\n"); - puts(""); - puts(""); - puts("Experimental PGP key path finder results"); - puts(""); - puts(""); - puts(""); + start_html("Experimental PGP key path finder results"); parsecgistuff(cgiparams, &from, &to); @@ -134,16 +54,15 @@ int main(int argc, char *argv[]) } printf("

Looking for path from 0x%llX to 0x%llX

\n", from, to); - puts("
");
 	initdb();
 	inithash();
 	dofindpath(from, to, true);
+	destroyhash();
 	cleanupdb();
-	puts("
"); puts("
"); puts("Produced by gpgwww " VERSION ", part of onak. Jonathan McDowell"); - puts(""); + end_html(); return EXIT_SUCCESS; } diff --git a/stats.c b/stats.c index b302f09..db8566b 100644 --- a/stats.c +++ b/stats.c @@ -9,6 +9,7 @@ #include #include +#include "getcgi.h" #include "hash.h" #include "keydb.h" #include "ll.h" @@ -88,12 +89,112 @@ unsigned long findpath(struct stats_key *have, struct stats_key *want) nextkeys = NULL; curdegree++; } - fprintf(stderr, "Hash contains %ld keys.\n", hashelements()); } return count; } +/** + * dofindpath - Given 2 keys displays a path between them. + * @have: The key we have. + * @want: The key we want to get to. + * @html: Should we output in html. + * + * 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) +{ + struct stats_key *keyinfoa, *keyinfob, *curkey; + int rec; + char *uid; + + have = getfullkeyid(have); + want = getfullkeyid(want); + + /* + * Make sure the keys we have and want are in the cache. + */ + hash_getkeysigs(have); + hash_getkeysigs(want); + + if ((keyinfoa = findinhash(have)) == NULL) { + printf("Couldn't find key 0x%llX.\n", have); + return; + } + if ((keyinfob = findinhash(want)) == NULL) { + printf("Couldn't find key 0x%llX.\n", want); + return; + } + + /* + * 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, + hashelements(), + html ? "
" : ""); + 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", + 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 == want) ? "" : + " signs"); + } else if (html && uid != NULL) { + printf("" + "0x%08llX (%s)%s
\n", + curkey->keyid & 0xFFFFFFFF, + curkey->keyid & 0xFFFFFFFF, + curkey->keyid & 0xFFFFFFFF, + txt2html(keyid2uid(curkey->keyid)), + (curkey->keyid == want) ? "" : + " signs"); + } else { + printf("0x%08llX (%s)%s\n", + curkey->keyid & 0xFFFFFFFF, + (uid == NULL) ? "[User id not found]" : + uid, + (curkey->keyid == want) ? "" : + " signs"); + } + 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'); + } +} + + + struct stats_key *furthestkey(struct stats_key *have) { unsigned long count = 0; diff --git a/stats.h b/stats.h index af9f79f..df32ab6 100644 --- a/stats.h +++ b/stats.h @@ -61,6 +61,17 @@ void initcolour(bool parent); */ unsigned long findpath(struct stats_key *have, struct stats_key *want); +/** + * dofindpath - Given 2 keys displays a path between them. + * @have: The key we have. + * @want: The key we want to get to. + * @html: Should we output in html. + * + * 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); struct stats_key *furthestkey(struct stats_key *have); -- 2.30.2