]> the.earth.li Git - onak.git/blobdiff - onak.c
Bump debhelper compat level to 13
[onak.git] / onak.c
diff --git a/onak.c b/onak.c
index 030d46819bf6c5198655b57203cf2ebf27ee1cfa..a27ff983e78908d6de2e57013173d7b97d7118cf 100644 (file)
--- a/onak.c
+++ b/onak.c
@@ -56,7 +56,10 @@ void find_keys(struct onak_dbctx *dbctx,
        if (ishex) {
                count = dbctx->fetch_key_id(dbctx, keyid, &publickey,
                                false);
-       } else if (isfp) {
+       } else if (isfp && exact) {
+               count = dbctx->fetch_key(dbctx, fingerprint,
+                               &publickey, false);
+       } else if (isfp && !exact) {
                count = dbctx->fetch_key_fp(dbctx, fingerprint,
                                &publickey, false);
        } else {
@@ -165,6 +168,7 @@ int main(int argc, char *argv[])
        char                            *end = NULL;
        uint64_t                         keyid = 0;
        int                              i;
+       bool                             exact = false;
        bool                             ishex = false;
        bool                             isfp = false;
        bool                             update = false;
@@ -177,7 +181,7 @@ int main(int argc, char *argv[])
        struct onak_dbctx               *dbctx;
        struct openpgp_fingerprint       fingerprint;
 
-       while ((optchar = getopt(argc, argv, "bc:fsuv")) != -1 ) {
+       while ((optchar = getopt(argc, argv, "bc:efsuv")) != -1 ) {
                switch (optchar) {
                case 'b': 
                        binary = true;
@@ -185,6 +189,9 @@ int main(int argc, char *argv[])
                case 'c':
                        configfile = strdup(optarg);
                        break;
+               case 'e':
+                       exact = true;
+                       break;
                case 'f': 
                        dispfp = true;
                        break;
@@ -234,11 +241,12 @@ int main(int argc, char *argv[])
                        logthing(LOGTHING_INFO, "Finished reading %d keys.",
                                        result);
 
-                       result = cleankeys(&keys, config.clean_policies);
+                       dbctx = config.dbinit(config.backend, false);
+                       result = cleankeys(dbctx, &keys,
+                                       config.clean_policies);
                        logthing(LOGTHING_INFO, "%d keys cleaned.",
                                        result);
 
-                       dbctx = config.dbinit(config.backend, false);
                        logthing(LOGTHING_NOTICE, "Got %d new keys.",
                                        dbctx->update_keys(dbctx, &keys,
                                                &config.blacklist,
@@ -275,6 +283,7 @@ int main(int argc, char *argv[])
                        logthing(LOGTHING_NOTICE, "No changes.");
                }
        } else if (!strcmp("clean", argv[optind])) {
+               dbctx = config.dbinit(config.backend, true);
                if (binary) {
                        result = read_openpgp_stream(stdin_getchar, NULL,
                                 &packets, 0);
@@ -292,7 +301,7 @@ int main(int argc, char *argv[])
                                        result);
 
                        if (keys != NULL) {
-                               result = cleankeys(&keys,
+                               result = cleankeys(dbctx, &keys,
                                                config.clean_policies);
                                logthing(LOGTHING_INFO, "%d keys cleaned.",
                                                result);
@@ -322,6 +331,7 @@ int main(int argc, char *argv[])
                        free_publickey(keys);
                        keys = NULL;
                }
+               dbctx->cleanupdb(dbctx);
        } else if (!strcmp("dumpconfig", argv[optind])) {
                if ((argc - optind) == 2) {
                        writeconfig(argv[optind + 1]);
@@ -363,11 +373,11 @@ int main(int argc, char *argv[])
                if (!strcmp("index", argv[optind])) {
                        find_keys(dbctx, search, keyid, &fingerprint, ishex,
                                        isfp, dispfp, skshash,
-                                       false, false);
+                                       exact, false);
                } else if (!strcmp("vindex", argv[optind])) {
                        find_keys(dbctx, search, keyid, &fingerprint, ishex,
                                        isfp, dispfp, skshash,
-                                       false, true);
+                                       exact, true);
                } else if (!strcmp("getphoto", argv[optind])) {
                        if (!ishex) {
                                puts("Can't get a key on uid text."
@@ -462,7 +472,7 @@ int main(int argc, char *argv[])
                        if (dbctx->fetch_key_id(dbctx, keyid, &keys, true)) {
                                get_fingerprint(keys->publickey, &fingerprint);
                                dbctx->delete_key(dbctx, &fingerprint, true);
-                               cleankeys(&keys, config.clean_policies);
+                               cleankeys(dbctx, &keys, config.clean_policies);
                                dbctx->store_key(dbctx, keys, true, false);
                        } else {
                                puts("Key not found");