X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=onak.c;h=89c2ec7ba04e5f779ef87c56863b1dd3d919b622;hb=490c02ce72b7fa7cedecf7acaae46713fff507da;hp=7a5d693cc9b89904e2f97762deb5d579537b5c6e;hpb=83ae316a7b14e55418349e87d1a1942a0627ae14;p=onak.git diff --git a/onak.c b/onak.c index 7a5d693..89c2ec7 100644 --- a/onak.c +++ b/onak.c @@ -15,8 +15,7 @@ * more details. * * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 51 - * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * this program. If not, see . */ #include @@ -45,9 +44,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 +56,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 +148,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,18 +163,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 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) { @@ -184,7 +185,7 @@ int main(int argc, char *argv[]) configfile = strdup(optarg); break; case 'f': - fingerprint = true; + dispfp = true; break; case 's': skshash = true; @@ -205,7 +206,7 @@ int main(int argc, char *argv[]) if ((argc - optind) < 1) { usage(); } else if (!strcmp("dump", argv[optind])) { - dbctx = config.dbinit(true); + dbctx = config.dbinit(config.backend, true); dumpstate.count = dumpstate.filenum = 0; dumpstate.maxcount = 100000; dumpstate.fd = -1; @@ -236,7 +237,7 @@ int main(int argc, char *argv[]) logthing(LOGTHING_INFO, "%d keys cleaned.", result); - dbctx = config.dbinit(false); + dbctx = config.dbinit(config.backend, false); logthing(LOGTHING_NOTICE, "Got %d new keys.", dbctx->update_keys(dbctx, &keys, false)); @@ -316,31 +317,40 @@ int main(int argc, char *argv[]) free_publickey(keys); keys = NULL; } + } else if (!strcmp("dumpconfig", argv[optind])) { + if ((argc - optind) == 2) { + writeconfig(argv[optind + 1]); + } else { + /* Dump config to stdout */ + writeconfig(NULL); + } } else if ((argc - optind) == 2) { 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) { ishex = true; } } - dbctx = config.dbinit(false); + dbctx = config.dbinit(config.backend, 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) { @@ -373,8 +383,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, @@ -422,6 +432,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 { @@ -430,6 +450,7 @@ int main(int argc, char *argv[]) cleanuplogthing(); cleanupconfig(); + free(configfile); return rc; }