X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=keydb.h;h=9a9371b4ac9614759c3501c9d756d019488cfa51;hb=58ed9a0076feb9604154b99da6ed1907ca7df089;hp=6c1bcf55dc17d65dec79030a64dbdccc536f0cc8;hpb=5cb3cfdb9d8caa6d7a4a1979c50c46896957b934;p=onak.git diff --git a/keydb.h b/keydb.h index 6c1bcf5..9a9371b 100644 --- a/keydb.h +++ b/keydb.h @@ -14,15 +14,16 @@ * 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" @@ -54,6 +55,22 @@ struct onak_dbctx { */ void (*endtrans)(struct onak_dbctx *); +/** + * @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. This only searches for the fingerprint of the primary key + * and will thus only ever return at most a single key. + */ + int (*fetch_key)(struct onak_dbctx *, + struct openpgp_fingerprint *fingerprint, + struct openpgp_publickey **publickey, + bool intrans); + /** * @brief Given a keyid fetch the key from storage. * @param keyid The keyid to fetch. @@ -61,9 +78,8 @@ struct onak_dbctx { * @param intrans If we're already in a transaction. * * This function returns a public key from whatever storage mechanism we - * are using. - * - * TODO: What about keyid collisions? Should we use fingerprint instead? + * are using. It may return multiple keys in the case where there are + * colliding keyids. */ int (*fetch_key_id)(struct onak_dbctx *, uint64_t keyid, @@ -78,13 +94,38 @@ struct onak_dbctx { * @param intrans If we're already in a transaction. * * This function returns a public key from whatever storage mechanism we - * are using. + * are using. Although the fingerprint should be unique this function may + * also search subkeys, which could be bound to multiple primary keys. As + * a result multiple keys may be returned. */ int (*fetch_key_fp)(struct onak_dbctx *, struct openpgp_fingerprint *fingerprint, struct openpgp_publickey **publickey, bool intrans); +/** + * @brief Tries to find the keys that contain the supplied text. + * @param search The text to search for. + * @param publickey A pointer to a structure to return the key in. + * + * This function searches for the supplied text and returns the keys that + * contain it. It is likely it will return multiple keys. + */ + int (*fetch_key_text)(struct onak_dbctx *, const char *search, + struct openpgp_publickey **publickey); + +/** + * @brief Tries to find the keys from an SKS hash + * @param hash The hash to search for. + * @param publickey A pointer to a structure to return the key in. + * + * This function looks for the key that is referenced by the supplied + * SKS hash and returns it. + */ + int (*fetch_key_skshash)(struct onak_dbctx *, + const struct skshash *hash, + struct openpgp_publickey **publickey); + /** * @brief Takes a key and stores it. * @param publickey A pointer to the public key to store. @@ -104,40 +145,20 @@ struct onak_dbctx { /** * @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)(struct onak_dbctx *, uint64_t keyid, bool intrans); - -/** - * @brief Trys to find the keys that contain the supplied text. - * @param search The text to search for. - * @param publickey A pointer to a structure to return the key in. - * - * This function searches for the supplied text and returns the keys that - * contain it. - */ - int (*fetch_key_text)(struct onak_dbctx *, const char *search, - struct openpgp_publickey **publickey); - -/** - * @brief Tries to find the keys from an SKS hash - * @param hash The hash to search for. - * @param publickey A pointer to a structure to return the key in. - * - * This function looks for the key that is referenced by the supplied - * SKS hash and returns it. - */ - int (*fetch_key_skshash)(struct onak_dbctx *, - const struct skshash *hash, - struct openpgp_publickey **publickey); + int (*delete_key)(struct onak_dbctx *, struct openpgp_fingerprint *fp, + bool intrans); /** * @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 @@ -150,7 +171,10 @@ struct onak_dbctx { * with the update. */ int (*update_keys)(struct onak_dbctx *, - struct openpgp_publickey **keys, bool sendsync); + struct openpgp_publickey **keys, + struct keyarray *blacklist, + bool updateonly, + bool sendsync); /** * @brief Takes a keyid and returns the primary UID for it. @@ -183,15 +207,6 @@ struct onak_dbctx { struct ll * (*cached_getkeysigs)(struct onak_dbctx *, 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)(struct onak_dbctx *, uint64_t keyid); - /** * @brief call a function once for each key in the db. * @param iterfunc The function to call. @@ -207,6 +222,11 @@ 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. */