X-Git-Url: http://the.earth.li/gitweb/?a=blobdiff_plain;f=onak.c;h=0c4673d7704323723c53133b9cc429f2700bd5c9;hb=e17ef1fac72bcfeff58e7c88af18eea6f9d6bc85;hp=dd39bb3757fb2992e288923b5bb40f570160b48c;hpb=8e0907be1d73011075a99a0c029c56664e12843e;p=onak.git diff --git a/onak.c b/onak.c index dd39bb3..0c4673d 100644 --- a/onak.c +++ b/onak.c @@ -45,9 +45,10 @@ #include "version.h" void find_keys(struct onak_dbctx *dbctx, - char *search, uint64_t keyid, uint8_t *fp, bool ishex, - bool isfp, bool fingerprint, bool skshash, bool exact, - bool verbose) + char *search, uint64_t keyid, + struct openpgp_fingerprint *fingerprint, + bool ishex, bool isfp, bool dispfp, bool skshash, + bool exact, bool verbose) { struct openpgp_publickey *publickey = NULL; int count = 0; @@ -56,13 +57,13 @@ void find_keys(struct onak_dbctx *dbctx, count = dbctx->fetch_key_id(dbctx, keyid, &publickey, false); } else if (isfp) { - count = dbctx->fetch_key_fp(dbctx, fp, MAX_FINGERPRINT_LEN, + count = dbctx->fetch_key_fp(dbctx, fingerprint, &publickey, false); } else { count = dbctx->fetch_key_text(dbctx, search, &publickey); } if (publickey != NULL) { - key_index(dbctx, publickey, verbose, fingerprint, skshash, + key_index(dbctx, publickey, verbose, dispfp, skshash, false); free_publickey(publickey); } else if (count == 0) { @@ -148,6 +149,7 @@ void usage(void) { puts("\tgetphoto - retrieves the first photoid on the given key and" " dumps to\n\t stdout"); puts("\tindex - search for a key and list it"); + puts("\treindex - retrieve and re-store a key in the backend db"); puts("\tvindex - search for a key and list it and its signatures"); } @@ -162,19 +164,18 @@ int main(int argc, char *argv[]) char *search = NULL; char *end = NULL; uint64_t keyid = 0; - uint8_t fp[MAX_FINGERPRINT_LEN]; int i; bool ishex = false; bool isfp = false; - bool verbose = false; bool update = false; bool binary = false; - bool fingerprint = false; + bool dispfp = false; bool skshash = false; int optchar; struct dump_ctx dumpstate; struct skshash hash; struct onak_dbctx *dbctx; + struct openpgp_fingerprint fingerprint; while ((optchar = getopt(argc, argv, "bc:fsuv")) != -1 ) { switch (optchar) { @@ -185,7 +186,7 @@ int main(int argc, char *argv[]) configfile = strdup(optarg); break; case 'f': - fingerprint = true; + dispfp = true; break; case 's': skshash = true; @@ -194,7 +195,6 @@ int main(int argc, char *argv[]) update = true; break; case 'v': - verbose = true; setlogthreshold(LOGTHING_INFO); break; } @@ -322,13 +322,15 @@ int main(int argc, char *argv[]) search = argv[optind+1]; if (search != NULL && strlen(search) == 42 && search[0] == '0' && search[1] == 'x') { + fingerprint.length = MAX_FINGERPRINT_LEN; for (i = 0; i < MAX_FINGERPRINT_LEN; i++) { - fp[i] = (hex2bin(search[2 + i * 2]) << 4) + + fingerprint.fp[i] = + (hex2bin(search[2 + i * 2]) << 4) + hex2bin(search[3 + i * 2]); } isfp = true; } else if (search != NULL) { - keyid = strtoul(search, &end, 16); + keyid = strtouq(search, &end, 16); if (*search != 0 && end != NULL && *end == 0) { @@ -337,12 +339,12 @@ int main(int argc, char *argv[]) } dbctx = config.dbinit(false); if (!strcmp("index", argv[optind])) { - find_keys(dbctx, search, keyid, fp, ishex, isfp, - fingerprint, skshash, + find_keys(dbctx, search, keyid, &fingerprint, ishex, + isfp, dispfp, skshash, false, false); } else if (!strcmp("vindex", argv[optind])) { - find_keys(dbctx, search, keyid, fp, ishex, isfp, - fingerprint, skshash, + find_keys(dbctx, search, keyid, &fingerprint, ishex, + isfp, dispfp, skshash, false, true); } else if (!strcmp("getphoto", argv[optind])) { if (!ishex) { @@ -375,8 +377,8 @@ int main(int argc, char *argv[]) " You must supply a keyid / " "fingerprint."); } else if ((isfp && - dbctx->fetch_key_fp(dbctx, fp, - MAX_FINGERPRINT_LEN, + dbctx->fetch_key_fp(dbctx, + &fingerprint, &keys, false)) || (ishex && dbctx->fetch_key_id(dbctx, keyid, @@ -424,6 +426,16 @@ int main(int argc, char *argv[]) } else { puts("Key not found"); } + } else if (!strcmp("reindex", argv[optind])) { + dbctx->starttrans(dbctx); + if (dbctx->fetch_key_id(dbctx, keyid, &keys, true)) { + dbctx->delete_key(dbctx, keyid, true); + cleankeys(keys); + dbctx->store_key(dbctx, keys, true, false); + } else { + puts("Key not found"); + } + dbctx->endtrans(dbctx); } dbctx->cleanupdb(dbctx); } else {