X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=keydb.h;h=05405c334f8b06eca398cf7d19b977d8c897d622;hb=490c02ce72b7fa7cedecf7acaae46713fff507da;hp=20ab62f3bef32096ce50787c299e46f98c2f190c;hpb=d38e1f468376f8b19b208f2da4d20cb2919875dd;p=onak.git diff --git a/keydb.h b/keydb.h index 20ab62f..05405c3 100644 --- a/keydb.h +++ b/keydb.h @@ -14,39 +14,29 @@ * 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 . */ #ifndef __KEYDB_H__ #define __KEYDB_H__ +#include #include #include "keystructs.h" #include "ll.h" /** - * @brief All of the functions a DB backend exports. + * @brief Context for a database backend */ -struct dbfuncs { -/** - * @brief Initialize the key database. - * @param readonly If we'll only be reading the DB, not writing to it. - * - * This function should be called before any of the other functions in - * this file are called in order to allow the DB to be initialized ready - * for access. - */ - void (*initdb)(bool readonly); - +struct onak_dbctx { /** * @brief De-initialize the key database. * * This function should be called upon program exit to allow the DB to * cleanup after itself. */ - void (*cleanupdb)(void); + void (*cleanupdb)(struct onak_dbctx *); /** * @brief Start a transaction. @@ -55,14 +45,14 @@ struct dbfuncs { * operations on the database to help speed it all up, or if we want * something to only succeed if all relevant operations are successful. */ - bool (*starttrans)(void); + bool (*starttrans)(struct onak_dbctx *); /** * @brief End a transaction. * * Ends a transaction. */ - void (*endtrans)(void); + void (*endtrans)(struct onak_dbctx *); /** * @brief Given a keyid fetch the key from storage. @@ -75,7 +65,24 @@ struct dbfuncs { * * TODO: What about keyid collisions? Should we use fingerprint instead? */ - int (*fetch_key)(uint64_t keyid, struct openpgp_publickey **publickey, + int (*fetch_key_id)(struct onak_dbctx *, + uint64_t keyid, + struct openpgp_publickey **publickey, + bool intrans); + +/** + * @brief Given a fingerprint fetch the key from storage. + * @param fp The fingerprint to fetch. + * @param fpsize Number of bytes in the fingerprint (16 for v3, 20 for v4) + * @param publickey A pointer to a structure to return the key in. + * @param intrans If we're already in a transaction. + * + * This function returns a public key from whatever storage mechanism we + * are using. + */ + int (*fetch_key_fp)(struct onak_dbctx *, + struct openpgp_fingerprint *fingerprint, + struct openpgp_publickey **publickey, bool intrans); /** @@ -91,7 +98,8 @@ struct dbfuncs { * * TODO: Do we store multiple keys of the same id? Or only one and replace it? */ - int (*store_key)(struct openpgp_publickey *publickey, bool intrans, + int (*store_key)(struct onak_dbctx *, + struct openpgp_publickey *publickey, bool intrans, bool update); /** @@ -102,7 +110,7 @@ struct dbfuncs { * This function deletes a public key from whatever storage mechanism we * are using. Returns 0 if the key existed. */ - int (*delete_key)(uint64_t keyid, bool intrans); + int (*delete_key)(struct onak_dbctx *, uint64_t keyid, bool intrans); /** * @brief Trys to find the keys that contain the supplied text. @@ -112,7 +120,7 @@ struct dbfuncs { * This function searches for the supplied text and returns the keys that * contain it. */ - int (*fetch_key_text)(const char *search, + int (*fetch_key_text)(struct onak_dbctx *, const char *search, struct openpgp_publickey **publickey); /** @@ -123,7 +131,8 @@ struct dbfuncs { * This function looks for the key that is referenced by the supplied * SKS hash and returns it. */ - int (*fetch_key_skshash)(const struct skshash *hash, + int (*fetch_key_skshash)(struct onak_dbctx *, + const struct skshash *hash, struct openpgp_publickey **publickey); /** @@ -140,7 +149,8 @@ struct dbfuncs { * If sendsync is true then we send out a keysync mail to our sync peers * with the update. */ - int (*update_keys)(struct openpgp_publickey **keys, bool sendsync); + int (*update_keys)(struct onak_dbctx *, + struct openpgp_publickey **keys, bool sendsync); /** * @brief Takes a keyid and returns the primary UID for it. @@ -149,7 +159,7 @@ struct dbfuncs { * This function returns a UID for the given key. Returns NULL if the key * isn't found. */ - char * (*keyid2uid)(uint64_t keyid); + char * (*keyid2uid)(struct onak_dbctx *, uint64_t keyid); /** * @brief Gets a linked list of the signatures on a key. @@ -160,7 +170,8 @@ struct dbfuncs { * indexing and doing stats bits. If revoked is non-NULL then if the key * is revoked it's set to true. */ - struct ll * (*getkeysigs)(uint64_t keyid, bool *revoked); + struct ll * (*getkeysigs)(struct onak_dbctx *, + uint64_t keyid, bool *revoked); /** * @brief Gets the signatures on a key. @@ -169,7 +180,8 @@ struct dbfuncs { * This function gets the signatures on a key. It's the same as the * getkeysigs function above except we use the hash module to cache the */ - struct ll * (*cached_getkeysigs)(uint64_t keyid); + struct ll * (*cached_getkeysigs)(struct onak_dbctx *, + uint64_t keyid); /** * @brief Maps a 32 bit key id to a 64 bit one. @@ -178,7 +190,7 @@ struct dbfuncs { * This function maps a 32 bit key id to the full 64 bit one. It returns the * full keyid. If the key isn't found a keyid of 0 is returned. */ - uint64_t (*getfullkeyid)(uint64_t keyid); + uint64_t (*getfullkeyid)(struct onak_dbctx *, uint64_t keyid); /** * @brief call a function once for each key in the db. @@ -191,8 +203,19 @@ struct dbfuncs { * * Returns the number of keys we iterated over. */ - int (*iterate_keys)(void (*iterfunc)(void *ctx, + int (*iterate_keys)(struct onak_dbctx *, + void (*iterfunc)(void *ctx, struct openpgp_publickey *key), void *ctx); + +/** + * @brief Configuration file information for this backend instance + */ + struct onak_db_config *config; + +/** + * @brief Private backend context information. + */ + void *priv; }; #endif /* __KEYDB_H__ */