X-Git-Url: https://git.sommitrealweird.co.uk/onak.git/blobdiff_plain/1754a2860ffcb23b70eecc902b0ec795c7efa595..8b4052ad6015aa9f54c9c824f28655f230d09d8d:/stats.c diff --git a/stats.c b/stats.c index 538e888..7b516c6 100644 --- a/stats.c +++ b/stats.c @@ -24,7 +24,7 @@ */ void initcolour(bool parent) { - unsigned long loop; + unsigned int loop; struct ll *curkey; /* @@ -60,7 +60,7 @@ unsigned long findpath(struct stats_key *have, struct stats_key *want) struct ll *sigs = NULL; struct ll *nextkeys = NULL; long curdegree = 0; - long count = 0; + unsigned long count = 0; curdegree = 1; keys = lladd(NULL, want); @@ -74,7 +74,9 @@ 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)->revoked && + ((struct stats_key *)sigs->object)->colour == 0) { count++; ((struct stats_key *)sigs->object)->colour = curdegree; @@ -111,16 +113,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); @@ -129,8 +133,8 @@ void dofindpath(uint64_t have, uint64_t want, bool html) /* * Make sure the keys we have and want are in the cache. */ - cached_getkeysigs(fullhave); - cached_getkeysigs(fullwant); + (void) cached_getkeysigs(fullhave); + (void) cached_getkeysigs(fullwant); if ((keyinfoa = findinhash(fullhave)) == NULL) { printf("Couldn't find key 0x%llX.\n", have); @@ -140,74 +144,93 @@ 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 ? "
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 == want) ? "" : - " 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'); } - putchar('\n'); + pathnum++; } }