X-Git-Url: http://the.earth.li/gitweb/?a=blobdiff_plain;ds=sidebyside;f=keydb.h;h=7297a7664b39fe53ceccefb23c791951acfb586a;hb=6565bed3065d1751abf469da1a85884d9ddde759;hp=20ab62f3bef32096ce50787c299e46f98c2f190c;hpb=d38e1f468376f8b19b208f2da4d20cb2919875dd;p=onak.git
diff --git a/keydb.h b/keydb.h
index 20ab62f..7297a76 100644
--- a/keydb.h
+++ b/keydb.h
@@ -14,39 +14,30 @@
* 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 "keyarray.h"
#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 +46,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 +66,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,18 +99,20 @@ 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);
/**
* @brief Given a keyid delete the key from storage.
- * @param keyid The keyid to delete.
+ * @param fp The fingerprint of the key to delete.
* @param intrans If we're already in a transaction.
*
* 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 *, struct openpgp_fingerprint *fp,
+ bool intrans);
/**
* @brief Trys to find the keys that contain the supplied text.
@@ -112,7 +122,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,12 +133,15 @@ 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);
/**
* @brief Takes a list of public keys and updates them in the DB.
* @param keys The keys to update in the DB.
+ * @param blacklist A keyarray of fingerprints that shouldn't be added.
+ * @updateonly: Only update existing keys, don't add new ones.
* @param sendsync If we should send a keysync mail.
*
* Takes a list of keys and adds them to the database, merging them with
@@ -140,7 +153,11 @@ 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,
+ struct keyarray *blacklist,
+ bool updateonly,
+ bool sendsync);
/**
* @brief Takes a keyid and returns the primary UID for it.
@@ -149,7 +166,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 +177,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,16 +187,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);
-
-/**
- * @brief Maps a 32 bit key id to a 64 bit one.
- * @param keyid The 32 bit keyid.
- *
- * 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);
+ struct ll * (*cached_getkeysigs)(struct onak_dbctx *,
+ uint64_t keyid);
/**
* @brief call a function once for each key in the db.
@@ -191,8 +201,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__ */