]> the.earth.li Git - onak.git/blobdiff - keydb_fs.c
Extend database backends to support fetching by key fingerprint
[onak.git] / keydb_fs.c
index 02adf6bae1972b069c393581f92fcea3fde1ee1d..b9447321153d1f4bd40b4d90a62c9dfb25d45645 100644 (file)
@@ -1,9 +1,20 @@
 /*
- * keydb.h - Routines to store and fetch keys.
+ * keydb_fs.c - Routines to store and fetch keys in a filesystem hierarchy.
  *
- * Daniel Silverstone <dsilvers@digital-scurf.org>
+ * Copyright 2004 Daniel Silverstone <dsilvers@digital-scurf.org>
  *
- * Copyright 2004 Daniel Silverstone and Project Purple
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * 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.
  */
 
 #include <sys/types.h>
@@ -274,7 +285,8 @@ static uint64_t fs_getfullkeyid(uint64_t keyid)
  *     @publickey: A pointer to a structure to return the key in.
  *     @intrans: If we're already in a transaction.
  */
-static int fs_fetch_key(uint64_t keyid, struct openpgp_publickey **publickey,
+static int fs_fetch_key_id(uint64_t keyid,
+             struct openpgp_publickey **publickey,
              bool intrans)
 {
        static char buffer[PATH_MAX];
@@ -318,13 +330,17 @@ static int fs_store_key(struct openpgp_publickey *publickey, bool intrans,
        struct openpgp_packet_list *packets = NULL;
        struct openpgp_packet_list *list_end = NULL;
        struct openpgp_publickey *next = NULL;
-       uint64_t keyid = get_keyid(publickey);
+       uint64_t keyid;
        struct ll *wordlist = NULL, *wl = NULL;
        struct skshash hash;
        uint64_t *subkeyids = NULL;
        uint32_t hashid;
        int i = 0;
 
+       if (get_keyid(publickey, &keyid) != ONAK_E_OK) {
+               logthing(LOGTHING_ERROR, "Couldn't find key ID for key.");
+               return 0;
+       }
 
        if (!intrans)
                fs_starttrans();
@@ -415,7 +431,7 @@ static int fs_delete_key(uint64_t keyid, bool intrans)
        if (!intrans)
                fs_starttrans();
 
-       ret = fs_fetch_key(keyid, &pk, true);
+       ret = fs_fetch_key_id(keyid, &pk, true);
 
        if (ret) {
                logthing(LOGTHING_DEBUG, "Wordlist for key %016" PRIX64,
@@ -548,7 +564,7 @@ static int fs_fetch_key_text(const char *search,
        while (wl) {
                logthing(LOGTHING_DEBUG, "Adding key: %s", wl->object);
                addedkeys +=
-                   fs_fetch_key(strtoull(wl->object, NULL, 16), publickey,
+                   fs_fetch_key_id(strtoull(wl->object, NULL, 16), publickey,
                              false);
                if (addedkeys >= config.maxkeys)
                        break;
@@ -611,6 +627,7 @@ static int fs_iterate_keys(void (*iterfunc)(void *ctx,
 #define NEED_KEYID2UID 1
 #define NEED_GETKEYSIGS 1
 #define NEED_UPDATEKEYS 1
+#define NEED_GET_FP 1
 #include "keydb.c"
 
 struct dbfuncs keydb_fs_funcs = {
@@ -618,7 +635,8 @@ struct dbfuncs keydb_fs_funcs = {
        .cleanupdb              = fs_cleanupdb,
        .starttrans             = fs_starttrans,
        .endtrans               = fs_endtrans,
-       .fetch_key              = fs_fetch_key,
+       .fetch_key_id           = fs_fetch_key_id,
+       .fetch_key_fp           = generic_fetch_key_fp,
        .fetch_key_text         = fs_fetch_key_text,
        .fetch_key_skshash      = fs_fetch_key_skshash,
        .store_key              = fs_store_key,