X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=keydb_stacked.c;h=59c988da9172f0cd862df64a251fde0fc03541a0;hb=adc800dbc424a1e246dd4a82a0c2e88eeda25531;hp=c732720ebdbccdf8ba1e89a5eb01635f7ccdb80e;hpb=a04a68c405b6927a6b4fdf9682f697847036ecf7;p=onak.git diff --git a/keydb_stacked.c b/keydb_stacked.c index c732720..59c988d 100644 --- a/keydb_stacked.c +++ b/keydb_stacked.c @@ -13,25 +13,21 @@ * 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 +#include #include +#include #include -#include "decodekey.h" -#include "hash.h" +#include "cleankey.h" #include "keydb.h" -#include "keyid.h" #include "keystructs.h" +#include "ll.h" #include "log.h" -#include "mem.h" -#include "merge.h" #include "onak-conf.h" -#include "openpgp.h" -#include "parsekey.h" -#include "sendsync.h" struct onak_stacked_dbctx { struct ll *backends; @@ -117,6 +113,7 @@ static void store_on_fallback(struct onak_stacked_dbctx *privctx, (struct onak_dbctx *) privctx->backends->object; struct openpgp_publickey *curkey; + cleankeys(&publickey, config.clean_policies); /* * If we walked the stack at all, store the key in the first * backend if configured to do so. It's not an update as we @@ -225,19 +222,30 @@ static int stacked_fetch_key_skshash(struct onak_dbctx *dbctx, return res; } +/* + * Include the basic keydb routines so we can use them for fall back. + * For all of the following we try the top keydb backend and if that doesn't + * have answer fall back to the generics, which will do a retrieve from a + * backend further down the stack, then a fallback store. + */ +#define NEED_KEYID2UID 1 +#define NEED_GETKEYSIGS 1 +#define NEED_GETFULLKEYID 1 +#define NEED_UPDATEKEYS 1 +#include "keydb.c" + static struct ll *stacked_getkeysigs(struct onak_dbctx *dbctx, uint64_t keyid, bool *revoked) { struct onak_stacked_dbctx *privctx = (struct onak_stacked_dbctx *) dbctx->priv; - struct onak_dbctx *backend; - struct ll *cur; - struct ll *res = NULL; + struct onak_dbctx *backend = + (struct onak_dbctx *) privctx->backends->object; + struct ll *res; - for (cur = privctx->backends; cur != NULL && res == NULL; - cur = cur->next) { - backend = (struct onak_dbctx *) cur->object; - res = backend->getkeysigs(backend, keyid, revoked); + res = backend->getkeysigs(backend, keyid, revoked); + if (res == NULL) { + res = generic_getkeysigs(dbctx, keyid, revoked); } return res; @@ -248,14 +256,13 @@ static struct ll *stacked_cached_getkeysigs(struct onak_dbctx *dbctx, { struct onak_stacked_dbctx *privctx = (struct onak_stacked_dbctx *) dbctx->priv; - struct onak_dbctx *backend; - struct ll *cur; - struct ll *res = NULL; + struct onak_dbctx *backend = + (struct onak_dbctx *) privctx->backends->object; + struct ll *res; - for (cur = privctx->backends; cur != NULL && res == NULL; - cur = cur->next) { - backend = (struct onak_dbctx *) cur->object; - res = backend->cached_getkeysigs(backend, keyid); + res = backend->cached_getkeysigs(backend, keyid); + if (res == NULL) { + res = generic_cached_getkeysigs(dbctx, keyid); } return res; @@ -266,14 +273,13 @@ static char *stacked_keyid2uid(struct onak_dbctx *dbctx, { struct onak_stacked_dbctx *privctx = (struct onak_stacked_dbctx *) dbctx->priv; - struct onak_dbctx *backend; - struct ll *cur; + struct onak_dbctx *backend = + (struct onak_dbctx *) privctx->backends->object; char *res = NULL; - for (cur = privctx->backends; cur != NULL && res == NULL; - cur = cur->next) { - backend = (struct onak_dbctx *) cur->object; - res = backend->keyid2uid(backend, keyid); + res = backend->keyid2uid(backend, keyid); + if (!res) { + res = generic_keyid2uid(dbctx, keyid); } return res; @@ -284,14 +290,13 @@ static uint64_t stacked_getfullkeyid(struct onak_dbctx *dbctx, { struct onak_stacked_dbctx *privctx = (struct onak_stacked_dbctx *) dbctx->priv; - struct onak_dbctx *backend; - struct ll *cur; + struct onak_dbctx *backend = + (struct onak_dbctx *) privctx->backends->object; uint64_t res = 0; - for (cur = privctx->backends; cur != NULL && res == 0; - cur = cur->next) { - backend = (struct onak_dbctx *) cur->object; - res = backend->getfullkeyid(backend, keyid); + res = backend->getfullkeyid(backend, keyid); + if (res == 0) { + res = generic_getfullkeyid(dbctx, keyid); } return res;