]> the.earth.li Git - onak.git/blobdiff - keydb_dynamic.c
Add ability to drop overly large packets
[onak.git] / keydb_dynamic.c
index 32695c389f22de5fe3e07f7afdd443e591800bfa..9e4e3bcb7585e27decf07aa2a8ca22905d0a0573 100644 (file)
@@ -13,8 +13,7 @@
  * 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 <https://www.gnu.org/licenses/>.
  */
 
 #include <dlfcn.h>
@@ -66,14 +65,14 @@ static int dynamic_fetch_key_id(struct onak_dbctx *dbctx, uint64_t keyid,
 }
 
 static int dynamic_fetch_key_fp(struct onak_dbctx *dbctx,
-               uint8_t *fp, size_t fpsize,
+               struct openpgp_fingerprint *fingerprint,
                struct openpgp_publickey **publickey, bool intrans)
 {
        struct onak_dynamic_dbctx *privctx =
                        (struct onak_dynamic_dbctx *) dbctx->priv;
 
        return privctx->loadeddbctx->fetch_key_fp(privctx->loadeddbctx,
-                       fp, fpsize, publickey, intrans);
+                       fingerprint, publickey, intrans);
 }
 
 static int dynamic_fetch_key_text(struct onak_dbctx *dbctx,
@@ -206,13 +205,21 @@ static void dynamic_cleanupdb(struct onak_dbctx *dbctx)
        }
 }
 
-struct onak_dbctx *keydb_dynamic_init(bool readonly)
+struct onak_dbctx *keydb_dynamic_init(struct onak_db_config *dbcfg,
+               bool readonly)
 {
        struct onak_dbctx *dbctx;
        char *soname;
        char *initname;
-       struct onak_dbctx *(*backend_init)(bool);
+       struct onak_dbctx *(*backend_init)(struct onak_db_config *, bool);
        struct onak_dynamic_dbctx *privctx;
+       char *type;
+
+       if (dbcfg == NULL) {
+               logthing(LOGTHING_CRITICAL,
+                       "No backend database configuration supplied.");
+               return NULL;
+       }
 
        dbctx = malloc(sizeof(struct onak_dbctx));
 
@@ -220,15 +227,16 @@ struct onak_dbctx *keydb_dynamic_init(bool readonly)
                return NULL;
        }
 
+       dbctx->config = dbcfg;
        dbctx->priv = privctx = malloc(sizeof(struct onak_dynamic_dbctx));
        if (dbctx->priv == NULL) {
                free(dbctx);
                return (NULL);
        }
 
+       type = dbcfg->type;
        if (config.use_keyd) {
-               free(config.db_backend);
-               config.db_backend = strdup("keyd");
+               type = "keyd";
        }
 
        if (!config.db_backend) {
@@ -237,21 +245,21 @@ struct onak_dbctx *keydb_dynamic_init(bool readonly)
        }
 
        if (config.backends_dir == NULL) {
-               soname = malloc(strlen(config.db_backend)
+               soname = malloc(strlen(type)
                        + strlen("./libkeydb_")
                        + strlen(".so")
                        + 1);
 
-               sprintf(soname, "./libkeydb_%s.so", config.db_backend);
+               sprintf(soname, "./libkeydb_%s.so", type);
        } else {
-               soname = malloc(strlen(config.db_backend)
+               soname = malloc(strlen(type)
                        + strlen("/libkeydb_")
                        + strlen(".so")
                        + strlen(config.backends_dir)
                        + 1);
 
                sprintf(soname, "%s/libkeydb_%s.so", config.backends_dir,
-                       config.db_backend);
+                       type);
        }
 
        logthing(LOGTHING_INFO, "Loading dynamic backend: %s", soname);
@@ -270,7 +278,7 @@ struct onak_dbctx *keydb_dynamic_init(bool readonly)
                        + strlen("keydb_")
                        + strlen("_init")
                        + 1);
-       sprintf(initname, "keydb_%s_init", config.db_backend);
+       sprintf(initname, "keydb_%s_init", type);
 
        *(void **) (&backend_init) = dlsym(privctx->backend_handle, initname);
        free(initname);
@@ -286,7 +294,7 @@ struct onak_dbctx *keydb_dynamic_init(bool readonly)
        free(soname);
        soname = NULL;
 
-       privctx->loadeddbctx = backend_init(readonly);
+       privctx->loadeddbctx = backend_init(dbcfg, readonly);
 
        if (privctx->loadeddbctx != NULL) {
                dbctx->cleanupdb = dynamic_cleanupdb;