]> the.earth.li Git - onak.git/blobdiff - onak.c
0.6.3 release
[onak.git] / onak.c
diff --git a/onak.c b/onak.c
index 717402ee41137e0e90aa6862d87c8a4396d3f552..a588b51d2fc667c668b4aa3106dabc9a2d7794be 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,14 +181,20 @@ 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;
                        break;
                case 'c':
+                       if (configfile != NULL) {
+                               free(configfile);
+                       }
                        configfile = strdup(optarg);
                        break;
+               case 'e':
+                       exact = true;
+                       break;
                case 'f': 
                        dispfp = true;
                        break;
@@ -208,6 +218,12 @@ int main(int argc, char *argv[])
                usage();
        } else if (!strcmp("dump", argv[optind])) {
                dbctx = config.dbinit(config.backend, true);
+               if (dbctx == NULL) {
+                       logthing(LOGTHING_ERROR,
+                               "Failed to open key database.");
+                       rc = EXIT_FAILURE;
+                       goto err;
+               }
                dumpstate.count = dumpstate.filenum = 0;
                dumpstate.maxcount = 100000;
                dumpstate.fd = -1;
@@ -235,6 +251,12 @@ int main(int argc, char *argv[])
                                        result);
 
                        dbctx = config.dbinit(config.backend, false);
+                       if (dbctx == NULL) {
+                               logthing(LOGTHING_ERROR,
+                                       "Failed to open key database.");
+                               rc = EXIT_FAILURE;
+                               goto err;
+                       }
                        result = cleankeys(dbctx, &keys,
                                        config.clean_policies);
                        logthing(LOGTHING_INFO, "%d keys cleaned.",
@@ -277,6 +299,12 @@ int main(int argc, char *argv[])
                }
        } else if (!strcmp("clean", argv[optind])) {
                dbctx = config.dbinit(config.backend, true);
+               if (dbctx == NULL) {
+                       logthing(LOGTHING_ERROR,
+                               "Failed to open key database.");
+                       rc = EXIT_FAILURE;
+                       goto err;
+               }
                if (binary) {
                        result = read_openpgp_stream(stdin_getchar, NULL,
                                 &packets, 0);
@@ -363,14 +391,20 @@ int main(int argc, char *argv[])
                        }
                }
                dbctx = config.dbinit(config.backend, false);
+               if (dbctx == NULL) {
+                       logthing(LOGTHING_ERROR,
+                               "Failed to open key database.");
+                       rc = EXIT_FAILURE;
+                       goto err;
+               }
                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."
@@ -477,6 +511,7 @@ int main(int argc, char *argv[])
                usage();
        }
 
+err:
        cleanuplogthing();
        cleanupconfig();
        free(configfile);