From 6c8038d198b065da26fe57ddb7407fbbe1278505 Mon Sep 17 00:00:00 2001 From: Paul Wouters Date: Feb 24 2020 18:36:14 +0000 Subject: new sources and patch --- diff --git a/.gitignore b/.gitignore index 44aaf19..94829cd 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ /opendnssec-1.4.7.tar.gz /opendnssec-1.4.9.tar.gz /opendnssec-1.4.14.tar.gz +/opendnssec-2.1.6.tar.gz diff --git a/opendnssec-2.1.6-gcc10-fixups.patch b/opendnssec-2.1.6-gcc10-fixups.patch new file mode 100644 index 0000000..a25e49f --- /dev/null +++ b/opendnssec-2.1.6-gcc10-fixups.patch @@ -0,0 +1,9616 @@ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/daemon/cfg.h opendnssec-2.1.6/enforcer/src/daemon/cfg.h +--- opendnssec-2.1.6-orig/enforcer/src/daemon/cfg.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/daemon/cfg.h 2020-02-18 23:08:38.104360549 -0500 +@@ -88,7 +88,7 @@ + * \return engineconfig_type* engine configuration + * + */ +-engineconfig_type* engine_config(const char* cfgfile, ++extern engineconfig_type* engine_config(const char* cfgfile, + int cmdline_verbosity, engineconfig_type* oldcfg); + + /** +@@ -97,7 +97,7 @@ + * \return ods_status status + * + */ +-ods_status engine_config_check(engineconfig_type* config); ++extern ods_status engine_config_check(engineconfig_type* config); + + /** + * Print engine configuration. +@@ -105,13 +105,13 @@ + * \param[in] config engine configuration + * + */ +-void engine_config_print(FILE* out, engineconfig_type* config); ++extern void engine_config_print(FILE* out, engineconfig_type* config); + + /** + * Clean up config. + * \param[in] config engine configuration + * + */ +-void engine_config_cleanup(engineconfig_type* config); ++extern void engine_config_cleanup(engineconfig_type* config); + + #endif /* DAEMON_CONFIG_H */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/daemon/ctrl_cmd.h opendnssec-2.1.6/enforcer/src/daemon/ctrl_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/daemon/ctrl_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/daemon/ctrl_cmd.h 2020-02-18 23:10:25.428818116 -0500 +@@ -29,6 +29,6 @@ + #ifndef _CTRL_CMD_H_ + #define _CTRL_CMD_H_ + +-struct cmd_func_block ctrl_funcblock; ++extern struct cmd_func_block ctrl_funcblock; + + #endif /* _CTRL_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/daemon/enforcercommands.h opendnssec-2.1.6/enforcer/src/daemon/enforcercommands.h +--- opendnssec-2.1.6-orig/enforcer/src/daemon/enforcercommands.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/daemon/enforcercommands.h 2020-02-18 23:08:38.108360604 -0500 +@@ -37,9 +37,9 @@ + #include "engine.h" + #include "db/db_connection.h" + +-struct cmd_func_block** enforcercommands; ++extern struct cmd_func_block** enforcercommands; + +-engine_type* getglobalcontext(cmdhandler_ctx_type*); +-db_connection_t* getconnectioncontext(cmdhandler_ctx_type*); ++extern engine_type* getglobalcontext(cmdhandler_ctx_type*); ++extern db_connection_t* getconnectioncontext(cmdhandler_ctx_type*); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/daemon/engine.h opendnssec-2.1.6/enforcer/src/daemon/engine.h +--- opendnssec-2.1.6-orig/enforcer/src/daemon/engine.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/daemon/engine.h 2020-02-18 23:08:38.109360617 -0500 +@@ -72,7 +72,7 @@ + * \param engine, the engine containing database configuration + * \return connection on success, NULL on failure. + */ +-db_connection_t* get_database_connection(engine_type* engine); ++extern db_connection_t* get_database_connection(engine_type* engine); + + + /** +@@ -84,16 +84,16 @@ + * for the command to a socket. + */ + +-ods_status engine_setup(void); ++extern ods_status engine_setup(void); + + /** + * Clean up engine. + * \param[in] engine engine + * + */ +-void engine_teardown(engine_type* engine); ++extern void engine_teardown(engine_type* engine); + +-void engine_init(engine_type* engine, int daemonize); ++extern void engine_init(engine_type* engine, int daemonize); + + typedef void (*start_cb_t)(engine_type* engine); + +@@ -106,29 +106,29 @@ + * \return 0 if terminated normally, 1 on unrecoverable error. + * + */ +-int engine_run(engine_type* engine, start_cb_t start, int single_run); ++extern int engine_run(engine_type* engine, start_cb_t start, int single_run); + + /** + * Stop the engine after engine_runloop returns. + * \param[in] engine engine + * + */ +-void engine_stop(engine_type* engine); ++extern void engine_stop(engine_type* engine); + + /** + * Wake up workers. + * \param[in] engine engine + * + */ +-void engine_wakeup_workers(engine_type* engine); ++extern void engine_wakeup_workers(engine_type* engine); + /** signal all workers to stop. Blocks until all workers are joined. + * \param[in] engine engine */ +-void engine_stop_workers(engine_type* engine); ++extern void engine_stop_workers(engine_type* engine); + /** start all workers. + * \param[in] engine engine */ +-void engine_start_workers(engine_type* engine); ++extern void engine_start_workers(engine_type* engine); + +-engine_type* engine_alloc(void); +-void engine_dealloc(engine_type* engine); ++extern engine_type* engine_alloc(void); ++extern void engine_dealloc(engine_type* engine); + + #endif /* DAEMON_ENGINE_H */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/daemon/help_cmd.h opendnssec-2.1.6/enforcer/src/daemon/help_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/daemon/help_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/daemon/help_cmd.h 2020-02-18 23:09:07.505759849 -0500 +@@ -29,6 +29,6 @@ + #ifndef _HELP_CMD_H_ + #define _HELP_CMD_H_ + +-struct cmd_func_block help_funcblock; ++extern struct cmd_func_block help_funcblock; + + #endif /* _HELP_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/daemon/queue_cmd.h opendnssec-2.1.6/enforcer/src/daemon/queue_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/daemon/queue_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/daemon/queue_cmd.h 2020-02-18 23:09:48.166312056 -0500 +@@ -29,7 +29,7 @@ + #ifndef _QUEUE_CMD_H_ + #define _QUEUE_CMD_H_ + +-struct cmd_func_block queue_funcblock; +-struct cmd_func_block flush_funcblock; ++extern struct cmd_func_block queue_funcblock; ++extern struct cmd_func_block flush_funcblock; + + #endif /* _QUEUE_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/daemon/time_leap_cmd.h opendnssec-2.1.6/enforcer/src/daemon/time_leap_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/daemon/time_leap_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/daemon/time_leap_cmd.h 2020-02-18 23:09:31.203081678 -0500 +@@ -29,6 +29,6 @@ + #ifndef _TIME_LEAP_CMD_H_ + #define _TIME_LEAP_CMD_H_ + +-struct cmd_func_block time_leap_funcblock; ++extern struct cmd_func_block time_leap_funcblock; + + #endif /* _TIME_LEAP_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/daemon/verbosity_cmd.h opendnssec-2.1.6/enforcer/src/daemon/verbosity_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/daemon/verbosity_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/daemon/verbosity_cmd.h 2020-02-18 23:10:04.748537259 -0500 +@@ -29,6 +29,6 @@ + #ifndef _VERBOSITY_CMD_H_ + #define _VERBOSITY_CMD_H_ + +-struct cmd_func_block verbosity_funcblock; ++extern struct cmd_func_block verbosity_funcblock; + + #endif /* _VERBOSITY_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/database_version_ext.h opendnssec-2.1.6/enforcer/src/db/database_version_ext.h +--- opendnssec-2.1.6-orig/enforcer/src/db/database_version_ext.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/database_version_ext.h 2020-02-18 23:08:38.109360617 -0500 +@@ -37,6 +37,6 @@ + * \param[in] a db_connection_t pointer. + * \return an integer with the database version or zero on error. + */ +-int database_version_get_version(db_connection_t* connection); ++extern int database_version_get_version(db_connection_t* connection); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/database_version.h opendnssec-2.1.6/enforcer/src/db/database_version.h +--- opendnssec-2.1.6-orig/enforcer/src/db/database_version.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/database_version.h 2020-02-18 23:08:38.109360617 -0500 +@@ -54,13 +54,13 @@ + * \param[in] connection a db_connection_t pointer. + * \return a database_version_t pointer or NULL on error. + */ +-database_version_t* database_version_new(const db_connection_t* connection); ++extern database_version_t* database_version_new(const db_connection_t* connection); + + /** + * Delete a database version object, this does not delete it from the database. + * \param[in] database_version a database_version_t pointer. + */ +-void database_version_free(database_version_t* database_version); ++extern void database_version_free(database_version_t* database_version); + + /** + * Set the content of a database version object based on a database result. +@@ -68,14 +68,14 @@ + * \param[in] result a db_result_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int database_version_from_result(database_version_t* database_version, const db_result_t* result); ++extern int database_version_from_result(database_version_t* database_version, const db_result_t* result); + + /** + * Get the version of a database version object. Undefined behavior if `database_version` is NULL. + * \param[in] database_version a database_version_t pointer. + * \return an unsigned integer. + */ +-unsigned int database_version_version(const database_version_t* database_version); ++extern unsigned int database_version_version(const database_version_t* database_version); + + /** + * A list of database version objects. +@@ -98,27 +98,27 @@ + * \param[in] connection a db_connection_t pointer. + * \return a database_version_list_t pointer or NULL on error. + */ +-database_version_list_t* database_version_list_new(const db_connection_t* connection); ++extern database_version_list_t* database_version_list_new(const db_connection_t* connection); + + /** + * Delete a database version object list. + * \param[in] database_version_list a database_version_list_t pointer. + */ +-void database_version_list_free(database_version_list_t* database_version_list); ++extern void database_version_list_free(database_version_list_t* database_version_list); + + /** + * Get all database version objects. + * \param[in] database_version_list a database_version_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int database_version_list_get(database_version_list_t* database_version_list); ++extern int database_version_list_get(database_version_list_t* database_version_list); + + /** + * Get a new list with all database version objects. + * \param[in] connection a db_connection_t pointer. + * \return a database_version_list_t pointer or NULL on error. + */ +-database_version_list_t* database_version_list_new_get(const db_connection_t* connection); ++extern database_version_list_t* database_version_list_new_get(const db_connection_t* connection); + + /** + * Get the next database version object in a database version object list. +@@ -128,6 +128,6 @@ + * \return a database_version_t pointer or NULL on error or if there are no more + * database version objects in the database version object list. + */ +-const database_version_t* database_version_list_next(database_version_list_t* database_version_list); ++extern const database_version_t* database_version_list_next(database_version_list_t* database_version_list); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/db_backend.h opendnssec-2.1.6/enforcer/src/db/db_backend.h +--- opendnssec-2.1.6-orig/enforcer/src/db/db_backend.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/db_backend.h 2020-02-18 23:08:38.109360617 -0500 +@@ -187,21 +187,21 @@ + * Create a new database backend handle. + * \return a db_backend_handle_t pointer or NULL on error. + */ +-db_backend_handle_t* db_backend_handle_new(void); ++extern db_backend_handle_t* db_backend_handle_new(void); + + /** + * Delete a database backend handle, disconnecting the backend and freeing the + * backend specific data. + * \param[in] backend_handle a db_backend_handle_t pointer. + */ +-void db_backend_handle_free(db_backend_handle_t* backend_handle); ++extern void db_backend_handle_free(db_backend_handle_t* backend_handle); + + /** + * Initiate the backend of a database backend. + * \param[in] backend_handle a db_backend_handle_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_initialize(const db_backend_handle_t* backend_handle); ++extern int db_backend_handle_initialize(const db_backend_handle_t* backend_handle); + + /** + * Connect to the database of a database backend, the connection specific +@@ -210,7 +210,7 @@ + * \param[in] configuration_list a db_configuration_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_connect(const db_backend_handle_t* backend_handle, const db_configuration_list_t* configuration_list); ++extern int db_backend_handle_connect(const db_backend_handle_t* backend_handle, const db_configuration_list_t* configuration_list); + + /** + * Create an object in the database. The `object` refer to the database object +@@ -222,7 +222,7 @@ + * \param[in] value_set a db_value_set_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_create(const db_backend_handle_t* backend_handle, const db_object_t* object, const db_object_field_list_t* object_field_list, const db_value_set_t* value_set); ++extern int db_backend_handle_create(const db_backend_handle_t* backend_handle, const db_object_t* object, const db_object_field_list_t* object_field_list, const db_value_set_t* value_set); + + /** + * Read an object or objects from the database. +@@ -233,7 +233,7 @@ + * \return a db_result_list_t pointer or NULL on error or if no objects where + * read. + */ +-db_result_list_t* db_backend_handle_read(const db_backend_handle_t* backend_handle, const db_object_t* object, const db_join_list_t* join_list, const db_clause_list_t* clause_list); ++extern db_result_list_t* db_backend_handle_read(const db_backend_handle_t* backend_handle, const db_object_t* object, const db_join_list_t* join_list, const db_clause_list_t* clause_list); + + /** + * Update an object or objects in the database. +@@ -244,7 +244,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_update(const db_backend_handle_t* backend_handle, const db_object_t* object, const db_object_field_list_t* object_field_list, const db_value_set_t* value_set, const db_clause_list_t* clause_list); ++extern int db_backend_handle_update(const db_backend_handle_t* backend_handle, const db_object_t* object, const db_object_field_list_t* object_field_list, const db_value_set_t* value_set, const db_clause_list_t* clause_list); + + /** + * Delete an object or objects from the database. +@@ -253,7 +253,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_delete(const db_backend_handle_t* backend_handle, const db_object_t* object, const db_clause_list_t* clause_list); ++extern int db_backend_handle_delete(const db_backend_handle_t* backend_handle, const db_object_t* object, const db_clause_list_t* clause_list); + + /** + * Count objects from the database. Return the count in `count`. +@@ -264,7 +264,7 @@ + * \param[out] count a size_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_count(const db_backend_handle_t* backend_handle, const db_object_t* object, const db_join_list_t* join_list, const db_clause_list_t* clause_list, size_t* count); ++extern int db_backend_handle_count(const db_backend_handle_t* backend_handle, const db_object_t* object, const db_join_list_t* join_list, const db_clause_list_t* clause_list, size_t* count); + + /** + * Set the initialize function of a database backend handle. +@@ -272,7 +272,7 @@ + * \param[in] initialize_function a db_backend_handle_initialize_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_set_initialize(db_backend_handle_t* backend_handle, db_backend_handle_initialize_t initialize_function); ++extern int db_backend_handle_set_initialize(db_backend_handle_t* backend_handle, db_backend_handle_initialize_t initialize_function); + + /** + * Set the shutdown function of a database backend handle. +@@ -280,7 +280,7 @@ + * \param[in] shutdown_function a db_backend_handle_shutdown_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_set_shutdown(db_backend_handle_t* backend_handle, db_backend_handle_shutdown_t shutdown_function); ++extern int db_backend_handle_set_shutdown(db_backend_handle_t* backend_handle, db_backend_handle_shutdown_t shutdown_function); + + /** + * Set the connect function of a database backend handle. +@@ -288,7 +288,7 @@ + * \param[in] connect_function a db_backend_handle_connect_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_set_connect(db_backend_handle_t* backend_handle, db_backend_handle_connect_t connect_function); ++extern int db_backend_handle_set_connect(db_backend_handle_t* backend_handle, db_backend_handle_connect_t connect_function); + + /** + * Set the disconnect function of a database backend handle. +@@ -296,7 +296,7 @@ + * \param[in] disconnect_function a db_backend_handle_disconnect_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_set_disconnect(db_backend_handle_t* backend_handle, db_backend_handle_disconnect_t disconnect_function); ++extern int db_backend_handle_set_disconnect(db_backend_handle_t* backend_handle, db_backend_handle_disconnect_t disconnect_function); + + /** + * Set the create function of a database backend handle. +@@ -304,7 +304,7 @@ + * \param[in] create_function a db_backend_handle_create_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_set_create(db_backend_handle_t* backend_handle, db_backend_handle_create_t create_function); ++extern int db_backend_handle_set_create(db_backend_handle_t* backend_handle, db_backend_handle_create_t create_function); + + /** + * Set the read function of a database backend handle. +@@ -312,7 +312,7 @@ + * \param[in] read_function a db_backend_handle_read_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_set_read(db_backend_handle_t* backend_handle, db_backend_handle_read_t read_function); ++extern int db_backend_handle_set_read(db_backend_handle_t* backend_handle, db_backend_handle_read_t read_function); + + /** + * Set the update function of a database backend handle. +@@ -320,7 +320,7 @@ + * \param[in] update_function a db_backend_handle_update_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_set_update(db_backend_handle_t* backend_handle, db_backend_handle_update_t update_function); ++extern int db_backend_handle_set_update(db_backend_handle_t* backend_handle, db_backend_handle_update_t update_function); + + /** + * Set the delete function of a database backend handle. +@@ -328,7 +328,7 @@ + * \param[in] delete_function a db_backend_handle_delete_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_set_delete(db_backend_handle_t* backend_handle, db_backend_handle_delete_t delete_function); ++extern int db_backend_handle_set_delete(db_backend_handle_t* backend_handle, db_backend_handle_delete_t delete_function); + + /** + * Set the count function of a database backend handle. +@@ -336,7 +336,7 @@ + * \param[in] count_function a db_backend_handle_count_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_set_count(db_backend_handle_t* backend_handle, db_backend_handle_count_t count_function); ++extern int db_backend_handle_set_count(db_backend_handle_t* backend_handle, db_backend_handle_count_t count_function); + + /** + * Set the free function of a database backend handle. +@@ -344,7 +344,7 @@ + * \param[in] free_function a db_backend_handle_free_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_set_free(db_backend_handle_t* backend_handle, db_backend_handle_free_t free_function); ++extern int db_backend_handle_set_free(db_backend_handle_t* backend_handle, db_backend_handle_free_t free_function); + + /** + * Set the transaction begin function of a database backend handle. +@@ -352,7 +352,7 @@ + * \param[in] transaction_begin_function a db_backend_handle_transaction_begin_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_set_transaction_begin(db_backend_handle_t* backend_handle, db_backend_handle_transaction_begin_t transaction_begin_function); ++extern int db_backend_handle_set_transaction_begin(db_backend_handle_t* backend_handle, db_backend_handle_transaction_begin_t transaction_begin_function); + + /** + * Set the transaction commit function of a database backend handle. +@@ -360,7 +360,7 @@ + * \param[in] transaction_commit_function a db_backend_handle_transaction_commit_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_set_transaction_commit(db_backend_handle_t* backend_handle, db_backend_handle_transaction_commit_t transaction_commit_function); ++extern int db_backend_handle_set_transaction_commit(db_backend_handle_t* backend_handle, db_backend_handle_transaction_commit_t transaction_commit_function); + + /** + * Set the transaction rollback function of a database backend handle. +@@ -368,7 +368,7 @@ + * \param[in] transaction_rollback_function a db_backend_handle_transaction_rollback_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_set_transaction_rollback(db_backend_handle_t* backend_handle, db_backend_handle_transaction_rollback_t transaction_rollback_function); ++extern int db_backend_handle_set_transaction_rollback(db_backend_handle_t* backend_handle, db_backend_handle_transaction_rollback_t transaction_rollback_function); + + /** + * Set the backend specific data of a database backend handle. +@@ -376,7 +376,7 @@ + * \param[in] data a void pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_handle_set_data(db_backend_handle_t* backend_handle, void* data); ++extern int db_backend_handle_set_data(db_backend_handle_t* backend_handle, void* data); + + /** + * A database backend. +@@ -391,13 +391,13 @@ + * Create a new database backend. + * \return a db_backend_t pointer or NULL on error. + */ +-db_backend_t* db_backend_new(void); ++extern db_backend_t* db_backend_new(void); + + /** + * Delete a database backend. + * \param[in] backend a db_backend_t pointer. + */ +-void db_backend_free(db_backend_t* backend); ++extern void db_backend_free(db_backend_t* backend); + + /** + * Get the database backend handle of a database backend. +@@ -405,7 +405,7 @@ + * \return a db_backend_handle_t pointer or NULL on error or if no database + * backend handle has been set. + */ +-const db_backend_handle_t* db_backend_handle(const db_backend_t* backend); ++extern const db_backend_handle_t* db_backend_handle(const db_backend_t* backend); + + /** + * Set the name of a database backend. +@@ -413,7 +413,7 @@ + * \param[in] name a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_set_name(db_backend_t* backend, const char* name); ++extern int db_backend_set_name(db_backend_t* backend, const char* name); + + /** + * Det the database backend handle of a database backend, this takes over the +@@ -422,14 +422,14 @@ + * \param[in] handle a db_backend_handle_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_set_handle(db_backend_t* backend, db_backend_handle_t* handle); ++extern int db_backend_set_handle(db_backend_t* backend, db_backend_handle_t* handle); + + /** + * Initiate the backend of a database backend. + * \param[in] backend a db_backend_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_initialize(const db_backend_t* backend); ++extern int db_backend_initialize(const db_backend_t* backend); + + /** + * Connect to the database of a database backend, the connection specific +@@ -438,7 +438,7 @@ + * \param[in] configuration_list a db_configuration_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_connect(const db_backend_t* backend, const db_configuration_list_t* configuration_list); ++extern int db_backend_connect(const db_backend_t* backend, const db_configuration_list_t* configuration_list); + + /** + * Create an object in the database. The `object` refer to the database object +@@ -450,7 +450,7 @@ + * \param[in] value_set a db_value_set_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_create(const db_backend_t* backend, const db_object_t* object, const db_object_field_list_t* object_field_list, const db_value_set_t* value_set); ++extern int db_backend_create(const db_backend_t* backend, const db_object_t* object, const db_object_field_list_t* object_field_list, const db_value_set_t* value_set); + + /** + * Read an object or objects from the database. +@@ -461,7 +461,7 @@ + * \return a db_result_list_t pointer or NULL on error or if no objects where + * read. + */ +-db_result_list_t* db_backend_read(const db_backend_t* backend, const db_object_t* object, const db_join_list_t* join_list, const db_clause_list_t* clause_list); ++extern db_result_list_t* db_backend_read(const db_backend_t* backend, const db_object_t* object, const db_join_list_t* join_list, const db_clause_list_t* clause_list); + + /** + * Update an object or objects in the database. +@@ -472,7 +472,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_update(const db_backend_t* backend, const db_object_t* object, const db_object_field_list_t* object_field_list, const db_value_set_t* value_set, const db_clause_list_t* clause_list); ++extern int db_backend_update(const db_backend_t* backend, const db_object_t* object, const db_object_field_list_t* object_field_list, const db_value_set_t* value_set, const db_clause_list_t* clause_list); + + /** + * Delete an object or objects from the database. +@@ -481,7 +481,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_delete(const db_backend_t* backend, const db_object_t* object, const db_clause_list_t* clause_list); ++extern int db_backend_delete(const db_backend_t* backend, const db_object_t* object, const db_clause_list_t* clause_list); + + /** + * Count objects from the database. Return the count in `count`. +@@ -492,7 +492,7 @@ + * \param[out] count a size_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_backend_count(const db_backend_t* backend, const db_object_t* object, const db_join_list_t* join_list, const db_clause_list_t* clause_list, size_t* count); ++extern int db_backend_count(const db_backend_t* backend, const db_object_t* object, const db_join_list_t* join_list, const db_clause_list_t* clause_list, size_t* count); + + /** + * Get a new database backend by the name supplied in `name`. +@@ -500,6 +500,6 @@ + * \return a db_backend_t pointer or NULL on error or if the database backend + * does not exist. + */ +-db_backend_t* db_backend_factory_get_backend(const char* name); ++extern db_backend_t* db_backend_factory_get_backend(const char* name); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/db_backend_mysql.h opendnssec-2.1.6/enforcer/src/db/db_backend_mysql.h +--- opendnssec-2.1.6-orig/enforcer/src/db/db_backend_mysql.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/db_backend_mysql.h 2020-02-18 23:08:38.109360617 -0500 +@@ -40,6 +40,6 @@ + * Create a new database backend handle for SQLite. + * \return a db_backend_handle_t pointer or NULL on error. + */ +-db_backend_handle_t* db_backend_mysql_new_handle(void); ++extern db_backend_handle_t* db_backend_mysql_new_handle(void); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/db_backend_sqlite.h opendnssec-2.1.6/enforcer/src/db/db_backend_sqlite.h +--- opendnssec-2.1.6-orig/enforcer/src/db/db_backend_sqlite.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/db_backend_sqlite.h 2020-02-18 23:08:38.109360617 -0500 +@@ -39,6 +39,6 @@ + * Create a new database backend handle for SQLite. + * \return a db_backend_handle_t pointer or NULL on error. + */ +-db_backend_handle_t* db_backend_sqlite_new_handle(void); ++extern db_backend_handle_t* db_backend_sqlite_new_handle(void); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/db_clause.h opendnssec-2.1.6/enforcer/src/db/db_clause.h +--- opendnssec-2.1.6-orig/enforcer/src/db/db_clause.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/db_clause.h 2020-02-18 23:08:38.110360631 -0500 +@@ -129,41 +129,41 @@ + * Create a new database clause. + * \return a db_clause_t pointer or NULL on error. + */ +-db_clause_t* db_clause_new(void); ++extern db_clause_t* db_clause_new(void); + + /** + * Delete a database clause. + * \param[in] clause a db_clause_t pointer. + */ +-void db_clause_free(db_clause_t* clause); ++extern void db_clause_free(db_clause_t* clause); + + /** + * Get the field name of a database clause. + * \param[in] a db_clause_t pointer. + * \return a character pointer or NULL on error or if no field name has been set. + */ +-const char* db_clause_field(const db_clause_t* clause); ++extern const char* db_clause_field(const db_clause_t* clause); + + /** + * Get the database clause type of a database clause. + * \param[in] a db_clause_t pointer. + * \return a db_clause_type_t. + */ +-db_clause_type_t db_clause_type(const db_clause_t* clause); ++extern db_clause_type_t db_clause_type(const db_clause_t* clause); + + /** + * Get the database value of a database value. + * \param[in] a db_clause_t pointer. + * \return a db_value_t pointer or NULL on error. + */ +-const db_value_t* db_clause_value(const db_clause_t* clause); ++extern const db_value_t* db_clause_value(const db_clause_t* clause); + + /** + * Get the database clause operator of a database clause. + * \param[in] a db_clause_t pointer. + * \return a db_clause_operator_t. + */ +-db_clause_operator_t db_clause_operator(const db_clause_t* clause); ++extern db_clause_operator_t db_clause_operator(const db_clause_t* clause); + + /** + * Get the database clause list of a database clause, this is used for nested +@@ -172,7 +172,7 @@ + * \return a db_clause_list_t pointer or NULL on error or if no database clause + * list has been set. + */ +-const db_clause_list_t* db_clause_list(const db_clause_t* clause); ++extern const db_clause_list_t* db_clause_list(const db_clause_t* clause); + + /** + * Set the field name of a database clause. +@@ -180,7 +180,7 @@ + * \param[in] field a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_clause_set_field(db_clause_t* clause, const char* field); ++extern int db_clause_set_field(db_clause_t* clause, const char* field); + + /** + * Set the database clause type of a database clause. +@@ -188,7 +188,7 @@ + * \param[in] type a db_clause_type_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_clause_set_type(db_clause_t* clause, db_clause_type_t type); ++extern int db_clause_set_type(db_clause_t* clause, db_clause_type_t type); + + /** + * Set the database clause operator of a database clause. +@@ -196,14 +196,14 @@ + * \param[in] clause_operator a db_clause_operator_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_clause_set_operator(db_clause_t* clause, db_clause_operator_t clause_operator); ++extern int db_clause_set_operator(db_clause_t* clause, db_clause_operator_t clause_operator); + + /** + * Check if the database clause is not empty. + * \param[in] a db_clause_t pointer. + * \return DB_ERROR_* if empty, otherwise DB_OK. + */ +-int db_clause_not_empty(const db_clause_t* clause); ++extern int db_clause_not_empty(const db_clause_t* clause); + + /** + * Return the next database clause connected in a database clause list. +@@ -211,14 +211,14 @@ + * \return a db_clause_t pointer or NULL on error or if there are no more + * database clauses in the list. + */ +-const db_clause_t* db_clause_next(const db_clause_t* clause); ++extern const db_clause_t* db_clause_next(const db_clause_t* clause); + + /** + * Get the writable database value of a database clause. + * \param[in] a db_clause_t pointer. + * \return a db_value_t pointer or NULL on error. + */ +-db_value_t* db_clause_get_value(db_clause_t* clause); ++extern db_value_t* db_clause_get_value(db_clause_t* clause); + + /** + * A list of database clauses. +@@ -232,13 +232,13 @@ + * Create a new database clause list. + * \return a db_clause_list_t pointer or NULL on error. + */ +-db_clause_list_t* db_clause_list_new(void); ++extern db_clause_list_t* db_clause_list_new(void); + + /** + * Delete a database clause list and all database clauses in the list. + * \param[in] clause_list a db_clause_list_t pointer. + */ +-void db_clause_list_free(db_clause_list_t* clause_list); ++extern void db_clause_list_free(db_clause_list_t* clause_list); + + /** + * Add a database clause to a database clause list, this takes over the +@@ -247,13 +247,13 @@ + * \param[in] a db_clause_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_clause_list_add(db_clause_list_t* clause_list, db_clause_t* clause); ++extern int db_clause_list_add(db_clause_list_t* clause_list, db_clause_t* clause); + + /** + * Return the first database clause of a database clause list. + * \param[in] clause_list a db_clause_list_t pointer. + * \return a db_clause_t pointer or NULL on error or if the list is empty. + */ +-const db_clause_t* db_clause_list_begin(const db_clause_list_t* clause_list); ++extern const db_clause_t* db_clause_list_begin(const db_clause_list_t* clause_list); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/db_configuration.h opendnssec-2.1.6/enforcer/src/db/db_configuration.h +--- opendnssec-2.1.6-orig/enforcer/src/db/db_configuration.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/db_configuration.h 2020-02-18 23:08:38.110360631 -0500 +@@ -48,13 +48,13 @@ + * Create a new database configuration. + * \return a db_configuration_t pointer or NULL on error. + */ +-db_configuration_t* db_configuration_new(void); ++extern db_configuration_t* db_configuration_new(void); + + /** + * Delete a database configuration. + * \param[in] configuration a db_configuration_t pointer. + */ +-void db_configuration_free(db_configuration_t* configuration); ++extern void db_configuration_free(db_configuration_t* configuration); + + /** + * Get the value of a database configuration. +@@ -62,7 +62,7 @@ + * \return a character pointer or NULL on error or if no database configuration + * value has been set. + */ +-const char* db_configuration_value(const db_configuration_t* configuration); ++extern const char* db_configuration_value(const db_configuration_t* configuration); + + /** + * Set the name of a database configuration. +@@ -70,7 +70,7 @@ + * \param[in] name a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_configuration_set_name(db_configuration_t* configuration, const char* name); ++extern int db_configuration_set_name(db_configuration_t* configuration, const char* name); + + /** + * Set the value of a database configuration. +@@ -78,14 +78,14 @@ + * \param[in] value a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_configuration_set_value(db_configuration_t* configuration, const char* value); ++extern int db_configuration_set_value(db_configuration_t* configuration, const char* value); + + /** + * Check if the database configuration is not empty. + * \param[in] configuration a db_configuration_t pointer. + * \return DB_ERROR_* if empty, otherwise DB_OK. + */ +-int db_configuration_not_empty(const db_configuration_t* configuration); ++extern int db_configuration_not_empty(const db_configuration_t* configuration); + + /** + * A list of database configurations. +@@ -99,14 +99,14 @@ + * Create a new database configuration list. + * \return a db_configuration_list_t pointer or NULL on error. + */ +-db_configuration_list_t* db_configuration_list_new(void); ++extern db_configuration_list_t* db_configuration_list_new(void); + + /** + * Delete a database configuration list and all database configurations in the + * list. + * \param[in] configuration_list a db_configuration_list_t pointer. + */ +-void db_configuration_list_free(db_configuration_list_t* configuration_list); ++extern void db_configuration_list_free(db_configuration_list_t* configuration_list); + + /** + * free global allocator. +@@ -119,7 +119,7 @@ + * \param[in] configuration a db_configuration_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_configuration_list_add(db_configuration_list_t* configuration_list, db_configuration_t* configuration); ++extern int db_configuration_list_add(db_configuration_list_t* configuration_list, db_configuration_t* configuration); + + /** + * Find a database configuration by name within a database configuration list. +@@ -128,6 +128,6 @@ + * \return a db_configuration_t pointer or NULL on error or if the database + * configuration does not exist. + */ +-const db_configuration_t* db_configuration_list_find(const db_configuration_list_t* configuration_list, const char* name); ++extern const db_configuration_t* db_configuration_list_find(const db_configuration_list_t* configuration_list, const char* name); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/db_connection.h opendnssec-2.1.6/enforcer/src/db/db_connection.h +--- opendnssec-2.1.6-orig/enforcer/src/db/db_connection.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/db_connection.h 2020-02-18 23:08:38.110360631 -0500 +@@ -52,13 +52,13 @@ + * Create a new database connection. + * \return a db_connection_t pointer or NULL on error. + */ +-db_connection_t* db_connection_new(void); ++extern db_connection_t* db_connection_new(void); + + /** + * Delete a database connection and the database backend within. + * \param[in] connection a db_connection_t pointer. + */ +-void db_connection_free(db_connection_t* connection); ++extern void db_connection_free(db_connection_t* connection); + + /** + * Set the database configuration list for a database connection. +@@ -66,7 +66,7 @@ + * \param[in] configuration_list a db_configuration_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_connection_set_configuration_list(db_connection_t* connection, const db_configuration_list_t* configuration_list); ++extern int db_connection_set_configuration_list(db_connection_t* connection, const db_configuration_list_t* configuration_list); + + /** + * Setup the database connection, this verifies the information in the database +@@ -74,14 +74,14 @@ + * \param[in] connection a db_connection_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_connection_setup(db_connection_t* connection); ++extern int db_connection_setup(db_connection_t* connection); + + /** + * Connect to the database. + * \param[in] connection a db_connection_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_connection_connect(const db_connection_t* connection); ++extern int db_connection_connect(const db_connection_t* connection); + + /** + * Create an object in the database. The `object` refer to the database object +@@ -93,7 +93,7 @@ + * \param[in] value_set a db_value_set_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_connection_create(const db_connection_t* connection, const db_object_t* object, const db_object_field_list_t* object_field_list, const db_value_set_t* value_set); ++extern int db_connection_create(const db_connection_t* connection, const db_object_t* object, const db_object_field_list_t* object_field_list, const db_value_set_t* value_set); + + /** + * Read an object or objects from the database. +@@ -104,7 +104,7 @@ + * \return a db_result_list_t pointer or NULL on error or if no objects where + * read. + */ +-db_result_list_t* db_connection_read(const db_connection_t* connection, const db_object_t* object, const db_join_list_t* join_list, const db_clause_list_t* clause_list); ++extern db_result_list_t* db_connection_read(const db_connection_t* connection, const db_object_t* object, const db_join_list_t* join_list, const db_clause_list_t* clause_list); + + /** + * Update an object or objects in the database. +@@ -115,7 +115,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_connection_update(const db_connection_t* connection, const db_object_t* object, const db_object_field_list_t* object_field_list, const db_value_set_t* value_set, const db_clause_list_t* clause_list); ++extern int db_connection_update(const db_connection_t* connection, const db_object_t* object, const db_object_field_list_t* object_field_list, const db_value_set_t* value_set, const db_clause_list_t* clause_list); + + /** + * Delete an object or objects from the database. +@@ -124,7 +124,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_connection_delete(const db_connection_t* connection, const db_object_t* object, const db_clause_list_t* clause_list); ++extern int db_connection_delete(const db_connection_t* connection, const db_object_t* object, const db_clause_list_t* clause_list); + + /** + * Count objects from the database. Return the count in `count`. +@@ -135,6 +135,6 @@ + * \param[out] count a size_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_connection_count(const db_connection_t* connection, const db_object_t* object, const db_join_list_t* join_list, const db_clause_list_t* clause_list, size_t* count); ++extern int db_connection_count(const db_connection_t* connection, const db_object_t* object, const db_join_list_t* join_list, const db_clause_list_t* clause_list, size_t* count); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/db_join.h opendnssec-2.1.6/enforcer/src/db/db_join.h +--- opendnssec-2.1.6-orig/enforcer/src/db/db_join.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/db_join.h 2020-02-18 23:08:38.110360631 -0500 +@@ -54,7 +54,7 @@ + * \return a character pointer or NULL on error or if no from table name has + * been set. + */ +-const char* db_join_from_table(const db_join_t* join); ++extern const char* db_join_from_table(const db_join_t* join); + + /** + * Get the from field name of a database join. +@@ -62,7 +62,7 @@ + * \return a character pointer or NULL on error or if no from field name has + * been set. + */ +-const char* db_join_from_field(const db_join_t* join); ++extern const char* db_join_from_field(const db_join_t* join); + + /** + * Get the to table name of a database join. +@@ -70,7 +70,7 @@ + * \return a character pointer or NULL on error or if no to table name has been + * set. + */ +-const char* db_join_to_table(const db_join_t* join); ++extern const char* db_join_to_table(const db_join_t* join); + + /** + * Get the to field name of a database join. +@@ -78,7 +78,7 @@ + * \return a character pointer or NULL on error or if no to field name has been + * set. + */ +-const char* db_join_to_field(const db_join_t* join); ++extern const char* db_join_to_field(const db_join_t* join); + + /** + * Get the next database join connected in a database join list. +@@ -86,7 +86,7 @@ + * \return a db_join_t pointer or NULL on error or if there are no more database + * joins in the list. + */ +-const db_join_t* db_join_next(const db_join_t* join); ++extern const db_join_t* db_join_next(const db_join_t* join); + + /** + * A list of database joins. +@@ -101,6 +101,6 @@ + * \param[in] join_list a db_join_list_t pointer. + * \return a db_join_t pointer or NULL on error or if the list is empty. + */ +-const db_join_t* db_join_list_begin(const db_join_list_t* join_list); ++extern const db_join_t* db_join_list_begin(const db_join_list_t* join_list); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/db_object.h opendnssec-2.1.6/enforcer/src/db/db_object.h +--- opendnssec-2.1.6-orig/enforcer/src/db/db_object.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/db_object.h 2020-02-18 23:08:38.110360631 -0500 +@@ -60,20 +60,20 @@ + * Create a database object field. + * \return a db_object_field_t pointer or NULL on error. + */ +-db_object_field_t* db_object_field_new(void); ++extern db_object_field_t* db_object_field_new(void); + + /** + * Create a database object field that is a copy of another. + * \param[in] from_object_field a db_object_field_t pointer. + * \return a db_object_field_t pointer or NULL on error. + */ +-db_object_field_t* db_object_field_new_copy(const db_object_field_t* from_object_field); ++extern db_object_field_t* db_object_field_new_copy(const db_object_field_t* from_object_field); + + /** + * Delete a database object field. + * \param[in] object_field a db_object_field_t pointer. + */ +-void db_object_field_free(db_object_field_t* object_field); ++extern void db_object_field_free(db_object_field_t* object_field); + + /** + * Copy the content of a database object field. +@@ -81,21 +81,21 @@ + * \param[in] from_object_field a db_object_field_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_object_field_copy(db_object_field_t* object_field, const db_object_field_t* from_object_field); ++extern int db_object_field_copy(db_object_field_t* object_field, const db_object_field_t* from_object_field); + + /** + * Get the name of a database object field. + * \param[in] object_field a db_object_field_t pointer. + * \return a character pointer or NULL on error or if no field name has been set. + */ +-const char* db_object_field_name(const db_object_field_t* object_field); ++extern const char* db_object_field_name(const db_object_field_t* object_field); + + /** + * Get the type of a database object field. + * \param[in] object_field a db_object_field_t pointer. + * \return a db_type_t. + */ +-db_type_t db_object_field_type(const db_object_field_t* object_field); ++extern db_type_t db_object_field_type(const db_object_field_t* object_field); + + /** + * Set the name of a database object field. +@@ -103,7 +103,7 @@ + * \param[in] name a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_object_field_set_name(db_object_field_t* object_field, const char* name); ++extern int db_object_field_set_name(db_object_field_t* object_field, const char* name); + + /** + * Set the type of a database object field. +@@ -111,7 +111,7 @@ + * \param[in] type a db_type_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_object_field_set_type(db_object_field_t* object_field, db_type_t type); ++extern int db_object_field_set_type(db_object_field_t* object_field, db_type_t type); + + /** + * Set the enumerate set of a database object field. +@@ -119,14 +119,14 @@ + * \param[in] enum_set a NULL terminated db_enum_t list. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_object_field_set_enum_set(db_object_field_t* object_field, const db_enum_t* enum_set); ++extern int db_object_field_set_enum_set(db_object_field_t* object_field, const db_enum_t* enum_set); + + /** + * Check if the object field is not empty. + * \param[in] object_field a db_object_field_t pointer. + * \return DB_ERROR_* if empty, otherwise DB_OK. + */ +-int db_object_field_not_empty(const db_object_field_t* object_field); ++extern int db_object_field_not_empty(const db_object_field_t* object_field); + + /** + * Get the next object field connected in a database object field list. +@@ -134,7 +134,7 @@ + * \return a db_object_field_t pointer or NULL on error or if there are no more + * object fields in the list. + */ +-const db_object_field_t* db_object_field_next(const db_object_field_t* object_field); ++extern const db_object_field_t* db_object_field_next(const db_object_field_t* object_field); + + /** + * A list of object fields. +@@ -149,20 +149,20 @@ + * Create a new object field list. + * \return a db_object_field_list_t pointer or NULL on error. + */ +-db_object_field_list_t* db_object_field_list_new(void); ++extern db_object_field_list_t* db_object_field_list_new(void); + + /** + * Create a new object field list that is a copy of another. + * \param[in] from_object_field_list a db_object_field_list_t pointer. + * \return a db_object_field_list_t pointer or NULL on error. + */ +-db_object_field_list_t* db_object_field_list_new_copy(const db_object_field_list_t* from_object_field_list); ++extern db_object_field_list_t* db_object_field_list_new_copy(const db_object_field_list_t* from_object_field_list); + + /** + * Delete a object field list and all object fields within the list. + * \param[in] object_field_list a db_object_field_list_t pointer. + */ +-void db_object_field_list_free(db_object_field_list_t* object_field_list); ++extern void db_object_field_list_free(db_object_field_list_t* object_field_list); + + /** + * Copy the content of a database object field list. +@@ -170,7 +170,7 @@ + * \param[in] from_object_field_list a db_object_field_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_object_field_list_copy(db_object_field_list_t* object_field_list, const db_object_field_list_t* from_object_field_list); ++extern int db_object_field_list_copy(db_object_field_list_t* object_field_list, const db_object_field_list_t* from_object_field_list); + + /** + * Add a database object field to a database object field list, this will takes +@@ -179,21 +179,21 @@ + * \param[in] object_field a db_object_field_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_object_field_list_add(db_object_field_list_t* object_field_list, db_object_field_t* object_field); ++extern int db_object_field_list_add(db_object_field_list_t* object_field_list, db_object_field_t* object_field); + + /** + * Return the first database object field in a database object field list. + * \param[in] object_field_list a db_object_field_list_t pointer. + * \return a db_object_field_t pointer or NULL on error or if the list is empty. + */ +-const db_object_field_t* db_object_field_list_begin(const db_object_field_list_t* object_field_list); ++extern const db_object_field_t* db_object_field_list_begin(const db_object_field_list_t* object_field_list); + + /** + * Return the size of a object field list. + * \param[in] object_field_list a db_object_field_list_t pointer. + * \return a size_t, may be zero on error. + */ +-size_t db_object_field_list_size(const db_object_field_list_t* object_field_list); ++extern size_t db_object_field_list_size(const db_object_field_list_t* object_field_list); + + /** + * A database object. +@@ -209,14 +209,14 @@ + * Create a new database object. + * \return a db_object_t pointer or NULL on error. + */ +-db_object_t* db_object_new(void); ++extern db_object_t* db_object_new(void); + + /** + * Delete a database object and the object field list and backend meta data list + * if set. + * \param[in] object a db_object_t pointer. + */ +-void db_object_free(db_object_t* object); ++extern void db_object_free(db_object_t* object); + + /** + * Get the database connection of a database object. +@@ -224,7 +224,7 @@ + * \return a db_connection_t pointer or NULL on error or if no connection has + * been set. + */ +-const db_connection_t* db_object_connection(const db_object_t* object); ++extern const db_connection_t* db_object_connection(const db_object_t* object); + + /** + * Get the table name of a database object. +@@ -232,7 +232,7 @@ + * \return a character pointer or NULL on error or if no table name has been + * set. + */ +-const char* db_object_table(const db_object_t* object); ++extern const char* db_object_table(const db_object_t* object); + + /** + * Get the object field list of a database object. +@@ -240,7 +240,7 @@ + * \return a db_object_field_list_t pointer or NULL on error or if no object + * field list has been set. + */ +-const db_object_field_list_t* db_object_object_field_list(const db_object_t* object); ++extern const db_object_field_list_t* db_object_object_field_list(const db_object_t* object); + + /** + * Set the database connection of a database object. +@@ -248,7 +248,7 @@ + * \param[in] connection a db_connection_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_object_set_connection(db_object_t* object, const db_connection_t* connection); ++extern int db_object_set_connection(db_object_t* object, const db_connection_t* connection); + + /** + * Set the table name of a database object. +@@ -256,7 +256,7 @@ + * \param[in] table a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_object_set_table(db_object_t* object, const char* table); ++extern int db_object_set_table(db_object_t* object, const char* table); + + /** + * Set the primary key name of a database object. +@@ -264,7 +264,7 @@ + * \param[in] primary_key_name a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_object_set_primary_key_name(db_object_t* object, const char* primary_key_name); ++extern int db_object_set_primary_key_name(db_object_t* object, const char* primary_key_name); + + /** + * Set the object field list of a database object, this takes over the ownership +@@ -273,7 +273,7 @@ + * \param[in] object_field_list a db_object_field_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_object_set_object_field_list(db_object_t* object, db_object_field_list_t* object_field_list); ++extern int db_object_set_object_field_list(db_object_t* object, db_object_field_list_t* object_field_list); + + /** + * Create an object in the database. The `object_field_list` describes the +@@ -284,7 +284,7 @@ + * \param[in] value_set a db_value_set_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_object_create(const db_object_t* object, const db_object_field_list_t* object_field_list, const db_value_set_t* value_set); ++extern int db_object_create(const db_object_t* object, const db_object_field_list_t* object_field_list, const db_value_set_t* value_set); + + /** + * Read an object or objects from the database. +@@ -294,7 +294,7 @@ + * \return a db_result_list_t pointer or NULL on error or if no objects where + * read. + */ +-db_result_list_t* db_object_read(const db_object_t* object, const db_join_list_t* join_list, const db_clause_list_t* clause_list); ++extern db_result_list_t* db_object_read(const db_object_t* object, const db_join_list_t* join_list, const db_clause_list_t* clause_list); + + /** + * Update an object or objects in the database. +@@ -304,7 +304,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_object_update(const db_object_t* object, const db_object_field_list_t* object_field_list, const db_value_set_t* value_set, const db_clause_list_t* clause_list); ++extern int db_object_update(const db_object_t* object, const db_object_field_list_t* object_field_list, const db_value_set_t* value_set, const db_clause_list_t* clause_list); + + /** + * Delete an object or objects from the database. +@@ -312,7 +312,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_object_delete(const db_object_t* object, const db_clause_list_t* clause_list); ++extern int db_object_delete(const db_object_t* object, const db_clause_list_t* clause_list); + + /** + * Count objects from the database. Return the count in `count`. +@@ -322,6 +322,6 @@ + * \param[out] count a size_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_object_count(const db_object_t* object, const db_join_list_t* join_list, const db_clause_list_t* clause_list, size_t* count); ++extern int db_object_count(const db_object_t* object, const db_join_list_t* join_list, const db_clause_list_t* clause_list, size_t* count); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/db_result.h opendnssec-2.1.6/enforcer/src/db/db_result.h +--- opendnssec-2.1.6-orig/enforcer/src/db/db_result.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/db_result.h 2020-02-18 23:08:38.110360631 -0500 +@@ -62,20 +62,20 @@ + * Create a new database result. + * \return a db_result_t pointer or NULL on error. + */ +-db_result_t* db_result_new(void); ++extern db_result_t* db_result_new(void); + + /** + * Create a new database result that is a copy of another. + * \param[in] from_result a db_result_t pointer. + * \return a db_result_t pointer or NULL on error. + */ +-db_result_t* db_result_new_copy(const db_result_t* from_result); ++extern db_result_t* db_result_new_copy(const db_result_t* from_result); + + /** + * Delete a database result and the backend meta data list if set. + * \param[in] result a db_result_t pointer. + */ +-void db_result_free(db_result_t* result); ++extern void db_result_free(db_result_t* result); + + /** + * Copy the content of another database result. +@@ -83,7 +83,7 @@ + * \param[in] from_result a db_result_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_result_copy(db_result_t* result, const db_result_t* from_result); ++extern int db_result_copy(db_result_t* result, const db_result_t* from_result); + + /** + * Get the value set of a database result. +@@ -91,7 +91,7 @@ + * \return a db_value_set_t pointer or NULL on error or if no value set has + * been set. + */ +-const db_value_set_t* db_result_value_set(const db_result_t* result); ++extern const db_value_set_t* db_result_value_set(const db_result_t* result); + + /** + * Set the value set of a database result. +@@ -99,14 +99,14 @@ + * \param[in] value_set a db_value_set_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_result_set_value_set(db_result_t* result, db_value_set_t* value_set); ++extern int db_result_set_value_set(db_result_t* result, db_value_set_t* value_set); + + /** + * Check if a database result is not empty. + * \param[in] result a db_result_t pointer. + * \return DB_ERROR_* if empty, otherwise DB_OK. + */ +-int db_result_not_empty(const db_result_t* result); ++extern int db_result_not_empty(const db_result_t* result); + + /** + * A list of database results. +@@ -125,20 +125,20 @@ + * Create a new database result list. + * \return a db_result_list_t pointer or NULL on error. + */ +-db_result_list_t* db_result_list_new(void); ++extern db_result_list_t* db_result_list_new(void); + + /** + * Create a new database result list that is a copy of another. + * \param[in] from_result_list a db_result_list_t pointer. + * \return a db_result_list_t pointer or NULL on error. + */ +-db_result_list_t* db_result_list_new_copy(const db_result_list_t* from_result_list); ++extern db_result_list_t* db_result_list_new_copy(const db_result_list_t* from_result_list); + + /** + * Delete a database result list and all database results within the list. + * \param[in] result_list a db_result_list_t pointer. + */ +-void db_result_list_free(db_result_list_t* result_list); ++extern void db_result_list_free(db_result_list_t* result_list); + + /** + * free global allocator. +@@ -149,7 +149,7 @@ + * \param[in] result_list a db_result_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_result_list_copy(db_result_list_t* result_list, const db_result_list_t* from_result_list); ++extern int db_result_list_copy(db_result_list_t* result_list, const db_result_list_t* from_result_list); + + /** + * Set the function pointer for fetching the next database result for a database +@@ -161,7 +161,7 @@ + * \param[in] size a size_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_result_list_set_next(db_result_list_t* result_list, db_result_list_next_t next_function, void* next_data, size_t size); ++extern int db_result_list_set_next(db_result_list_t* result_list, db_result_list_next_t next_function, void* next_data, size_t size); + + /** + * Add a database result to a database result list, this will takes over the +@@ -170,7 +170,7 @@ + * \param[in] result a db_result_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_result_list_add(db_result_list_t* result_list, db_result_t* result); ++extern int db_result_list_add(db_result_list_t* result_list, db_result_t* result); + + /** + * Return the first database result in a database result list and reset the +@@ -178,7 +178,7 @@ + * \param[in] result_list a db_result_list_t pointer. + * \return a db_result_t pointer or NULL on error or if the list is empty. + */ +-const db_result_t* db_result_list_begin(db_result_list_t* result_list); ++extern const db_result_t* db_result_list_begin(db_result_list_t* result_list); + + /** + * Return the next database result in a database result list. +@@ -186,7 +186,7 @@ + * \return a db_result_t pointer or NULL on error or if the end of the list has + * been reached. + */ +-const db_result_t* db_result_list_next(db_result_list_t* result_list); ++extern const db_result_t* db_result_list_next(db_result_list_t* result_list); + + /** + * Return the size of the database result list. +@@ -195,7 +195,7 @@ + * , if the database result list is empty or if the backend does not support + * returning the size. + */ +-size_t db_result_list_size(const db_result_list_t* result_list); ++extern size_t db_result_list_size(const db_result_list_t* result_list); + + /** + * Make sure that all objects in this database result list is loaded into memory +@@ -204,6 +204,6 @@ + * \param[in] result_list a db_result_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_result_list_fetch_all(db_result_list_t* result_list); ++extern int db_result_list_fetch_all(db_result_list_t* result_list); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/db_value.h opendnssec-2.1.6/enforcer/src/db/db_value.h +--- opendnssec-2.1.6-orig/enforcer/src/db/db_value.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/db_value.h 2020-02-18 23:08:38.111360644 -0500 +@@ -63,19 +63,19 @@ + * Create a new database value. + * \return a db_value_t pointer or NULL on error. + */ +-db_value_t* db_value_new(void); ++extern db_value_t* db_value_new(void); + + /** + * Delete a database value. + * \param[in] value a db_value_t pointer. + */ +-void db_value_free(db_value_t* value); ++extern void db_value_free(db_value_t* value); + + /** + * Reset a database value, releasing all interal resources and marking it empty. + * \param[in] value a db_value_t pointer. + */ +-void db_value_reset(db_value_t* value); ++extern void db_value_reset(db_value_t* value); + + /** + * Copy the contant from one database value into another. +@@ -83,7 +83,7 @@ + * \param[in] from_value a db_value_t pointer to copy from. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_value_copy(db_value_t* value, const db_value_t* from_value); ++extern int db_value_copy(db_value_t* value, const db_value_t* from_value); + + /** + * Compare two database values A and B. Sets `result` with less than, equal to, +@@ -94,14 +94,14 @@ + * \param[out] result an integer pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_value_cmp(const db_value_t* value_a, const db_value_t* value_b, int* result); ++extern int db_value_cmp(const db_value_t* value_a, const db_value_t* value_b, int* result); + + /** + * Get the type of a database value. + * \param[in] value a db_value_t pointer. + * \return a db_type_t. + */ +-db_type_t db_value_type(const db_value_t* value); ++extern db_type_t db_value_type(const db_value_t* value); + + /** + * Get a pointer for the 32bit integer in a database value. +@@ -110,7 +110,7 @@ + * integer value. + * TODO: unit test + */ +-const db_type_int32_t* db_value_int32(const db_value_t* value); ++extern const db_type_int32_t* db_value_int32(const db_value_t* value); + + /** + * Get a pointer for the unsigned 32bit integer in a database value. +@@ -119,7 +119,7 @@ + * unsigned 32bit integer value. + * TODO: unit test + */ +-const db_type_uint32_t* db_value_uint32(const db_value_t* value); ++extern const db_type_uint32_t* db_value_uint32(const db_value_t* value); + + /** + * Get a pointer for the 64bit integer in a database value. +@@ -128,7 +128,7 @@ + * integer value. + * TODO: unit test + */ +-const db_type_int64_t* db_value_int64(const db_value_t* value); ++extern const db_type_int64_t* db_value_int64(const db_value_t* value); + + /** + * Get a pointer for the unsigned 64bit integer in a database value. +@@ -137,14 +137,14 @@ + * unsigned 64bit integer value. + * TODO: unit test + */ +-const db_type_uint64_t* db_value_uint64(const db_value_t* value); ++extern const db_type_uint64_t* db_value_uint64(const db_value_t* value); + + /** + * Get a character pointer for the text in a database value. + * \param[in] value a db_value_t pointer. + * \return a character pointer or NULL on error, if empty or not a text value. + */ +-const char* db_value_text(const db_value_t* value); ++extern const char* db_value_text(const db_value_t* value); + + /** + * Sets `enum_value` with the integer value of an enumeration database value. +@@ -152,14 +152,14 @@ + * \param[out] enum_value an integer pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_value_enum_value(const db_value_t* value, int* enum_value); ++extern int db_value_enum_value(const db_value_t* value, int* enum_value); + + /** + * Check if a database value is not empty. + * \param[in] value a db_value_t pointer. + * \return DB_ERROR_* if empty, otherwise DB_OK. + */ +-int db_value_not_empty(const db_value_t* value); ++extern int db_value_not_empty(const db_value_t* value); + + /** + * Get the 32bit integer representation of the database value. +@@ -167,7 +167,7 @@ + * \param[out] to_int32 a db_type_int32_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_value_to_int32(const db_value_t* value, db_type_int32_t* to_int32); ++extern int db_value_to_int32(const db_value_t* value, db_type_int32_t* to_int32); + + /** + * Get the unsigned 32bit integer representation of the database value. +@@ -175,7 +175,7 @@ + * \param[out] to_uint32 a db_type_uint32_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_value_to_uint32(const db_value_t* value, db_type_uint32_t* to_uint32); ++extern int db_value_to_uint32(const db_value_t* value, db_type_uint32_t* to_uint32); + + /** + * Get the 64bit integer representation of the database value. +@@ -183,7 +183,7 @@ + * \param[out] to_int64 a db_type_int64_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_value_to_int64(const db_value_t* value, db_type_int64_t* to_int64); ++extern int db_value_to_int64(const db_value_t* value, db_type_int64_t* to_int64); + + /** + * Get the unsigned 64bit integer representation of the database value. +@@ -191,7 +191,7 @@ + * \param[out] to_uint64 a db_type_uint64_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_value_to_uint64(const db_value_t* value, db_type_uint64_t* to_uint64); ++extern int db_value_to_uint64(const db_value_t* value, db_type_uint64_t* to_uint64); + + /** + * Get the character representation of the database value. +@@ -199,7 +199,7 @@ + * \param[out] to_text a character pointer pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_value_to_text(const db_value_t* value, char** to_text); ++extern int db_value_to_text(const db_value_t* value, char** to_text); + + /** + * Get the integer enumeration representation of the database value. +@@ -208,7 +208,7 @@ + * \param[in] enum_set a db_enum_t array that MUST end with NULL. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_value_to_enum_value(const db_value_t* value, int* to_int, const db_enum_t* enum_set); ++extern int db_value_to_enum_value(const db_value_t* value, int* to_int, const db_enum_t* enum_set); + + /** + * Set the database value to a 32bit integer value. +@@ -216,7 +216,7 @@ + * \param[in] from_int32 a db_type_int32_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_value_from_int32(db_value_t* value, db_type_int32_t from_int32); ++extern int db_value_from_int32(db_value_t* value, db_type_int32_t from_int32); + + /** + * Set the database value to an unsigned 32bit integer value. +@@ -224,7 +224,7 @@ + * \param[in] from_uint32 a db_type_uint32_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_value_from_uint32(db_value_t* value, db_type_uint32_t from_uint32); ++extern int db_value_from_uint32(db_value_t* value, db_type_uint32_t from_uint32); + + /** + * Set the database value to a 64bit integer value. +@@ -232,7 +232,7 @@ + * \param[in] from_int64 a db_type_int64_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_value_from_int64(db_value_t* value, db_type_int64_t from_int64); ++extern int db_value_from_int64(db_value_t* value, db_type_int64_t from_int64); + + /** + * Set the database value to an unsigned 64bit integer value. +@@ -240,7 +240,7 @@ + * \param[in] from_uint64 a db_type_uint64_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_value_from_uint64(db_value_t* value, db_type_uint64_t from_uint64); ++extern int db_value_from_uint64(db_value_t* value, db_type_uint64_t from_uint64); + + /** + * Set the database value to a text value. +@@ -248,7 +248,7 @@ + * \param[in] from_text a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_value_from_text(db_value_t* value, const char* from_text); ++extern int db_value_from_text(db_value_t* value, const char* from_text); + + /** + * Set the database value to a text value. +@@ -257,7 +257,7 @@ + * \param[in] size a size_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_value_from_text2(db_value_t* value, const char* from_text, size_t size); ++extern int db_value_from_text2(db_value_t* value, const char* from_text, size_t size); + + /** + * Set the database value to an enumeration value based on an integer value. +@@ -266,14 +266,14 @@ + * \param[in] enum_set a db_enum_t array that MUST end with NULL. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_value_from_enum_value(db_value_t* value, int enum_value, const db_enum_t* enum_set); ++extern int db_value_from_enum_value(db_value_t* value, int enum_value, const db_enum_t* enum_set); + + /** + * Mark the database as a primary key. + * \param[in] value a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int db_value_set_primary_key(db_value_t* value); ++extern int db_value_set_primary_key(db_value_t* value); + + /** + * A container for a fixed set of database values. +@@ -288,27 +288,27 @@ + * \param[in] size a size_t. + * \return a db_value_set_t pointer or NULL on error. + */ +-db_value_set_t* db_value_set_new(size_t size); ++extern db_value_set_t* db_value_set_new(size_t size); + + /** + * Create a new set of database value that is a copy of another. + * \param[in] from_value_set a db_value_set_t pointer. + * \return a db_value_set_t pointer or NULL on error. + */ +-db_value_set_t* db_value_set_new_copy(const db_value_set_t* from_value_set); ++extern db_value_set_t* db_value_set_new_copy(const db_value_set_t* from_value_set); + + /** + * Delete a database value set and all values within the set. + * \param[in] value_set a db_value_set_t pointer. + */ +-void db_value_set_free(db_value_set_t* value_set); ++extern void db_value_set_free(db_value_set_t* value_set); + + /** + * Get the size of database value set. + * \param[in] value_set a db_value_set_t pointer. + * \return a size_t. + */ +-size_t db_value_set_size(const db_value_set_t* value_set); ++extern size_t db_value_set_size(const db_value_set_t* value_set); + + /** + * Get a read only database value at a position in a database value set. +@@ -316,7 +316,7 @@ + * \param[in] at a size_t. + * \return a db_value_t pointer or NULL on error. + */ +-const db_value_t* db_value_set_at(const db_value_set_t* value_set, size_t at); ++extern const db_value_t* db_value_set_at(const db_value_set_t* value_set, size_t at); + + /** + * Get a writable database value at a position in a database value set. +@@ -324,6 +324,6 @@ + * \param[in] at a size_t. + * \return a db_value_t pointer or NULL on error. + */ +-db_value_t* db_value_set_get(db_value_set_t* value_set, size_t at); ++extern db_value_t* db_value_set_get(db_value_set_t* value_set, size_t at); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/hsm_key_ext.h opendnssec-2.1.6/enforcer/src/db/hsm_key_ext.h +--- opendnssec-2.1.6-orig/enforcer/src/db/hsm_key_ext.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/hsm_key_ext.h 2020-02-18 23:08:38.111360644 -0500 +@@ -35,13 +35,13 @@ + /** + * Return the human readable backup state of hsm_key as static string. + */ +-char const * ++extern char const * + hsm_key_to_backup_state(hsm_key_t const *hsm_key); + + /** + * Get all HSM keys for policy/algorithm/bits/repository. + * NULL on failure + */ +-hsm_key_list_t* hsm_key_list_new_get_by_policy_key(const policy_key_t *pkey); ++extern hsm_key_list_t* hsm_key_list_new_get_by_policy_key(const policy_key_t *pkey); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/hsm_key.h opendnssec-2.1.6/enforcer/src/db/hsm_key.h +--- opendnssec-2.1.6-orig/enforcer/src/db/hsm_key.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/hsm_key.h 2020-02-18 23:08:38.111360644 -0500 +@@ -98,20 +98,20 @@ + * \param[in] connection a db_connection_t pointer. + * \return a hsm_key_t pointer or NULL on error. + */ +-hsm_key_t* hsm_key_new(const db_connection_t* connection); ++extern hsm_key_t* hsm_key_new(const db_connection_t* connection); + + /** + * Create a new hsm key object that is a copy of another hsm key object. + * \param[in] hsm_key a hsm_key_t pointer. + * \return a hsm_key_t pointer or NULL on error. + */ +-hsm_key_t* hsm_key_new_copy(const hsm_key_t* hsm_key); ++extern hsm_key_t* hsm_key_new_copy(const hsm_key_t* hsm_key); + + /** + * Delete a hsm key object, this does not delete it from the database. + * \param[in] hsm_key a hsm_key_t pointer. + */ +-void hsm_key_free(hsm_key_t* hsm_key); ++extern void hsm_key_free(hsm_key_t* hsm_key); + + /** + * Copy the content of a hsm key object. +@@ -119,7 +119,7 @@ + * \param[in] hsm_key_copy a hsm_key_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_copy(hsm_key_t* hsm_key, const hsm_key_t* hsm_key_copy); ++extern int hsm_key_copy(hsm_key_t* hsm_key, const hsm_key_t* hsm_key_copy); + + /** + * Set the content of a hsm key object based on a database result. +@@ -127,77 +127,77 @@ + * \param[in] result a db_result_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_from_result(hsm_key_t* hsm_key, const db_result_t* result); ++extern int hsm_key_from_result(hsm_key_t* hsm_key, const db_result_t* result); + + /** + * Get the id of a hsm key object. + * \param[in] hsm_key a hsm_key_t pointer. + * \return a db_value_t pointer or NULL on error. + */ +-const db_value_t* hsm_key_id(const hsm_key_t* hsm_key); ++extern const db_value_t* hsm_key_id(const hsm_key_t* hsm_key); + + /** + * Get the policy_id of a hsm key object. + * \param[in] hsm_key a hsm_key_t pointer. + * \return a db_value_t pointer or NULL on error. + */ +-const db_value_t* hsm_key_policy_id(const hsm_key_t* hsm_key); ++extern const db_value_t* hsm_key_policy_id(const hsm_key_t* hsm_key); + + /** + * Get the locator of a hsm key object. + * \param[in] hsm_key a hsm_key_t pointer. + * \return a character pointer or NULL on error or if no locator has been set. + */ +-const char* hsm_key_locator(const hsm_key_t* hsm_key); ++extern const char* hsm_key_locator(const hsm_key_t* hsm_key); + + /** + * Get the state of a hsm key object. + * \param[in] hsm_key a hsm_key_t pointer. + * \return a hsm_key_state_t which may be HSM_KEY_STATE_INVALID on error or if no state has been set. + */ +-hsm_key_state_t hsm_key_state(const hsm_key_t* hsm_key); ++extern hsm_key_state_t hsm_key_state(const hsm_key_t* hsm_key); + + /** + * Get the bits of a hsm key object. Undefined behavior if `hsm_key` is NULL. + * \param[in] hsm_key a hsm_key_t pointer. + * \return an unsigned integer. + */ +-unsigned int hsm_key_bits(const hsm_key_t* hsm_key); ++extern unsigned int hsm_key_bits(const hsm_key_t* hsm_key); + + /** + * Get the algorithm of a hsm key object. Undefined behavior if `hsm_key` is NULL. + * \param[in] hsm_key a hsm_key_t pointer. + * \return an unsigned integer. + */ +-unsigned int hsm_key_algorithm(const hsm_key_t* hsm_key); ++extern unsigned int hsm_key_algorithm(const hsm_key_t* hsm_key); + + /** + * Get the role of a hsm key object. + * \param[in] hsm_key a hsm_key_t pointer. + * \return a hsm_key_role_t which may be HSM_KEY_ROLE_INVALID on error or if no role has been set. + */ +-hsm_key_role_t hsm_key_role(const hsm_key_t* hsm_key); ++extern hsm_key_role_t hsm_key_role(const hsm_key_t* hsm_key); + + /** + * Get the inception of a hsm key object. Undefined behavior if `hsm_key` is NULL. + * \param[in] hsm_key a hsm_key_t pointer. + * \return an unsigned integer. + */ +-unsigned int hsm_key_inception(const hsm_key_t* hsm_key); ++extern unsigned int hsm_key_inception(const hsm_key_t* hsm_key); + + /** + * Get the repository of a hsm key object. + * \param[in] hsm_key a hsm_key_t pointer. + * \return a character pointer or NULL on error or if no repository has been set. + */ +-const char* hsm_key_repository(const hsm_key_t* hsm_key); ++extern const char* hsm_key_repository(const hsm_key_t* hsm_key); + + /** + * Get the backup of a hsm key object. + * \param[in] hsm_key a hsm_key_t pointer. + * \return a hsm_key_backup_t which may be HSM_KEY_BACKUP_INVALID on error or if no backup has been set. + */ +-hsm_key_backup_t hsm_key_backup(const hsm_key_t* hsm_key); ++extern hsm_key_backup_t hsm_key_backup(const hsm_key_t* hsm_key); + + /** + * Set the policy_id of a hsm key object. If this fails the original value may have been lost. +@@ -205,7 +205,7 @@ + * \param[in] policy_id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_set_policy_id(hsm_key_t* hsm_key, const db_value_t* policy_id); ++extern int hsm_key_set_policy_id(hsm_key_t* hsm_key, const db_value_t* policy_id); + + /** + * Set the locator of a hsm key object. +@@ -213,7 +213,7 @@ + * \param[in] locator_text a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_set_locator(hsm_key_t* hsm_key, const char* locator_text); ++extern int hsm_key_set_locator(hsm_key_t* hsm_key, const char* locator_text); + + /** + * Set the state of a hsm key object. +@@ -221,7 +221,7 @@ + * \param[in] state a hsm_key_state_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_set_state(hsm_key_t* hsm_key, hsm_key_state_t state); ++extern int hsm_key_set_state(hsm_key_t* hsm_key, hsm_key_state_t state); + + /** + * Set the bits of a hsm key object. +@@ -229,7 +229,7 @@ + * \param[in] bits an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_set_bits(hsm_key_t* hsm_key, unsigned int bits); ++extern int hsm_key_set_bits(hsm_key_t* hsm_key, unsigned int bits); + + /** + * Set the algorithm of a hsm key object. +@@ -237,7 +237,7 @@ + * \param[in] algorithm an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_set_algorithm(hsm_key_t* hsm_key, unsigned int algorithm); ++extern int hsm_key_set_algorithm(hsm_key_t* hsm_key, unsigned int algorithm); + + /** + * Set the role of a hsm key object. +@@ -245,7 +245,7 @@ + * \param[in] role a hsm_key_role_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_set_role(hsm_key_t* hsm_key, hsm_key_role_t role); ++extern int hsm_key_set_role(hsm_key_t* hsm_key, hsm_key_role_t role); + + /** + * Set the inception of a hsm key object. +@@ -253,7 +253,7 @@ + * \param[in] inception an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_set_inception(hsm_key_t* hsm_key, unsigned int inception); ++extern int hsm_key_set_inception(hsm_key_t* hsm_key, unsigned int inception); + + /** + * Set the key_type of a hsm key object. +@@ -261,7 +261,7 @@ + * \param[in] key_type a hsm_key_key_type_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_set_key_type(hsm_key_t* hsm_key, hsm_key_key_type_t key_type); ++extern int hsm_key_set_key_type(hsm_key_t* hsm_key, hsm_key_key_type_t key_type); + + /** + * Set the repository of a hsm key object. +@@ -269,7 +269,7 @@ + * \param[in] repository_text a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_set_repository(hsm_key_t* hsm_key, const char* repository_text); ++extern int hsm_key_set_repository(hsm_key_t* hsm_key, const char* repository_text); + + /** + * Set the backup of a hsm key object. +@@ -277,7 +277,7 @@ + * \param[in] backup a hsm_key_backup_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_set_backup(hsm_key_t* hsm_key, hsm_key_backup_t backup); ++extern int hsm_key_set_backup(hsm_key_t* hsm_key, hsm_key_backup_t backup); + + /** + * Create a clause for policy_id of a hsm key object and add it to a database clause list. +@@ -288,7 +288,7 @@ + * \param[in] policy_id a db_value_t pointer. + * \return a db_clause_t pointer to the added clause or NULL on error. + */ +-db_clause_t* hsm_key_policy_id_clause(db_clause_list_t* clause_list, const db_value_t* policy_id); ++extern db_clause_t* hsm_key_policy_id_clause(db_clause_list_t* clause_list, const db_value_t* policy_id); + + /** + * Create a clause for state of a hsm key object and add it to a database clause list. +@@ -299,7 +299,7 @@ + * \param[in] state a hsm_key_state_t. + * \return a db_clause_t pointer to the added clause or NULL on error. + */ +-db_clause_t* hsm_key_state_clause(db_clause_list_t* clause_list, hsm_key_state_t state); ++extern db_clause_t* hsm_key_state_clause(db_clause_list_t* clause_list, hsm_key_state_t state); + + /** + * Create a clause for bits of a hsm key object and add it to a database clause list. +@@ -310,7 +310,7 @@ + * \param[in] bits an unsigned integer. + * \return a db_clause_t pointer to the added clause or NULL on error. + */ +-db_clause_t* hsm_key_bits_clause(db_clause_list_t* clause_list, unsigned int bits); ++extern db_clause_t* hsm_key_bits_clause(db_clause_list_t* clause_list, unsigned int bits); + + /** + * Create a clause for algorithm of a hsm key object and add it to a database clause list. +@@ -321,7 +321,7 @@ + * \param[in] algorithm an unsigned integer. + * \return a db_clause_t pointer to the added clause or NULL on error. + */ +-db_clause_t* hsm_key_algorithm_clause(db_clause_list_t* clause_list, unsigned int algorithm); ++extern db_clause_t* hsm_key_algorithm_clause(db_clause_list_t* clause_list, unsigned int algorithm); + + /** + * Create a clause for role of a hsm key object and add it to a database clause list. +@@ -332,7 +332,7 @@ + * \param[in] role a hsm_key_role_t. + * \return a db_clause_t pointer to the added clause or NULL on error. + */ +-db_clause_t* hsm_key_role_clause(db_clause_list_t* clause_list, hsm_key_role_t role); ++extern db_clause_t* hsm_key_role_clause(db_clause_list_t* clause_list, hsm_key_role_t role); + + /** + * Create a clause for is_revoked of a hsm key object and add it to a database clause list. +@@ -343,7 +343,7 @@ + * \param[in] is_revoked an unsigned integer. + * \return a db_clause_t pointer to the added clause or NULL on error. + */ +-db_clause_t* hsm_key_is_revoked_clause(db_clause_list_t* clause_list, unsigned int is_revoked); ++extern db_clause_t* hsm_key_is_revoked_clause(db_clause_list_t* clause_list, unsigned int is_revoked); + + /** + * Create a clause for key_type of a hsm key object and add it to a database clause list. +@@ -354,7 +354,7 @@ + * \param[in] key_type a hsm_key_key_type_t. + * \return a db_clause_t pointer to the added clause or NULL on error. + */ +-db_clause_t* hsm_key_key_type_clause(db_clause_list_t* clause_list, hsm_key_key_type_t key_type); ++extern db_clause_t* hsm_key_key_type_clause(db_clause_list_t* clause_list, hsm_key_key_type_t key_type); + + /** + * Create a clause for repository of a hsm key object and add it to a database clause list. +@@ -365,7 +365,7 @@ + * \param[in] repository_text a character pointer. + * \return a db_clause_t pointer to the added clause or NULL on error. + */ +-db_clause_t* hsm_key_repository_clause(db_clause_list_t* clause_list, const char* repository_text); ++extern db_clause_t* hsm_key_repository_clause(db_clause_list_t* clause_list, const char* repository_text); + + /** + * Create a clause for backup of a hsm key object and add it to a database clause list. +@@ -376,14 +376,14 @@ + * \param[in] backup a hsm_key_backup_t. + * \return a db_clause_t pointer to the added clause or NULL on error. + */ +-db_clause_t* hsm_key_backup_clause(db_clause_list_t* clause_list, hsm_key_backup_t backup); ++extern db_clause_t* hsm_key_backup_clause(db_clause_list_t* clause_list, hsm_key_backup_t backup); + + /** + * Create a hsm key object in the database. + * \param[in] hsm_key a hsm_key_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_create(hsm_key_t* hsm_key); ++extern int hsm_key_create(hsm_key_t* hsm_key); + + /** + * Get a hsm key object from the database by a id specified in `id`. +@@ -391,7 +391,7 @@ + * \param[in] id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_get_by_id(hsm_key_t* hsm_key, const db_value_t* id); ++extern int hsm_key_get_by_id(hsm_key_t* hsm_key, const db_value_t* id); + + /** + * Get a hsm key object from the database by a locator specified in `locator`. +@@ -399,7 +399,7 @@ + * \param[in] locator a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_get_by_locator(hsm_key_t* hsm_key, const char* locator); ++extern int hsm_key_get_by_locator(hsm_key_t* hsm_key, const char* locator); + + /** + * Get a new hsm key object from the database by a locator specified in `locator`. +@@ -407,14 +407,14 @@ + * \param[in] locator a character pointer. + * \return a hsm_key_t pointer or NULL on error or if it does not exist. + */ +-hsm_key_t* hsm_key_new_get_by_locator(const db_connection_t* connection, const char* locator); ++extern hsm_key_t* hsm_key_new_get_by_locator(const db_connection_t* connection, const char* locator); + + /** + * Update a hsm key object in the database. + * \param[in] hsm_key a hsm_key_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_update(hsm_key_t* hsm_key); ++extern int hsm_key_update(hsm_key_t* hsm_key); + + /** + * Count the number of hsm key objects in the database, if a selection of +@@ -426,7 +426,7 @@ + * should be counted. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_count(hsm_key_t* hsm_key, db_clause_list_t* clause_list, size_t* count); ++extern int hsm_key_count(hsm_key_t* hsm_key, db_clause_list_t* clause_list, size_t* count); + + /** + * A list of hsm key objects. +@@ -450,14 +450,14 @@ + * \param[in] connection a db_connection_t pointer. + * \return a hsm_key_list_t pointer or NULL on error. + */ +-hsm_key_list_t* hsm_key_list_new(const db_connection_t* connection); ++extern hsm_key_list_t* hsm_key_list_new(const db_connection_t* connection); + + /** + * Create a new hsm key object list that is a copy of another. + * \param[in] hsm_key_list a hsm_key_list_t pointer. + * \return a hsm_key_list_t pointer or NULL on error. + */ +-hsm_key_list_t* hsm_key_list_new_copy(const hsm_key_list_t* hsm_key_copy); ++extern hsm_key_list_t* hsm_key_list_new_copy(const hsm_key_list_t* hsm_key_copy); + + /** + * Specify that objects should be stored within the list as they are fetch, +@@ -465,13 +465,13 @@ + * \param[in] hsm_key_list a hsm_key_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_list_object_store(hsm_key_list_t* hsm_key_list); ++extern int hsm_key_list_object_store(hsm_key_list_t* hsm_key_list); + + /** + * Delete a hsm key object list. + * \param[in] hsm_key_list a hsm_key_list_t pointer. + */ +-void hsm_key_list_free(hsm_key_list_t* hsm_key_list); ++extern void hsm_key_list_free(hsm_key_list_t* hsm_key_list); + + /** + * free global allocator. +@@ -483,7 +483,7 @@ + * \param[in] from_hsm_key_list a hsm_key_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_list_copy(hsm_key_list_t* hsm_key_list, const hsm_key_list_t* from_hsm_key_list); ++extern int hsm_key_list_copy(hsm_key_list_t* hsm_key_list, const hsm_key_list_t* from_hsm_key_list); + + /** + * Get hsm key objects from the database by a clause list. +@@ -491,7 +491,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_list_get_by_clauses(hsm_key_list_t* hsm_key_list, const db_clause_list_t* clause_list); ++extern int hsm_key_list_get_by_clauses(hsm_key_list_t* hsm_key_list, const db_clause_list_t* clause_list); + + /** + * Get a new list of hsm key objects from the database by a clause list. +@@ -499,7 +499,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return a hsm_key_list_t pointer or NULL on error. + */ +-hsm_key_list_t* hsm_key_list_new_get_by_clauses(const db_connection_t* connection, const db_clause_list_t* clause_list); ++extern hsm_key_list_t* hsm_key_list_new_get_by_clauses(const db_connection_t* connection, const db_clause_list_t* clause_list); + + /** + * Get hsm key objects from the database by a policy_id specified in `policy_id`. +@@ -507,7 +507,7 @@ + * \param[in] policy_id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int hsm_key_list_get_by_policy_id(hsm_key_list_t* hsm_key_list, const db_value_t* policy_id); ++extern int hsm_key_list_get_by_policy_id(hsm_key_list_t* hsm_key_list, const db_value_t* policy_id); + + /** + * Get a new list of hsm key objects from the database by a policy_id specified in `policy_id`. +@@ -515,7 +515,7 @@ + * \param[in] policy_id a db_value_t pointer. + * \return a hsm_key_list_t pointer or NULL on error. + */ +-hsm_key_list_t* hsm_key_list_new_get_by_policy_id(const db_connection_t* connection, const db_value_t* policy_id); ++extern hsm_key_list_t* hsm_key_list_new_get_by_policy_id(const db_connection_t* connection, const db_value_t* policy_id); + + /** + * Get the first hsm key object in a hsm key object list and reset the +@@ -524,7 +524,7 @@ + * \return a hsm_key_t pointer or NULL on error or if there are no + * hsm key objects in the hsm key object list. + */ +-const hsm_key_t* hsm_key_list_begin(hsm_key_list_t* hsm_key_list); ++extern const hsm_key_t* hsm_key_list_begin(hsm_key_list_t* hsm_key_list); + + /** + * Get the first hsm key object in a hsm key object list and reset the +@@ -534,7 +534,7 @@ + * \return a hsm_key_t pointer or NULL on error or if there are no + * hsm key objects in the hsm key object list. + */ +-hsm_key_t* hsm_key_list_get_begin(hsm_key_list_t* hsm_key_list); ++extern hsm_key_t* hsm_key_list_get_begin(hsm_key_list_t* hsm_key_list); + + /** + * Get the next hsm key object in a hsm key object list. +@@ -544,7 +544,7 @@ + * \return a hsm_key_t pointer or NULL on error or if there are no more + * hsm key objects in the hsm key object list. + */ +-const hsm_key_t* hsm_key_list_next(hsm_key_list_t* hsm_key_list); ++extern const hsm_key_t* hsm_key_list_next(hsm_key_list_t* hsm_key_list); + + /** + * Get the next hsm key object in a hsm key object list. +@@ -554,6 +554,6 @@ + * \return a hsm_key_t pointer or NULL on error or if there are no more + * hsm key objects in the hsm key object list. + */ +-hsm_key_t* hsm_key_list_get_next(hsm_key_list_t* hsm_key_list); ++extern hsm_key_t* hsm_key_list_get_next(hsm_key_list_t* hsm_key_list); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/key_data_ext.h opendnssec-2.1.6/enforcer/src/db/key_data_ext.h +--- opendnssec-2.1.6-orig/enforcer/src/db/key_data_ext.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/key_data_ext.h 2020-02-18 23:08:38.111360644 -0500 +@@ -38,7 +38,7 @@ + * \param[in] key_data a key_data_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_cache_key_states(key_data_t* key_data); ++extern int key_data_cache_key_states(key_data_t* key_data); + + /** + * Get the cached DS key state object of a key data object. +@@ -46,7 +46,7 @@ + * \param[in] key_data a key_data_t pointer. + * \return a key_state_t pointer. + */ +-const key_state_t* key_data_cached_ds(key_data_t* key_data); ++extern const key_state_t* key_data_cached_ds(key_data_t* key_data); + + /** + * Get the cached RRSIG key state object of a key data object. +@@ -54,7 +54,7 @@ + * \param[in] key_data a key_data_t pointer. + * \return a key_state_t pointer. + */ +-const key_state_t* key_data_cached_rrsig(key_data_t* key_data); ++extern const key_state_t* key_data_cached_rrsig(key_data_t* key_data); + + /** + * Get the cached DNSKEY key state object of a key data object. +@@ -62,7 +62,7 @@ + * \param[in] key_data a key_data_t pointer. + * \return a key_state_t pointer. + */ +-const key_state_t* key_data_cached_dnskey(key_data_t* key_data); ++extern const key_state_t* key_data_cached_dnskey(key_data_t* key_data); + + /** + * Get the cached RRSIG DNSKEY key state object of a key data object. +@@ -70,7 +70,7 @@ + * \param[in] key_data a key_data_t pointer. + * \return a key_state_t pointer. + */ +-const key_state_t* key_data_cached_rrsigdnskey(key_data_t* key_data); ++extern const key_state_t* key_data_cached_rrsigdnskey(key_data_t* key_data); + + /** + * Get the cached DS key state object of a key data object. +@@ -78,7 +78,7 @@ + * \param[in] key_data a key_data_t pointer. + * \return a key_state_t pointer. + */ +-key_state_t* key_data_get_cached_ds(key_data_t* key_data); ++extern key_state_t* key_data_get_cached_ds(key_data_t* key_data); + + /** + * Get the cached RRSIG key state object of a key data object. +@@ -86,7 +86,7 @@ + * \param[in] key_data a key_data_t pointer. + * \return a key_state_t pointer. + */ +-key_state_t* key_data_get_cached_rrsig(key_data_t* key_data); ++extern key_state_t* key_data_get_cached_rrsig(key_data_t* key_data); + + /** + * Get the cached DNSKEY key state object of a key data object. +@@ -94,7 +94,7 @@ + * \param[in] key_data a key_data_t pointer. + * \return a key_state_t pointer. + */ +-key_state_t* key_data_get_cached_dnskey(key_data_t* key_data); ++extern key_state_t* key_data_get_cached_dnskey(key_data_t* key_data); + + /** + * Get the cached RRSIG DNSKEY key state object of a key data object. +@@ -102,7 +102,7 @@ + * \param[in] key_data a key_data_t pointer. + * \return a key_state_t pointer. + */ +-key_state_t* key_data_get_cached_rrsigdnskey(key_data_t* key_data); ++extern key_state_t* key_data_get_cached_rrsigdnskey(key_data_t* key_data); + + /** + * Get the cached hsm key object of a key data object. +@@ -110,6 +110,6 @@ + * \param[in] key_data a key_data_t pointer. + * \return a key_state_t pointer. + */ +-const hsm_key_t* key_data_cached_hsm_key(const key_data_t* key_data); ++extern const hsm_key_t* key_data_cached_hsm_key(const key_data_t* key_data); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/key_data.h opendnssec-2.1.6/enforcer/src/db/key_data.h +--- opendnssec-2.1.6-orig/enforcer/src/db/key_data.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/key_data.h 2020-02-18 23:08:38.111360644 -0500 +@@ -93,20 +93,20 @@ + * \param[in] connection a db_connection_t pointer. + * \return a key_data_t pointer or NULL on error. + */ +-key_data_t* key_data_new(const db_connection_t* connection); ++extern key_data_t* key_data_new(const db_connection_t* connection); + + /** + * Create a new key data object that is a copy of another key data object. + * \param[in] key_data a key_data_t pointer. + * \return a key_data_t pointer or NULL on error. + */ +-key_data_t* key_data_new_copy(const key_data_t* key_data); ++extern key_data_t* key_data_new_copy(const key_data_t* key_data); + + /** + * Delete a key data object, this does not delete it from the database. + * \param[in] key_data a key_data_t pointer. + */ +-void key_data_free(key_data_t* key_data); ++extern void key_data_free(key_data_t* key_data); + + /** + * Copy the content of a key data object. +@@ -114,7 +114,7 @@ + * \param[in] key_data_copy a key_data_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_copy(key_data_t* key_data, const key_data_t* key_data_copy); ++extern int key_data_copy(key_data_t* key_data, const key_data_t* key_data_copy); + + /** + * Compare two key data objects and return less than, equal to, +@@ -125,7 +125,7 @@ + * \return less than, equal to, or greater than zero if A is found, respectively, + * to be less than, to match, or be greater than B. + */ +-int key_data_cmp(const key_data_t* key_data_a, const key_data_t* key_data_b); ++extern int key_data_cmp(const key_data_t* key_data_a, const key_data_t* key_data_b); + + /** + * Set the content of a key data object based on a database result. +@@ -133,21 +133,21 @@ + * \param[in] result a db_result_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_from_result(key_data_t* key_data, const db_result_t* result); ++extern int key_data_from_result(key_data_t* key_data, const db_result_t* result); + + /** + * Get the id of a key data object. + * \param[in] key_data a key_data_t pointer. + * \return a db_value_t pointer or NULL on error. + */ +-const db_value_t* key_data_id(const key_data_t* key_data); ++extern const db_value_t* key_data_id(const key_data_t* key_data); + + /** + * Get the zone_id of a key data object. + * \param[in] key_data a key_data_t pointer. + * \return a db_value_t pointer or NULL on error. + */ +-const db_value_t* key_data_zone_id(const key_data_t* key_data); ++extern const db_value_t* key_data_zone_id(const key_data_t* key_data); + + /** + * Get the zone_id object related to a key data object. +@@ -155,28 +155,28 @@ + * \param[in] key_data a key_data_t pointer. + * \return a zone_db_t pointer or NULL on error or if no object could be found. + */ +-zone_db_t* key_data_get_zone(const key_data_t* key_data); ++extern zone_db_t* key_data_get_zone(const key_data_t* key_data); + + /** + * Get the hsm_key_id of a key data object. + * \param[in] key_data a key_data_t pointer. + * \return a db_value_t pointer or NULL on error. + */ +-const db_value_t* key_data_hsm_key_id(const key_data_t* key_data); ++extern const db_value_t* key_data_hsm_key_id(const key_data_t* key_data); + + /** + * Cache the hsm_key_id object related to a key data object. + * \param[in] key_data a key_data_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_cache_hsm_key(key_data_t* key_data); ++extern int key_data_cache_hsm_key(key_data_t* key_data); + + /** + * Get the hsm_key_id object related to a key data object. + * \param[in] key_data a key_data_t pointer. + * \return a hsm_key_t pointer or NULL on error or if no object could be found. + */ +-const hsm_key_t* key_data_hsm_key(const key_data_t* key_data); ++extern const hsm_key_t* key_data_hsm_key(const key_data_t* key_data); + + /** + * Get the hsm_key_id object related to a key data object. +@@ -184,91 +184,91 @@ + * \param[in] key_data a key_data_t pointer. + * \return a hsm_key_t pointer or NULL on error or if no object could be found. + */ +-hsm_key_t* key_data_get_hsm_key(const key_data_t* key_data); ++extern hsm_key_t* key_data_get_hsm_key(const key_data_t* key_data); + + /** + * Get the algorithm of a key data object. Undefined behavior if `key_data` is NULL. + * \param[in] key_data a key_data_t pointer. + * \return an unsigned integer. + */ +-unsigned int key_data_algorithm(const key_data_t* key_data); ++extern unsigned int key_data_algorithm(const key_data_t* key_data); + + /** + * Get the inception of a key data object. Undefined behavior if `key_data` is NULL. + * \param[in] key_data a key_data_t pointer. + * \return an unsigned integer. + */ +-unsigned int key_data_inception(const key_data_t* key_data); ++extern unsigned int key_data_inception(const key_data_t* key_data); + + /** + * Get the role of a key data object. + * \param[in] key_data a key_data_t pointer. + * \return a key_data_role_t which may be KEY_DATA_ROLE_INVALID on error or if no role has been set. + */ +-key_data_role_t key_data_role(const key_data_t* key_data); ++extern key_data_role_t key_data_role(const key_data_t* key_data); + + /** + * Get the role as text of a key data object. + * \param[in] key_data a key_data_t pointer. + * \return a character pointer or NULL on error or if no role has been set. + */ +-const char* key_data_role_text(const key_data_t* key_data); ++extern const char* key_data_role_text(const key_data_t* key_data); + + /** + * Get the introducing of a key data object. Undefined behavior if `key_data` is NULL. + * \param[in] key_data a key_data_t pointer. + * \return an unsigned integer. + */ +-unsigned int key_data_introducing(const key_data_t* key_data); ++extern unsigned int key_data_introducing(const key_data_t* key_data); + + /** + * Get the active_zsk of a key data object. Undefined behavior if `key_data` is NULL. + * \param[in] key_data a key_data_t pointer. + * \return an unsigned integer. + */ +-unsigned int key_data_active_zsk(const key_data_t* key_data); ++extern unsigned int key_data_active_zsk(const key_data_t* key_data); + + /** + * Get the publish of a key data object. Undefined behavior if `key_data` is NULL. + * \param[in] key_data a key_data_t pointer. + * \return an unsigned integer. + */ +-unsigned int key_data_publish(const key_data_t* key_data); ++extern unsigned int key_data_publish(const key_data_t* key_data); + + /** + * Get the active_ksk of a key data object. Undefined behavior if `key_data` is NULL. + * \param[in] key_data a key_data_t pointer. + * \return an unsigned integer. + */ +-unsigned int key_data_active_ksk(const key_data_t* key_data); ++extern unsigned int key_data_active_ksk(const key_data_t* key_data); + + /** + * Get the ds_at_parent of a key data object. + * \param[in] key_data a key_data_t pointer. + * \return a key_data_ds_at_parent_t which may be KEY_DATA_DS_AT_PARENT_INVALID on error or if no ds_at_parent has been set. + */ +-key_data_ds_at_parent_t key_data_ds_at_parent(const key_data_t* key_data); ++extern key_data_ds_at_parent_t key_data_ds_at_parent(const key_data_t* key_data); + + /** + * Get the keytag of a key data object. Undefined behavior if `key_data` is NULL. + * \param[in] key_data a key_data_t pointer. + * \return an unsigned integer. + */ +-unsigned int key_data_keytag(const key_data_t* key_data); ++extern unsigned int key_data_keytag(const key_data_t* key_data); + + /** + * Get the minimize of a key data object. Undefined behavior if `key_data` is NULL. + * \param[in] key_data a key_data_t pointer. + * \return an unsigned integer. + */ +-unsigned int key_data_minimize(const key_data_t* key_data); ++extern unsigned int key_data_minimize(const key_data_t* key_data); + + /** + * Get the key_state objects related to a key data object. + * \param[in] key_data a key_data_t pointer. + * \return a key_state_list_t pointer or NULL on error. + */ +-key_state_list_t* key_data_key_state_list(key_data_t* key_data); ++extern key_state_list_t* key_data_key_state_list(key_data_t* key_data); + + /** + * Retrieve key_state objects related to a key data object. +@@ -277,7 +277,7 @@ + * \param[in] key_data a key_data_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_retrieve_key_state_list(key_data_t* key_data); ++extern int key_data_retrieve_key_state_list(key_data_t* key_data); + + /** + * Set the zone_id of a key data object. If this fails the original value may have been lost. +@@ -285,7 +285,7 @@ + * \param[in] zone_id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_set_zone_id(key_data_t* key_data, const db_value_t* zone_id); ++extern int key_data_set_zone_id(key_data_t* key_data, const db_value_t* zone_id); + + /** + * Set the hsm_key_id of a key data object. If this fails the original value may have been lost. +@@ -293,7 +293,7 @@ + * \param[in] hsm_key_id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_set_hsm_key_id(key_data_t* key_data, const db_value_t* hsm_key_id); ++extern int key_data_set_hsm_key_id(key_data_t* key_data, const db_value_t* hsm_key_id); + + /** + * Set the algorithm of a key data object. +@@ -301,7 +301,7 @@ + * \param[in] algorithm an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_set_algorithm(key_data_t* key_data, unsigned int algorithm); ++extern int key_data_set_algorithm(key_data_t* key_data, unsigned int algorithm); + + /** + * Set the inception of a key data object. +@@ -309,7 +309,7 @@ + * \param[in] inception an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_set_inception(key_data_t* key_data, unsigned int inception); ++extern int key_data_set_inception(key_data_t* key_data, unsigned int inception); + + /** + * Set the role of a key data object. +@@ -317,7 +317,7 @@ + * \param[in] role a key_data_role_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_set_role(key_data_t* key_data, key_data_role_t role); ++extern int key_data_set_role(key_data_t* key_data, key_data_role_t role); + + /** + * Set the introducing of a key data object. +@@ -325,7 +325,7 @@ + * \param[in] introducing an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_set_introducing(key_data_t* key_data, unsigned int introducing); ++extern int key_data_set_introducing(key_data_t* key_data, unsigned int introducing); + + /** + * Set the active_zsk of a key data object. +@@ -333,7 +333,7 @@ + * \param[in] active_zsk an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_set_active_zsk(key_data_t* key_data, unsigned int active_zsk); ++extern int key_data_set_active_zsk(key_data_t* key_data, unsigned int active_zsk); + + /** + * Set the publish of a key data object. +@@ -341,7 +341,7 @@ + * \param[in] publish an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_set_publish(key_data_t* key_data, unsigned int publish); ++extern int key_data_set_publish(key_data_t* key_data, unsigned int publish); + + /** + * Set the active_ksk of a key data object. +@@ -349,7 +349,7 @@ + * \param[in] active_ksk an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_set_active_ksk(key_data_t* key_data, unsigned int active_ksk); ++extern int key_data_set_active_ksk(key_data_t* key_data, unsigned int active_ksk); + + /** + * Set the ds_at_parent of a key data object. +@@ -357,7 +357,7 @@ + * \param[in] ds_at_parent a key_data_ds_at_parent_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_set_ds_at_parent(key_data_t* key_data, key_data_ds_at_parent_t ds_at_parent); ++extern int key_data_set_ds_at_parent(key_data_t* key_data, key_data_ds_at_parent_t ds_at_parent); + + /** + * Set the keytag of a key data object. +@@ -365,7 +365,7 @@ + * \param[in] keytag an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_set_keytag(key_data_t* key_data, unsigned int keytag); ++extern int key_data_set_keytag(key_data_t* key_data, unsigned int keytag); + + /** + * Set the minimize of a key data object. +@@ -373,7 +373,7 @@ + * \param[in] minimize an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_set_minimize(key_data_t* key_data, unsigned int minimize); ++extern int key_data_set_minimize(key_data_t* key_data, unsigned int minimize); + + /** + * Create a clause for zone_id of a key data object and add it to a database clause list. +@@ -384,7 +384,7 @@ + * \param[in] zone_id a db_value_t pointer. + * \return a db_clause_t pointer to the added clause or NULL on error. + */ +-db_clause_t* key_data_zone_id_clause(db_clause_list_t* clause_list, const db_value_t* zone_id); ++extern db_clause_t* key_data_zone_id_clause(db_clause_list_t* clause_list, const db_value_t* zone_id); + + /** + * Create a clause for hsm_key_id of a key data object and add it to a database clause list. +@@ -395,7 +395,7 @@ + * \param[in] hsm_key_id a db_value_t pointer. + * \return a db_clause_t pointer to the added clause or NULL on error. + */ +-db_clause_t* key_data_hsm_key_id_clause(db_clause_list_t* clause_list, const db_value_t* hsm_key_id); ++extern db_clause_t* key_data_hsm_key_id_clause(db_clause_list_t* clause_list, const db_value_t* hsm_key_id); + + /** + * Create a clause for role of a key data object and add it to a database clause list. +@@ -406,7 +406,7 @@ + * \param[in] role a key_data_role_t. + * \return a db_clause_t pointer to the added clause or NULL on error. + */ +-db_clause_t* key_data_role_clause(db_clause_list_t* clause_list, key_data_role_t role); ++extern db_clause_t* key_data_role_clause(db_clause_list_t* clause_list, key_data_role_t role); + + /** + * Create a clause for ds_at_parent of a key data object and add it to a database clause list. +@@ -417,7 +417,7 @@ + * \param[in] ds_at_parent a key_data_ds_at_parent_t. + * \return a db_clause_t pointer to the added clause or NULL on error. + */ +-db_clause_t* key_data_ds_at_parent_clause(db_clause_list_t* clause_list, key_data_ds_at_parent_t ds_at_parent); ++extern db_clause_t* key_data_ds_at_parent_clause(db_clause_list_t* clause_list, key_data_ds_at_parent_t ds_at_parent); + + /** + * Create a clause for keytag of a key data object and add it to a database clause list. +@@ -428,14 +428,14 @@ + * \param[in] keytag an unsigned integer. + * \return a db_clause_t pointer to the added clause or NULL on error. + */ +-db_clause_t* key_data_keytag_clause(db_clause_list_t* clause_list, unsigned int keytag); ++extern db_clause_t* key_data_keytag_clause(db_clause_list_t* clause_list, unsigned int keytag); + + /** + * Create a key data object in the database. + * \param[in] key_data a key_data_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_create(key_data_t* key_data); ++extern int key_data_create(key_data_t* key_data); + + /** + * Get a key data object from the database by a id specified in `id`. +@@ -443,21 +443,21 @@ + * \param[in] id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_get_by_id(key_data_t* key_data, const db_value_t* id); ++extern int key_data_get_by_id(key_data_t* key_data, const db_value_t* id); + + /** + * Update a key data object in the database. + * \param[in] key_data a key_data_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_update(key_data_t* key_data); ++extern int key_data_update(key_data_t* key_data); + + /** + * Delete a key data object from the database. + * \param[in] key_data a key_data_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_delete(key_data_t* key_data); ++extern int key_data_delete(key_data_t* key_data); + + /** + * Count the number of key data objects in the database, if a selection of +@@ -469,7 +469,7 @@ + * should be counted. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_count(key_data_t* key_data, db_clause_list_t* clause_list, size_t* count); ++extern int key_data_count(key_data_t* key_data, db_clause_list_t* clause_list, size_t* count); + + /** + * A list of key data objects. +@@ -494,14 +494,14 @@ + * \param[in] connection a db_connection_t pointer. + * \return a key_data_list_t pointer or NULL on error. + */ +-key_data_list_t* key_data_list_new(const db_connection_t* connection); ++extern key_data_list_t* key_data_list_new(const db_connection_t* connection); + + /** + * Create a new key data object list that is a copy of another. + * \param[in] key_data_list a key_data_list_t pointer. + * \return a key_data_list_t pointer or NULL on error. + */ +-key_data_list_t* key_data_list_new_copy(const key_data_list_t* key_data_copy); ++extern key_data_list_t* key_data_list_new_copy(const key_data_list_t* key_data_copy); + + /** + * Specify that objects should be stored within the list as they are fetch, +@@ -509,13 +509,13 @@ + * \param[in] key_data_list a key_data_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_list_object_store(key_data_list_t* key_data_list); ++extern int key_data_list_object_store(key_data_list_t* key_data_list); + + /** + * Delete a key data object list. + * \param[in] key_data_list a key_data_list_t pointer. + */ +-void key_data_list_free(key_data_list_t* key_data_list); ++extern void key_data_list_free(key_data_list_t* key_data_list); + + /** + * Copy the content of another key data object list. +@@ -523,21 +523,21 @@ + * \param[in] from_key_data_list a key_data_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_list_copy(key_data_list_t* key_data_list, const key_data_list_t* from_key_data_list); ++extern int key_data_list_copy(key_data_list_t* key_data_list, const key_data_list_t* from_key_data_list); + + /** + * Get all key data objects. + * \param[in] key_data_list a key_data_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_list_get(key_data_list_t* key_data_list); ++extern int key_data_list_get(key_data_list_t* key_data_list); + + /** + * Get a new list with all key data objects. + * \param[in] connection a db_connection_t pointer. + * \return a key_data_list_t pointer or NULL on error. + */ +-key_data_list_t* key_data_list_new_get(const db_connection_t* connection); ++extern key_data_list_t* key_data_list_new_get(const db_connection_t* connection); + + /** + * Get key data objects from the database by a clause list. +@@ -545,7 +545,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_list_get_by_clauses(key_data_list_t* key_data_list, const db_clause_list_t* clause_list); ++extern int key_data_list_get_by_clauses(key_data_list_t* key_data_list, const db_clause_list_t* clause_list); + + /** + * Get a new list of key data objects from the database by a clause list. +@@ -553,7 +553,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return a key_data_list_t pointer or NULL on error. + */ +-key_data_list_t* key_data_list_new_get_by_clauses(const db_connection_t* connection, const db_clause_list_t* clause_list); ++extern key_data_list_t* key_data_list_new_get_by_clauses(const db_connection_t* connection, const db_clause_list_t* clause_list); + + /** + * Get key data objects from the database by a zone_id specified in `zone_id`. +@@ -561,7 +561,7 @@ + * \param[in] zone_id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_data_list_get_by_zone_id(key_data_list_t* key_data_list, const db_value_t* zone_id); ++extern int key_data_list_get_by_zone_id(key_data_list_t* key_data_list, const db_value_t* zone_id); + + /** + * Get a new list of key data objects from the database by a zone_id specified in `zone_id`. +@@ -569,7 +569,7 @@ + * \param[in] zone_id a db_value_t pointer. + * \return a key_data_list_t pointer or NULL on error. + */ +-key_data_list_t* key_data_list_new_get_by_zone_id(const db_connection_t* connection, const db_value_t* zone_id); ++extern key_data_list_t* key_data_list_new_get_by_zone_id(const db_connection_t* connection, const db_value_t* zone_id); + + /** + * Get the first key data object in a key data object list and reset the +@@ -578,7 +578,7 @@ + * \return a key_data_t pointer or NULL on error or if there are no + * key data objects in the key data object list. + */ +-const key_data_t* key_data_list_begin(key_data_list_t* key_data_list); ++extern const key_data_t* key_data_list_begin(key_data_list_t* key_data_list); + + /** + * Get the first key data object in a key data object list and reset the +@@ -588,7 +588,7 @@ + * \return a key_data_t pointer or NULL on error or if there are no + * key data objects in the key data object list. + */ +-key_data_t* key_data_list_get_begin(key_data_list_t* key_data_list); ++extern key_data_t* key_data_list_get_begin(key_data_list_t* key_data_list); + + /** + * Get the next key data object in a key data object list. +@@ -598,7 +598,7 @@ + * \return a key_data_t pointer or NULL on error or if there are no more + * key data objects in the key data object list. + */ +-const key_data_t* key_data_list_next(key_data_list_t* key_data_list); ++extern const key_data_t* key_data_list_next(key_data_list_t* key_data_list); + + /** + * Get the next key data object in a key data object list. +@@ -608,7 +608,7 @@ + * \return a key_data_t pointer or NULL on error or if there are no more + * key data objects in the key data object list. + */ +-key_data_t* key_data_list_get_next(key_data_list_t* key_data_list); ++extern key_data_t* key_data_list_get_next(key_data_list_t* key_data_list); + + /** + * Get the size of a key data object list. +@@ -616,9 +616,9 @@ + * \return a size_t with the size of the list or zero on error, if the list is + * empty or if the backend does not support returning the size. + */ +-size_t key_data_list_size(key_data_list_t* key_data_list); ++extern size_t key_data_list_size(key_data_list_t* key_data_list); + +-key_data_t* key_data_new_get_by_hsm_key_id (const db_connection_t* connection, const db_value_t* hsm_key_id); ++extern key_data_t* key_data_new_get_by_hsm_key_id (const db_connection_t* connection, const db_value_t* hsm_key_id); + +-int key_data_get_by_hsm_key_id (key_data_t* key_data, const db_value_t* hsm_key_id); ++extern int key_data_get_by_hsm_key_id (key_data_t* key_data, const db_value_t* hsm_key_id); + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/key_dependency.h opendnssec-2.1.6/enforcer/src/db/key_dependency.h +--- opendnssec-2.1.6-orig/enforcer/src/db/key_dependency.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/key_dependency.h 2020-02-18 23:08:38.112360658 -0500 +@@ -74,20 +74,20 @@ + * \param[in] connection a db_connection_t pointer. + * \return a key_dependency_t pointer or NULL on error. + */ +-key_dependency_t* key_dependency_new(const db_connection_t* connection); ++extern key_dependency_t* key_dependency_new(const db_connection_t* connection); + + /** + * Create a new key dependency object that is a copy of another key dependency object. + * \param[in] key_dependency a key_dependency_t pointer. + * \return a key_dependency_t pointer or NULL on error. + */ +-key_dependency_t* key_dependency_new_copy(const key_dependency_t* key_dependency); ++extern key_dependency_t* key_dependency_new_copy(const key_dependency_t* key_dependency); + + /** + * Delete a key dependency object, this does not delete it from the database. + * \param[in] key_dependency a key_dependency_t pointer. + */ +-void key_dependency_free(key_dependency_t* key_dependency); ++extern void key_dependency_free(key_dependency_t* key_dependency); + + /** + * Copy the content of a key dependency object. +@@ -95,7 +95,7 @@ + * \param[in] key_dependency_copy a key_dependency_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_dependency_copy(key_dependency_t* key_dependency, const key_dependency_t* key_dependency_copy); ++extern int key_dependency_copy(key_dependency_t* key_dependency, const key_dependency_t* key_dependency_copy); + + /** + * Set the content of a key dependency object based on a database result. +@@ -103,21 +103,21 @@ + * \param[in] result a db_result_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_dependency_from_result(key_dependency_t* key_dependency, const db_result_t* result); ++extern int key_dependency_from_result(key_dependency_t* key_dependency, const db_result_t* result); + + /** + * Get the zone_id of a key dependency object. + * \param[in] key_dependency a key_dependency_t pointer. + * \return a db_value_t pointer or NULL on error. + */ +-const db_value_t* key_dependency_zone_id(const key_dependency_t* key_dependency); ++extern const db_value_t* key_dependency_zone_id(const key_dependency_t* key_dependency); + + /** + * Get the from_key_data_id of a key dependency object. + * \param[in] key_dependency a key_dependency_t pointer. + * \return a db_value_t pointer or NULL on error. + */ +-const db_value_t* key_dependency_from_key_data_id(const key_dependency_t* key_dependency); ++extern const db_value_t* key_dependency_from_key_data_id(const key_dependency_t* key_dependency); + + /** + * Get the from_key_data_id object related to a key dependency object. +@@ -125,21 +125,21 @@ + * \param[in] key_dependency a key_dependency_t pointer. + * \return a key_data_t pointer or NULL on error or if no object could be found. + */ +-key_data_t* key_dependency_get_from_key_data(const key_dependency_t* key_dependency); ++extern key_data_t* key_dependency_get_from_key_data(const key_dependency_t* key_dependency); + + /** + * Get the to_key_data_id of a key dependency object. + * \param[in] key_dependency a key_dependency_t pointer. + * \return a db_value_t pointer or NULL on error. + */ +-const db_value_t* key_dependency_to_key_data_id(const key_dependency_t* key_dependency); ++extern const db_value_t* key_dependency_to_key_data_id(const key_dependency_t* key_dependency); + + /** + * Get the type of a key dependency object. + * \param[in] key_dependency a key_dependency_t pointer. + * \return a key_dependency_type_t which may be KEY_DEPENDENCY_TYPE_INVALID on error or if no type has been set. + */ +-key_dependency_type_t key_dependency_type(const key_dependency_t* key_dependency); ++extern key_dependency_type_t key_dependency_type(const key_dependency_t* key_dependency); + + /** + * Set the zone_id of a key dependency object. If this fails the original value may have been lost. +@@ -147,7 +147,7 @@ + * \param[in] zone_id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_dependency_set_zone_id(key_dependency_t* key_dependency, const db_value_t* zone_id); ++extern int key_dependency_set_zone_id(key_dependency_t* key_dependency, const db_value_t* zone_id); + + /** + * Set the from_key_data_id of a key dependency object. If this fails the original value may have been lost. +@@ -155,7 +155,7 @@ + * \param[in] from_key_data_id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_dependency_set_from_key_data_id(key_dependency_t* key_dependency, const db_value_t* from_key_data_id); ++extern int key_dependency_set_from_key_data_id(key_dependency_t* key_dependency, const db_value_t* from_key_data_id); + + /** + * Set the to_key_data_id of a key dependency object. If this fails the original value may have been lost. +@@ -163,7 +163,7 @@ + * \param[in] to_key_data_id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_dependency_set_to_key_data_id(key_dependency_t* key_dependency, const db_value_t* to_key_data_id); ++extern int key_dependency_set_to_key_data_id(key_dependency_t* key_dependency, const db_value_t* to_key_data_id); + + /** + * Set the type of a key dependency object. +@@ -171,14 +171,14 @@ + * \param[in] type a key_dependency_type_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_dependency_set_type(key_dependency_t* key_dependency, key_dependency_type_t type); ++extern int key_dependency_set_type(key_dependency_t* key_dependency, key_dependency_type_t type); + + /** + * Create a key dependency object in the database. + * \param[in] key_dependency a key_dependency_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_dependency_create(key_dependency_t* key_dependency); ++extern int key_dependency_create(key_dependency_t* key_dependency); + + /** + * Get a key dependency object from the database by a id specified in `id`. +@@ -186,14 +186,14 @@ + * \param[in] id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_dependency_get_by_id(key_dependency_t* key_dependency, const db_value_t* id); ++extern int key_dependency_get_by_id(key_dependency_t* key_dependency, const db_value_t* id); + + /** + * Delete a key dependency object from the database. + * \param[in] key_dependency a key_dependency_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_dependency_delete(key_dependency_t* key_dependency); ++extern int key_dependency_delete(key_dependency_t* key_dependency); + + /** + * A list of key dependency objects. +@@ -219,14 +219,14 @@ + * \param[in] connection a db_connection_t pointer. + * \return a key_dependency_list_t pointer or NULL on error. + */ +-key_dependency_list_t* key_dependency_list_new(const db_connection_t* connection); ++extern key_dependency_list_t* key_dependency_list_new(const db_connection_t* connection); + + /** + * Create a new key dependency object list that is a copy of another. + * \param[in] key_dependency_list a key_dependency_list_t pointer. + * \return a key_dependency_list_t pointer or NULL on error. + */ +-key_dependency_list_t* key_dependency_list_new_copy(const key_dependency_list_t* key_dependency_copy); ++extern key_dependency_list_t* key_dependency_list_new_copy(const key_dependency_list_t* key_dependency_copy); + + /** + * Specify that objects should be stored within the list as they are fetch, +@@ -234,13 +234,13 @@ + * \param[in] key_dependency_list a key_dependency_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_dependency_list_object_store(key_dependency_list_t* key_dependency_list); ++extern int key_dependency_list_object_store(key_dependency_list_t* key_dependency_list); + + /** + * Delete a key dependency object list. + * \param[in] key_dependency_list a key_dependency_list_t pointer. + */ +-void key_dependency_list_free(key_dependency_list_t* key_dependency_list); ++extern void key_dependency_list_free(key_dependency_list_t* key_dependency_list); + + /** + * Copy the content of another key dependency object list. +@@ -248,7 +248,7 @@ + * \param[in] from_key_dependency_list a key_dependency_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_dependency_list_copy(key_dependency_list_t* key_dependency_list, const key_dependency_list_t* from_key_dependency_list); ++extern int key_dependency_list_copy(key_dependency_list_t* key_dependency_list, const key_dependency_list_t* from_key_dependency_list); + + /** + * Get key dependency objects from the database by a clause list. +@@ -256,7 +256,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_dependency_list_get_by_clauses(key_dependency_list_t* key_dependency_list, const db_clause_list_t* clause_list); ++extern int key_dependency_list_get_by_clauses(key_dependency_list_t* key_dependency_list, const db_clause_list_t* clause_list); + + /** + * Get key dependency objects from the database by a zone_id specified in `zone_id`. +@@ -264,7 +264,7 @@ + * \param[in] zone_id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_dependency_list_get_by_zone_id(key_dependency_list_t* key_dependency_list, const db_value_t* zone_id); ++extern int key_dependency_list_get_by_zone_id(key_dependency_list_t* key_dependency_list, const db_value_t* zone_id); + + /** + * Get a new list of key dependency objects from the database by a zone_id specified in `zone_id`. +@@ -272,7 +272,7 @@ + * \param[in] zone_id a db_value_t pointer. + * \return a key_dependency_list_t pointer or NULL on error. + */ +-key_dependency_list_t* key_dependency_list_new_get_by_zone_id(const db_connection_t* connection, const db_value_t* zone_id); ++extern key_dependency_list_t* key_dependency_list_new_get_by_zone_id(const db_connection_t* connection, const db_value_t* zone_id); + + /** + * Get the first key dependency object in a key dependency object list and reset the +@@ -281,7 +281,7 @@ + * \return a key_dependency_t pointer or NULL on error or if there are no + * key dependency objects in the key dependency object list. + */ +-const key_dependency_t* key_dependency_list_begin(key_dependency_list_t* key_dependency_list); ++extern const key_dependency_t* key_dependency_list_begin(key_dependency_list_t* key_dependency_list); + + /** + * Get the first key dependency object in a key dependency object list and reset the +@@ -291,7 +291,7 @@ + * \return a key_dependency_t pointer or NULL on error or if there are no + * key dependency objects in the key dependency object list. + */ +-key_dependency_t* key_dependency_list_get_begin(key_dependency_list_t* key_dependency_list); ++extern key_dependency_t* key_dependency_list_get_begin(key_dependency_list_t* key_dependency_list); + + /** + * Get the next key dependency object in a key dependency object list. +@@ -301,7 +301,7 @@ + * \return a key_dependency_t pointer or NULL on error or if there are no more + * key dependency objects in the key dependency object list. + */ +-const key_dependency_t* key_dependency_list_next(key_dependency_list_t* key_dependency_list); ++extern const key_dependency_t* key_dependency_list_next(key_dependency_list_t* key_dependency_list); + + /** + * Get the next key dependency object in a key dependency object list. +@@ -311,7 +311,7 @@ + * \return a key_dependency_t pointer or NULL on error or if there are no more + * key dependency objects in the key dependency object list. + */ +-key_dependency_t* key_dependency_list_get_next(key_dependency_list_t* key_dependency_list); ++extern key_dependency_t* key_dependency_list_get_next(key_dependency_list_t* key_dependency_list); + + /** + * Get the size of a key dependency object list. +@@ -319,6 +319,6 @@ + * \return a size_t with the size of the list or zero on error, if the list is + * empty or if the backend does not support returning the size. + */ +-size_t key_dependency_list_size(key_dependency_list_t* key_dependency_list); ++extern size_t key_dependency_list_size(key_dependency_list_t* key_dependency_list); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/key_state.h opendnssec-2.1.6/enforcer/src/db/key_state.h +--- opendnssec-2.1.6-orig/enforcer/src/db/key_state.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/key_state.h 2020-02-18 23:08:38.112360658 -0500 +@@ -81,20 +81,20 @@ + * \param[in] connection a db_connection_t pointer. + * \return a key_state_t pointer or NULL on error. + */ +-key_state_t* key_state_new(const db_connection_t* connection); ++extern key_state_t* key_state_new(const db_connection_t* connection); + + /** + * Create a new key state object that is a copy of another key state object. + * \param[in] key_state a key_state_t pointer. + * \return a key_state_t pointer or NULL on error. + */ +-key_state_t* key_state_new_copy(const key_state_t* key_state); ++extern key_state_t* key_state_new_copy(const key_state_t* key_state); + + /** + * Delete a key state object, this does not delete it from the database. + * \param[in] key_state a key_state_t pointer. + */ +-void key_state_free(key_state_t* key_state); ++extern void key_state_free(key_state_t* key_state); + + /** + * Copy the content of a key state object. +@@ -102,7 +102,7 @@ + * \param[in] key_state_copy a key_state_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_state_copy(key_state_t* key_state, const key_state_t* key_state_copy); ++extern int key_state_copy(key_state_t* key_state, const key_state_t* key_state_copy); + + /** + * Set the content of a key state object based on a database result. +@@ -110,63 +110,63 @@ + * \param[in] result a db_result_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_state_from_result(key_state_t* key_state, const db_result_t* result); ++extern int key_state_from_result(key_state_t* key_state, const db_result_t* result); + + /** + * Get the key_data_id of a key state object. + * \param[in] key_state a key_state_t pointer. + * \return a db_value_t pointer or NULL on error. + */ +-const db_value_t* key_state_key_data_id(const key_state_t* key_state); ++extern const db_value_t* key_state_key_data_id(const key_state_t* key_state); + + /** + * Get the type of a key state object. + * \param[in] key_state a key_state_t pointer. + * \return a key_state_type_t which may be KEY_STATE_TYPE_INVALID on error or if no type has been set. + */ +-key_state_type_t key_state_type(const key_state_t* key_state); ++extern key_state_type_t key_state_type(const key_state_t* key_state); + + /** + * Get the type as text of a key state object. + * \param[in] key_state a key_state_t pointer. + * \return a character pointer or NULL on error or if no type has been set. + */ +-const char* key_state_type_text(const key_state_t* key_state); ++extern const char* key_state_type_text(const key_state_t* key_state); + + /** + * Get the state of a key state object. + * \param[in] key_state a key_state_t pointer. + * \return a key_state_state_t which may be KEY_STATE_STATE_INVALID on error or if no state has been set. + */ +-key_state_state_t key_state_state(const key_state_t* key_state); ++extern key_state_state_t key_state_state(const key_state_t* key_state); + + /** + * Get the state as text of a key state object. + * \param[in] key_state a key_state_t pointer. + * \return a character pointer or NULL on error or if no state has been set. + */ +-const char* key_state_state_text(const key_state_t* key_state); ++extern const char* key_state_state_text(const key_state_t* key_state); + + /** + * Get the last_change of a key state object. Undefined behavior if `key_state` is NULL. + * \param[in] key_state a key_state_t pointer. + * \return an unsigned integer. + */ +-unsigned int key_state_last_change(const key_state_t* key_state); ++extern unsigned int key_state_last_change(const key_state_t* key_state); + + /** + * Get the minimize of a key state object. Undefined behavior if `key_state` is NULL. + * \param[in] key_state a key_state_t pointer. + * \return an unsigned integer. + */ +-unsigned int key_state_minimize(const key_state_t* key_state); ++extern unsigned int key_state_minimize(const key_state_t* key_state); + + /** + * Get the ttl of a key state object. Undefined behavior if `key_state` is NULL. + * \param[in] key_state a key_state_t pointer. + * \return an unsigned integer. + */ +-unsigned int key_state_ttl(const key_state_t* key_state); ++extern unsigned int key_state_ttl(const key_state_t* key_state); + + /** + * Set the key_data_id of a key state object. If this fails the original value may have been lost. +@@ -174,7 +174,7 @@ + * \param[in] key_data_id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_state_set_key_data_id(key_state_t* key_state, const db_value_t* key_data_id); ++extern int key_state_set_key_data_id(key_state_t* key_state, const db_value_t* key_data_id); + + /** + * Set the type of a key state object. +@@ -182,7 +182,7 @@ + * \param[in] type a key_state_type_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_state_set_type(key_state_t* key_state, key_state_type_t type); ++extern int key_state_set_type(key_state_t* key_state, key_state_type_t type); + + /** + * Set the state of a key state object. +@@ -190,7 +190,7 @@ + * \param[in] state a key_state_state_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_state_set_state(key_state_t* key_state, key_state_state_t state); ++extern int key_state_set_state(key_state_t* key_state, key_state_state_t state); + + /** + * Set the last_change of a key state object. +@@ -198,7 +198,7 @@ + * \param[in] last_change an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_state_set_last_change(key_state_t* key_state, unsigned int last_change); ++extern int key_state_set_last_change(key_state_t* key_state, unsigned int last_change); + + /** + * Set the minimize of a key state object. +@@ -206,7 +206,7 @@ + * \param[in] minimize an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_state_set_minimize(key_state_t* key_state, unsigned int minimize); ++extern int key_state_set_minimize(key_state_t* key_state, unsigned int minimize); + + /** + * Set the ttl of a key state object. +@@ -214,7 +214,7 @@ + * \param[in] ttl an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_state_set_ttl(key_state_t* key_state, unsigned int ttl); ++extern int key_state_set_ttl(key_state_t* key_state, unsigned int ttl); + + /** + * Create a clause for key_data_id of a key state object and add it to a database clause list. +@@ -225,14 +225,14 @@ + * \param[in] key_data_id a db_value_t pointer. + * \return a db_clause_t pointer to the added clause or NULL on error. + */ +-db_clause_t* key_state_key_data_id_clause(db_clause_list_t* clause_list, const db_value_t* key_data_id); ++extern db_clause_t* key_state_key_data_id_clause(db_clause_list_t* clause_list, const db_value_t* key_data_id); + + /** + * Create a key state object in the database. + * \param[in] key_state a key_state_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_state_create(key_state_t* key_state); ++extern int key_state_create(key_state_t* key_state); + + /** + * Get a key state object from the database by a id specified in `id`. +@@ -240,21 +240,21 @@ + * \param[in] id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_state_get_by_id(key_state_t* key_state, const db_value_t* id); ++extern int key_state_get_by_id(key_state_t* key_state, const db_value_t* id); + + /** + * Update a key state object in the database. + * \param[in] key_state a key_state_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_state_update(key_state_t* key_state); ++extern int key_state_update(key_state_t* key_state); + + /** + * Delete a key state object from the database. + * \param[in] key_state a key_state_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_state_delete(const key_state_t* key_state); ++extern int key_state_delete(const key_state_t* key_state); + + /** + * A list of key state objects. +@@ -278,14 +278,14 @@ + * \param[in] connection a db_connection_t pointer. + * \return a key_state_list_t pointer or NULL on error. + */ +-key_state_list_t* key_state_list_new(const db_connection_t* connection); ++extern key_state_list_t* key_state_list_new(const db_connection_t* connection); + + /** + * Create a new key state object list that is a copy of another. + * \param[in] key_state_list a key_state_list_t pointer. + * \return a key_state_list_t pointer or NULL on error. + */ +-key_state_list_t* key_state_list_new_copy(const key_state_list_t* key_state_copy); ++extern key_state_list_t* key_state_list_new_copy(const key_state_list_t* key_state_copy); + + /** + * Specify that objects should be stored within the list as they are fetch, +@@ -293,13 +293,13 @@ + * \param[in] key_state_list a key_state_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_state_list_object_store(key_state_list_t* key_state_list); ++extern int key_state_list_object_store(key_state_list_t* key_state_list); + + /** + * Delete a key state object list. + * \param[in] key_state_list a key_state_list_t pointer. + */ +-void key_state_list_free(key_state_list_t* key_state_list); ++extern void key_state_list_free(key_state_list_t* key_state_list); + + /** + * Copy the content of another key state object list. +@@ -307,7 +307,7 @@ + * \param[in] from_key_state_list a key_state_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_state_list_copy(key_state_list_t* key_state_list, const key_state_list_t* from_key_state_list); ++extern int key_state_list_copy(key_state_list_t* key_state_list, const key_state_list_t* from_key_state_list); + + + /** +@@ -316,7 +316,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_state_list_get_by_clauses(key_state_list_t* key_state_list, const db_clause_list_t* clause_list); ++extern int key_state_list_get_by_clauses(key_state_list_t* key_state_list, const db_clause_list_t* clause_list); + + /** + * Get key state objects from the database by a key_data_id specified in `key_data_id`. +@@ -324,7 +324,7 @@ + * \param[in] key_data_id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int key_state_list_get_by_key_data_id(key_state_list_t* key_state_list, const db_value_t* key_data_id); ++extern int key_state_list_get_by_key_data_id(key_state_list_t* key_state_list, const db_value_t* key_data_id); + + /** + * Get a new list of key state objects from the database by a key_data_id specified in `key_data_id`. +@@ -332,7 +332,7 @@ + * \param[in] key_data_id a db_value_t pointer. + * \return a key_state_list_t pointer or NULL on error. + */ +-key_state_list_t* key_state_list_new_get_by_key_data_id(const db_connection_t* connection, const db_value_t* key_data_id); ++extern key_state_list_t* key_state_list_new_get_by_key_data_id(const db_connection_t* connection, const db_value_t* key_data_id); + + /** + * Get the first key state object in a key state object list and reset the +@@ -341,7 +341,7 @@ + * \return a key_state_t pointer or NULL on error or if there are no + * key state objects in the key state object list. + */ +-const key_state_t* key_state_list_begin(key_state_list_t* key_state_list); ++extern const key_state_t* key_state_list_begin(key_state_list_t* key_state_list); + + /** + * Get the first key state object in a key state object list and reset the +@@ -351,7 +351,7 @@ + * \return a key_state_t pointer or NULL on error or if there are no + * key state objects in the key state object list. + */ +-key_state_t* key_state_list_get_begin(key_state_list_t* key_state_list); ++extern key_state_t* key_state_list_get_begin(key_state_list_t* key_state_list); + + /** + * Get the next key state object in a key state object list. +@@ -361,7 +361,7 @@ + * \return a key_state_t pointer or NULL on error or if there are no more + * key state objects in the key state object list. + */ +-const key_state_t* key_state_list_next(key_state_list_t* key_state_list); ++extern const key_state_t* key_state_list_next(key_state_list_t* key_state_list); + + /** + * Get the next key state object in a key state object list. +@@ -371,6 +371,6 @@ + * \return a key_state_t pointer or NULL on error or if there are no more + * key state objects in the key state object list. + */ +-key_state_t* key_state_list_get_next(key_state_list_t* key_state_list); ++extern key_state_t* key_state_list_get_next(key_state_list_t* key_state_list); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/policy_ext.h opendnssec-2.1.6/enforcer/src/db/policy_ext.h +--- opendnssec-2.1.6-orig/enforcer/src/db/policy_ext.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/policy_ext.h 2020-02-18 23:08:38.112360658 -0500 +@@ -41,7 +41,7 @@ + * \param[in] policy_node a xmlNodePtr to the XML for the policy. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_create_from_xml(policy_t* policy, xmlNodePtr policy_node); ++extern int policy_create_from_xml(policy_t* policy, xmlNodePtr policy_node); + + /** + * Update a policy object from XML. +@@ -51,13 +51,13 @@ + * values in the policy was updated. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_update_from_xml(policy_t* policy, xmlNodePtr policy_node, int* updated); ++extern int policy_update_from_xml(policy_t* policy, xmlNodePtr policy_node, int* updated); + + /** + * Get the policy keys for a policy. + * \param[in] policy a policy_t object. + * \return a policy_key_list_t pointer or NULL on error. + */ +-policy_key_list_t* policy_get_policy_keys(const policy_t* policy); ++extern policy_key_list_t* policy_get_policy_keys(const policy_t* policy); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/policy.h opendnssec-2.1.6/enforcer/src/db/policy.h +--- opendnssec-2.1.6-orig/enforcer/src/db/policy.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/policy.h 2020-02-18 23:08:38.112360658 -0500 +@@ -107,20 +107,20 @@ + * \param[in] connection a db_connection_t pointer. + * \return a policy_t pointer or NULL on error. + */ +-policy_t* policy_new(const db_connection_t* connection); ++extern policy_t* policy_new(const db_connection_t* connection); + + /** + * Create a new policy object that is a copy of another policy object. + * \param[in] policy a policy_t pointer. + * \return a policy_t pointer or NULL on error. + */ +-policy_t* policy_new_copy(const policy_t* policy); ++extern policy_t* policy_new_copy(const policy_t* policy); + + /** + * Delete a policy object, this does not delete it from the database. + * \param[in] policy a policy_t pointer. + */ +-void policy_free(policy_t* policy); ++extern void policy_free(policy_t* policy); + + /** + * Copy the content of a policy object. +@@ -128,7 +128,7 @@ + * \param[in] policy_copy a policy_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_copy(policy_t* policy, const policy_t* policy_copy); ++extern int policy_copy(policy_t* policy, const policy_t* policy_copy); + + /** + * Set the content of a policy object based on a database result. +@@ -136,259 +136,259 @@ + * \param[in] result a db_result_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_from_result(policy_t* policy, const db_result_t* result); ++extern int policy_from_result(policy_t* policy, const db_result_t* result); + + /** + * Get the id of a policy object. + * \param[in] policy a policy_t pointer. + * \return a db_value_t pointer or NULL on error. + */ +-const db_value_t* policy_id(const policy_t* policy); ++extern const db_value_t* policy_id(const policy_t* policy); + + /** + * Get the name of a policy object. + * \param[in] policy a policy_t pointer. + * \return a character pointer or NULL on error or if no name has been set. + */ +-const char* policy_name(const policy_t* policy); ++extern const char* policy_name(const policy_t* policy); + + /** + * Get the passthrough of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_passthrough(const policy_t* policy); ++extern unsigned int policy_passthrough(const policy_t* policy); + + /** + * Get the description of a policy object. + * \param[in] policy a policy_t pointer. + * \return a character pointer or NULL on error or if no description has been set. + */ +-const char* policy_description(const policy_t* policy); ++extern const char* policy_description(const policy_t* policy); + + /** + * Get the signatures_resign of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_signatures_resign(const policy_t* policy); ++extern unsigned int policy_signatures_resign(const policy_t* policy); + + /** + * Get the signatures_refresh of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_signatures_refresh(const policy_t* policy); ++extern unsigned int policy_signatures_refresh(const policy_t* policy); + + /** + * Get the signatures_jitter of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_signatures_jitter(const policy_t* policy); ++extern unsigned int policy_signatures_jitter(const policy_t* policy); + + /** + * Get the signatures_inception_offset of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_signatures_inception_offset(const policy_t* policy); ++extern unsigned int policy_signatures_inception_offset(const policy_t* policy); + + /** + * Get the signatures_validity_default of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_signatures_validity_default(const policy_t* policy); ++extern unsigned int policy_signatures_validity_default(const policy_t* policy); + + /** + * Get the signatures_validity_denial of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_signatures_validity_denial(const policy_t* policy); ++extern unsigned int policy_signatures_validity_denial(const policy_t* policy); + + /** + * Get the signatures_validity_keyset of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_signatures_validity_keyset(const policy_t* policy); ++extern unsigned int policy_signatures_validity_keyset(const policy_t* policy); + + /** + * Get the signatures_max_zone_ttl of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_signatures_max_zone_ttl(const policy_t* policy); ++extern unsigned int policy_signatures_max_zone_ttl(const policy_t* policy); + + /** + * Get the denial_type of a policy object. + * \param[in] policy a policy_t pointer. + * \return a policy_denial_type_t which may be POLICY_DENIAL_TYPE_INVALID on error or if no denial_type has been set. + */ +-policy_denial_type_t policy_denial_type(const policy_t* policy); ++extern policy_denial_type_t policy_denial_type(const policy_t* policy); + + /** + * Get the denial_optout of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_denial_optout(const policy_t* policy); ++extern unsigned int policy_denial_optout(const policy_t* policy); + + /** + * Get the denial_ttl of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_denial_ttl(const policy_t* policy); ++extern unsigned int policy_denial_ttl(const policy_t* policy); + + /** + * Get the denial_resalt of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_denial_resalt(const policy_t* policy); ++extern unsigned int policy_denial_resalt(const policy_t* policy); + + /** + * Get the denial_algorithm of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_denial_algorithm(const policy_t* policy); ++extern unsigned int policy_denial_algorithm(const policy_t* policy); + + /** + * Get the denial_iterations of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_denial_iterations(const policy_t* policy); ++extern unsigned int policy_denial_iterations(const policy_t* policy); + + /** + * Get the denial_salt_length of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_denial_salt_length(const policy_t* policy); ++extern unsigned int policy_denial_salt_length(const policy_t* policy); + + /** + * Get the denial_salt of a policy object. + * \param[in] policy a policy_t pointer. + * \return a character pointer or NULL on error or if no denial_salt has been set. + */ +-const char* policy_denial_salt(const policy_t* policy); ++extern const char* policy_denial_salt(const policy_t* policy); + + /** + * Get the denial_salt_last_change of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_denial_salt_last_change(const policy_t* policy); ++extern unsigned int policy_denial_salt_last_change(const policy_t* policy); + + /** + * Get the keys_ttl of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_keys_ttl(const policy_t* policy); ++extern unsigned int policy_keys_ttl(const policy_t* policy); + + /** + * Get the keys_retire_safety of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_keys_retire_safety(const policy_t* policy); ++extern unsigned int policy_keys_retire_safety(const policy_t* policy); + + /** + * Get the keys_publish_safety of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_keys_publish_safety(const policy_t* policy); ++extern unsigned int policy_keys_publish_safety(const policy_t* policy); + + /** + * Get the keys_shared of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_keys_shared(const policy_t* policy); ++extern unsigned int policy_keys_shared(const policy_t* policy); + + /** + * Get the keys_purge_after of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_keys_purge_after(const policy_t* policy); ++extern unsigned int policy_keys_purge_after(const policy_t* policy); + + /** + * Get the zone_propagation_delay of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_zone_propagation_delay(const policy_t* policy); ++extern unsigned int policy_zone_propagation_delay(const policy_t* policy); + + /** + * Get the zone_soa_ttl of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_zone_soa_ttl(const policy_t* policy); ++extern unsigned int policy_zone_soa_ttl(const policy_t* policy); + + /** + * Get the zone_soa_minimum of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_zone_soa_minimum(const policy_t* policy); ++extern unsigned int policy_zone_soa_minimum(const policy_t* policy); + + /** + * Get the zone_soa_serial as text of a policy object. + * \param[in] policy a policy_t pointer. + * \return a character pointer or NULL on error or if no zone_soa_serial has been set. + */ +-const char* policy_zone_soa_serial_text(const policy_t* policy); ++extern const char* policy_zone_soa_serial_text(const policy_t* policy); + + /** + * Get the parent_registration_delay of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_parent_registration_delay(const policy_t* policy); ++extern unsigned int policy_parent_registration_delay(const policy_t* policy); + + /** + * Get the parent_propagation_delay of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_parent_propagation_delay(const policy_t* policy); ++extern unsigned int policy_parent_propagation_delay(const policy_t* policy); + + /** + * Get the parent_ds_ttl of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_parent_ds_ttl(const policy_t* policy); ++extern unsigned int policy_parent_ds_ttl(const policy_t* policy); + + /** + * Get the parent_soa_ttl of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_parent_soa_ttl(const policy_t* policy); ++extern unsigned int policy_parent_soa_ttl(const policy_t* policy); + + /** + * Get the parent_soa_minimum of a policy object. Undefined behavior if `policy` is NULL. + * \param[in] policy a policy_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_parent_soa_minimum(const policy_t* policy); ++extern unsigned int policy_parent_soa_minimum(const policy_t* policy); + + /** + * Get the zone objects related to a policy object. + * \param[in] policy a policy_t pointer. + * \return a zone_list_db_t pointer or NULL on error. + */ +-zone_list_db_t* policy_zone_list(policy_t* policy); ++extern zone_list_db_t* policy_zone_list(policy_t* policy); + + /** + * Retrieve zone objects related to a policy object. +@@ -397,7 +397,7 @@ + * \param[in] policy a policy_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_retrieve_zone_list(policy_t* policy); ++extern int policy_retrieve_zone_list(policy_t* policy); + + /** + * Set the name of a policy object. +@@ -405,7 +405,7 @@ + * \param[in] name_text a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_name(policy_t* policy, const char* name_text); ++extern int policy_set_name(policy_t* policy, const char* name_text); + + /** + * Set the passthrough of a policy object. +@@ -413,7 +413,7 @@ + * \param[in] passthrough an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_passthrough(policy_t* policy, unsigned int passthrough); ++extern int policy_set_passthrough(policy_t* policy, unsigned int passthrough); + + /** + * Set the description of a policy object. +@@ -421,7 +421,7 @@ + * \param[in] description_text a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_description(policy_t* policy, const char* description_text); ++extern int policy_set_description(policy_t* policy, const char* description_text); + + /** + * Set the signatures_resign of a policy object. +@@ -429,7 +429,7 @@ + * \param[in] signatures_resign an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_signatures_resign(policy_t* policy, unsigned int signatures_resign); ++extern int policy_set_signatures_resign(policy_t* policy, unsigned int signatures_resign); + + /** + * Set the signatures_refresh of a policy object. +@@ -437,7 +437,7 @@ + * \param[in] signatures_refresh an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_signatures_refresh(policy_t* policy, unsigned int signatures_refresh); ++extern int policy_set_signatures_refresh(policy_t* policy, unsigned int signatures_refresh); + + /** + * Set the signatures_jitter of a policy object. +@@ -445,7 +445,7 @@ + * \param[in] signatures_jitter an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_signatures_jitter(policy_t* policy, unsigned int signatures_jitter); ++extern int policy_set_signatures_jitter(policy_t* policy, unsigned int signatures_jitter); + + /** + * Set the signatures_inception_offset of a policy object. +@@ -453,7 +453,7 @@ + * \param[in] signatures_inception_offset an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_signatures_inception_offset(policy_t* policy, unsigned int signatures_inception_offset); ++extern int policy_set_signatures_inception_offset(policy_t* policy, unsigned int signatures_inception_offset); + + /** + * Set the signatures_validity_default of a policy object. +@@ -461,7 +461,7 @@ + * \param[in] signatures_validity_default an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_signatures_validity_default(policy_t* policy, unsigned int signatures_validity_default); ++extern int policy_set_signatures_validity_default(policy_t* policy, unsigned int signatures_validity_default); + + /** + * Set the signatures_validity_denial of a policy object. +@@ -469,7 +469,7 @@ + * \param[in] signatures_validity_denial an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_signatures_validity_denial(policy_t* policy, unsigned int signatures_validity_denial); ++extern int policy_set_signatures_validity_denial(policy_t* policy, unsigned int signatures_validity_denial); + + /** + * Set the signatures_validity_keyset of a policy object. +@@ -477,7 +477,7 @@ + * \param[in] signatures_validity_keyset an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_signatures_validity_keyset(policy_t* policy, unsigned int signatures_validity_keyset); ++extern int policy_set_signatures_validity_keyset(policy_t* policy, unsigned int signatures_validity_keyset); + + /** + * Set the signatures_max_zone_ttl of a policy object. +@@ -485,7 +485,7 @@ + * \param[in] signatures_max_zone_ttl an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_signatures_max_zone_ttl(policy_t* policy, unsigned int signatures_max_zone_ttl); ++extern int policy_set_signatures_max_zone_ttl(policy_t* policy, unsigned int signatures_max_zone_ttl); + + /** + * Set the denial_type of a policy object. +@@ -493,7 +493,7 @@ + * \param[in] denial_type a policy_denial_type_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_denial_type(policy_t* policy, policy_denial_type_t denial_type); ++extern int policy_set_denial_type(policy_t* policy, policy_denial_type_t denial_type); + + /** + * Set the denial_optout of a policy object. +@@ -501,7 +501,7 @@ + * \param[in] denial_optout an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_denial_optout(policy_t* policy, unsigned int denial_optout); ++extern int policy_set_denial_optout(policy_t* policy, unsigned int denial_optout); + + /** + * Set the denial_ttl of a policy object. +@@ -509,7 +509,7 @@ + * \param[in] denial_ttl an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_denial_ttl(policy_t* policy, unsigned int denial_ttl); ++extern int policy_set_denial_ttl(policy_t* policy, unsigned int denial_ttl); + + /** + * Set the denial_resalt of a policy object. +@@ -517,7 +517,7 @@ + * \param[in] denial_resalt an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_denial_resalt(policy_t* policy, unsigned int denial_resalt); ++extern int policy_set_denial_resalt(policy_t* policy, unsigned int denial_resalt); + + /** + * Set the denial_algorithm of a policy object. +@@ -525,7 +525,7 @@ + * \param[in] denial_algorithm an unsigned integer with a maximum value of 255. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_denial_algorithm(policy_t* policy, unsigned int denial_algorithm); ++extern int policy_set_denial_algorithm(policy_t* policy, unsigned int denial_algorithm); + + /** + * Set the denial_iterations of a policy object. +@@ -533,7 +533,7 @@ + * \param[in] denial_iterations an unsigned integer with a maximum value of 65535. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_denial_iterations(policy_t* policy, unsigned int denial_iterations); ++extern int policy_set_denial_iterations(policy_t* policy, unsigned int denial_iterations); + + /** + * Set the denial_salt_length of a policy object. +@@ -541,7 +541,7 @@ + * \param[in] denial_salt_length an unsigned integer with a maximum value of 255. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_denial_salt_length(policy_t* policy, unsigned int denial_salt_length); ++extern int policy_set_denial_salt_length(policy_t* policy, unsigned int denial_salt_length); + + /** + * Set the denial_salt of a policy object. +@@ -549,7 +549,7 @@ + * \param[in] denial_salt_text a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_denial_salt(policy_t* policy, const char* denial_salt_text); ++extern int policy_set_denial_salt(policy_t* policy, const char* denial_salt_text); + + /** + * Set the denial_salt_last_change of a policy object. +@@ -557,7 +557,7 @@ + * \param[in] denial_salt_last_change an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_denial_salt_last_change(policy_t* policy, unsigned int denial_salt_last_change); ++extern int policy_set_denial_salt_last_change(policy_t* policy, unsigned int denial_salt_last_change); + + /** + * Set the keys_ttl of a policy object. +@@ -565,7 +565,7 @@ + * \param[in] keys_ttl an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_keys_ttl(policy_t* policy, unsigned int keys_ttl); ++extern int policy_set_keys_ttl(policy_t* policy, unsigned int keys_ttl); + + /** + * Set the keys_retire_safety of a policy object. +@@ -573,7 +573,7 @@ + * \param[in] keys_retire_safety an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_keys_retire_safety(policy_t* policy, unsigned int keys_retire_safety); ++extern int policy_set_keys_retire_safety(policy_t* policy, unsigned int keys_retire_safety); + + /** + * Set the keys_publish_safety of a policy object. +@@ -581,7 +581,7 @@ + * \param[in] keys_publish_safety an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_keys_publish_safety(policy_t* policy, unsigned int keys_publish_safety); ++extern int policy_set_keys_publish_safety(policy_t* policy, unsigned int keys_publish_safety); + + /** + * Set the keys_shared of a policy object. +@@ -589,7 +589,7 @@ + * \param[in] keys_shared an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_keys_shared(policy_t* policy, unsigned int keys_shared); ++extern int policy_set_keys_shared(policy_t* policy, unsigned int keys_shared); + + /** + * Set the keys_purge_after of a policy object. +@@ -597,7 +597,7 @@ + * \param[in] keys_purge_after an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_keys_purge_after(policy_t* policy, unsigned int keys_purge_after); ++extern int policy_set_keys_purge_after(policy_t* policy, unsigned int keys_purge_after); + + /** + * Set the zone_propagation_delay of a policy object. +@@ -605,7 +605,7 @@ + * \param[in] zone_propagation_delay an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_zone_propagation_delay(policy_t* policy, unsigned int zone_propagation_delay); ++extern int policy_set_zone_propagation_delay(policy_t* policy, unsigned int zone_propagation_delay); + + /** + * Set the zone_soa_ttl of a policy object. +@@ -613,7 +613,7 @@ + * \param[in] zone_soa_ttl an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_zone_soa_ttl(policy_t* policy, unsigned int zone_soa_ttl); ++extern int policy_set_zone_soa_ttl(policy_t* policy, unsigned int zone_soa_ttl); + + /** + * Set the zone_soa_minimum of a policy object. +@@ -621,7 +621,7 @@ + * \param[in] zone_soa_minimum an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_zone_soa_minimum(policy_t* policy, unsigned int zone_soa_minimum); ++extern int policy_set_zone_soa_minimum(policy_t* policy, unsigned int zone_soa_minimum); + + /** + * Set the zone_soa_serial of a policy object from text. +@@ -629,7 +629,7 @@ + * \param[in] zone_soa_serial a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_zone_soa_serial_text(policy_t* policy, const char* zone_soa_serial); ++extern int policy_set_zone_soa_serial_text(policy_t* policy, const char* zone_soa_serial); + + /** + * Set the parent_registration_delay of a policy object. +@@ -637,7 +637,7 @@ + * \param[in] parent_registration_delay an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_parent_registration_delay(policy_t* policy, unsigned int parent_registration_delay); ++extern int policy_set_parent_registration_delay(policy_t* policy, unsigned int parent_registration_delay); + + /** + * Set the parent_propagation_delay of a policy object. +@@ -645,7 +645,7 @@ + * \param[in] parent_propagation_delay an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_parent_propagation_delay(policy_t* policy, unsigned int parent_propagation_delay); ++extern int policy_set_parent_propagation_delay(policy_t* policy, unsigned int parent_propagation_delay); + + /** + * Set the parent_ds_ttl of a policy object. +@@ -653,7 +653,7 @@ + * \param[in] parent_ds_ttl an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_parent_ds_ttl(policy_t* policy, unsigned int parent_ds_ttl); ++extern int policy_set_parent_ds_ttl(policy_t* policy, unsigned int parent_ds_ttl); + + /** + * Set the parent_soa_ttl of a policy object. +@@ -661,7 +661,7 @@ + * \param[in] parent_soa_ttl an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_parent_soa_ttl(policy_t* policy, unsigned int parent_soa_ttl); ++extern int policy_set_parent_soa_ttl(policy_t* policy, unsigned int parent_soa_ttl); + + /** + * Set the parent_soa_minimum of a policy object. +@@ -669,7 +669,7 @@ + * \param[in] parent_soa_minimum an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_set_parent_soa_minimum(policy_t* policy, unsigned int parent_soa_minimum); ++extern int policy_set_parent_soa_minimum(policy_t* policy, unsigned int parent_soa_minimum); + + /** + * Create a clause for denial_type of a policy object and add it to a database clause list. +@@ -680,14 +680,14 @@ + * \param[in] denial_type a policy_denial_type_t. + * \return a db_clause_t pointer to the added clause or NULL on error. + */ +-db_clause_t* policy_denial_type_clause(db_clause_list_t* clause_list, policy_denial_type_t denial_type); ++extern db_clause_t* policy_denial_type_clause(db_clause_list_t* clause_list, policy_denial_type_t denial_type); + + /** + * Create a policy object in the database. + * \param[in] policy a policy_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_create(policy_t* policy); ++extern int policy_create(policy_t* policy); + + /** + * Get a policy object from the database by a id specified in `id`. +@@ -695,7 +695,7 @@ + * \param[in] id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_get_by_id(policy_t* policy, const db_value_t* id); ++extern int policy_get_by_id(policy_t* policy, const db_value_t* id); + + /** + * Get a policy object from the database by a name specified in `name`. +@@ -703,7 +703,7 @@ + * \param[in] name a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_get_by_name(policy_t* policy, const char* name); ++extern int policy_get_by_name(policy_t* policy, const char* name); + + /** + * Get a new policy object from the database by a name specified in `name`. +@@ -711,21 +711,21 @@ + * \param[in] name a character pointer. + * \return a policy_t pointer or NULL on error or if it does not exist. + */ +-policy_t* policy_new_get_by_name(const db_connection_t* connection, const char* name); ++extern policy_t* policy_new_get_by_name(const db_connection_t* connection, const char* name); + + /** + * Update a policy object in the database. + * \param[in] policy a policy_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_update(policy_t* policy); ++extern int policy_update(policy_t* policy); + + /** + * Delete a policy object from the database. + * \param[in] policy a policy_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_delete(policy_t* policy); ++extern int policy_delete(policy_t* policy); + + /** + * A list of policy objects. +@@ -748,14 +748,14 @@ + * \param[in] connection a db_connection_t pointer. + * \return a policy_list_t pointer or NULL on error. + */ +-policy_list_t* policy_list_new(const db_connection_t* connection); ++extern policy_list_t* policy_list_new(const db_connection_t* connection); + + /** + * Create a new policy object list that is a copy of another. + * \param[in] policy_list a policy_list_t pointer. + * \return a policy_list_t pointer or NULL on error. + */ +-policy_list_t* policy_list_new_copy(const policy_list_t* policy_copy); ++extern policy_list_t* policy_list_new_copy(const policy_list_t* policy_copy); + + /** + * Specify that objects should be stored within the list as they are fetch, +@@ -763,13 +763,13 @@ + * \param[in] policy_list a policy_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_list_object_store(policy_list_t* policy_list); ++extern int policy_list_object_store(policy_list_t* policy_list); + + /** + * Delete a policy object list. + * \param[in] policy_list a policy_list_t pointer. + */ +-void policy_list_free(policy_list_t* policy_list); ++extern void policy_list_free(policy_list_t* policy_list); + + /** + * Copy the content of another policy object list. +@@ -777,21 +777,21 @@ + * \param[in] from_policy_list a policy_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_list_copy(policy_list_t* policy_list, const policy_list_t* from_policy_list); ++extern int policy_list_copy(policy_list_t* policy_list, const policy_list_t* from_policy_list); + + /** + * Get all policy objects. + * \param[in] policy_list a policy_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_list_get(policy_list_t* policy_list); ++extern int policy_list_get(policy_list_t* policy_list); + + /** + * Get a new list with all policy objects. + * \param[in] connection a db_connection_t pointer. + * \return a policy_list_t pointer or NULL on error. + */ +-policy_list_t* policy_list_new_get(const db_connection_t* connection); ++extern policy_list_t* policy_list_new_get(const db_connection_t* connection); + + /** + * Get policy objects from the database by a clause list. +@@ -799,7 +799,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_list_get_by_clauses(policy_list_t* policy_list, const db_clause_list_t* clause_list); ++extern int policy_list_get_by_clauses(policy_list_t* policy_list, const db_clause_list_t* clause_list); + + /** + * Get a new list of policy objects from the database by a clause list. +@@ -807,7 +807,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return a policy_list_t pointer or NULL on error. + */ +-policy_list_t* policy_list_new_get_by_clauses(const db_connection_t* connection, const db_clause_list_t* clause_list); ++extern policy_list_t* policy_list_new_get_by_clauses(const db_connection_t* connection, const db_clause_list_t* clause_list); + + /** + * Get the first policy object in a policy object list and reset the +@@ -816,7 +816,7 @@ + * \return a policy_t pointer or NULL on error or if there are no + * policy objects in the policy object list. + */ +-const policy_t* policy_list_begin(policy_list_t* policy_list); ++extern const policy_t* policy_list_begin(policy_list_t* policy_list); + + /** + * Get the next policy object in a policy object list. +@@ -826,7 +826,7 @@ + * \return a policy_t pointer or NULL on error or if there are no more + * policy objects in the policy object list. + */ +-const policy_t* policy_list_next(policy_list_t* policy_list); ++extern const policy_t* policy_list_next(policy_list_t* policy_list); + + /** + * Get the next policy object in a policy object list. +@@ -836,6 +836,6 @@ + * \return a policy_t pointer or NULL on error or if there are no more + * policy objects in the policy object list. + */ +-policy_t* policy_list_get_next(policy_list_t* policy_list); ++extern policy_t* policy_list_get_next(policy_list_t* policy_list); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/policy_key_ext.h opendnssec-2.1.6/enforcer/src/db/policy_key_ext.h +--- opendnssec-2.1.6-orig/enforcer/src/db/policy_key_ext.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/policy_key_ext.h 2020-02-18 23:08:38.113360672 -0500 +@@ -44,6 +44,6 @@ + * \param[in] key_node a xmlNodePtr to the XML for the policy key. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_create_from_xml(policy_key_t* policy_key, xmlNodePtr key_node); ++extern int policy_key_create_from_xml(policy_key_t* policy_key, xmlNodePtr key_node); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/policy_key.h opendnssec-2.1.6/enforcer/src/db/policy_key.h +--- opendnssec-2.1.6-orig/enforcer/src/db/policy_key.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/policy_key.h 2020-02-18 23:08:38.113360672 -0500 +@@ -74,26 +74,26 @@ + * \param[in] connection a db_connection_t pointer. + * \return a policy_key_t pointer or NULL on error. + */ +-policy_key_t* policy_key_new(const db_connection_t* connection); ++extern policy_key_t* policy_key_new(const db_connection_t* connection); + + /** + * Create a new policy key object that is a copy of another policy key object. + * \param[in] policy_key a policy_key_t pointer. + * \return a policy_key_t pointer or NULL on error. + */ +-policy_key_t* policy_key_new_copy(const policy_key_t* policy_key); ++extern policy_key_t* policy_key_new_copy(const policy_key_t* policy_key); + + /** + * Delete a policy key object, this does not delete it from the database. + * \param[in] policy_key a policy_key_t pointer. + */ +-void policy_key_free(policy_key_t* policy_key); ++extern void policy_key_free(policy_key_t* policy_key); + + /** + * Reset the content of a policy key object making it as if its new. This does not change anything in the database. + * \param[in] policy_key a policy_key_t pointer. + */ +-void policy_key_reset(policy_key_t* policy_key); ++extern void policy_key_reset(policy_key_t* policy_key); + + /** + * Copy the content of a policy key object. +@@ -101,7 +101,7 @@ + * \param[in] policy_key_copy a policy_key_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_copy(policy_key_t* policy_key, const policy_key_t* policy_key_copy); ++extern int policy_key_copy(policy_key_t* policy_key, const policy_key_t* policy_key_copy); + + /** + * Compare two policy key objects and return less than, equal to, +@@ -112,7 +112,7 @@ + * \return less than, equal to, or greater than zero if A is found, respectively, + * to be less than, to match, or be greater than B. + */ +-int policy_key_cmp(const policy_key_t* policy_key_a, const policy_key_t* policy_key_b); ++extern int policy_key_cmp(const policy_key_t* policy_key_a, const policy_key_t* policy_key_b); + + /** + * Set the content of a policy key object based on a database result. +@@ -120,21 +120,21 @@ + * \param[in] result a db_result_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_from_result(policy_key_t* policy_key, const db_result_t* result); ++extern int policy_key_from_result(policy_key_t* policy_key, const db_result_t* result); + + /** + * Get the policy_id of a policy key object. + * \param[in] policy_key a policy_key_t pointer. + * \return a db_value_t pointer or NULL on error. + */ +-const db_value_t* policy_key_policy_id(const policy_key_t* policy_key); ++extern const db_value_t* policy_key_policy_id(const policy_key_t* policy_key); + + /** + * Get the policy_id object related to a policy key object. + * \param[in] policy_key a policy_key_t pointer. + * \return a policy_t pointer or NULL on error or if no object could be found. + */ +-const policy_t* policy_key_policy(const policy_key_t* policy_key); ++extern const policy_t* policy_key_policy(const policy_key_t* policy_key); + + /** + * Get the policy_id object related to a policy key object. +@@ -142,77 +142,77 @@ + * \param[in] policy_key a policy_key_t pointer. + * \return a policy_t pointer or NULL on error or if no object could be found. + */ +-policy_t* policy_key_get_policy(const policy_key_t* policy_key); ++extern policy_t* policy_key_get_policy(const policy_key_t* policy_key); + + /** + * Get the role of a policy key object. + * \param[in] policy_key a policy_key_t pointer. + * \return a policy_key_role_t which may be POLICY_KEY_ROLE_INVALID on error or if no role has been set. + */ +-policy_key_role_t policy_key_role(const policy_key_t* policy_key); ++extern policy_key_role_t policy_key_role(const policy_key_t* policy_key); + + /** + * Get the role as text of a policy key object. + * \param[in] policy_key a policy_key_t pointer. + * \return a character pointer or NULL on error or if no role has been set. + */ +-const char* policy_key_role_text(const policy_key_t* policy_key); ++extern const char* policy_key_role_text(const policy_key_t* policy_key); + + /** + * Get the algorithm of a policy key object. Undefined behavior if `policy_key` is NULL. + * \param[in] policy_key a policy_key_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_key_algorithm(const policy_key_t* policy_key); ++extern unsigned int policy_key_algorithm(const policy_key_t* policy_key); + + /** + * Get the bits of a policy key object. Undefined behavior if `policy_key` is NULL. + * \param[in] policy_key a policy_key_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_key_bits(const policy_key_t* policy_key); ++extern unsigned int policy_key_bits(const policy_key_t* policy_key); + + /** + * Get the lifetime of a policy key object. Undefined behavior if `policy_key` is NULL. + * \param[in] policy_key a policy_key_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_key_lifetime(const policy_key_t* policy_key); ++extern unsigned int policy_key_lifetime(const policy_key_t* policy_key); + + /** + * Get the repository of a policy key object. + * \param[in] policy_key a policy_key_t pointer. + * \return a character pointer or NULL on error or if no repository has been set. + */ +-const char* policy_key_repository(const policy_key_t* policy_key); ++extern const char* policy_key_repository(const policy_key_t* policy_key); + + /** + * Get the standby of a policy key object. Undefined behavior if `policy_key` is NULL. + * \param[in] policy_key a policy_key_t pointer. + * \return an integer. + */ +-int policy_key_standby(const policy_key_t* policy_key); ++extern int policy_key_standby(const policy_key_t* policy_key); + + /** + * Get the manual_rollover of a policy key object. Undefined behavior if `policy_key` is NULL. + * \param[in] policy_key a policy_key_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_key_manual_rollover(const policy_key_t* policy_key); ++extern unsigned int policy_key_manual_rollover(const policy_key_t* policy_key); + + /** + * Get the rfc5011 of a policy key object. Undefined behavior if `policy_key` is NULL. + * \param[in] policy_key a policy_key_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_key_rfc5011(const policy_key_t* policy_key); ++extern unsigned int policy_key_rfc5011(const policy_key_t* policy_key); + + /** + * Get the minimize of a policy key object. Undefined behavior if `policy_key` is NULL. + * \param[in] policy_key a policy_key_t pointer. + * \return an unsigned integer. + */ +-unsigned int policy_key_minimize(const policy_key_t* policy_key); ++extern unsigned int policy_key_minimize(const policy_key_t* policy_key); + + /** + * Set the policy_id of a policy key object. If this fails the original value may have been lost. +@@ -220,7 +220,7 @@ + * \param[in] policy_id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_set_policy_id(policy_key_t* policy_key, const db_value_t* policy_id); ++extern int policy_key_set_policy_id(policy_key_t* policy_key, const db_value_t* policy_id); + + /** + * Set the role of a policy key object. +@@ -228,7 +228,7 @@ + * \param[in] role a policy_key_role_t. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_set_role(policy_key_t* policy_key, policy_key_role_t role); ++extern int policy_key_set_role(policy_key_t* policy_key, policy_key_role_t role); + + /** + * Set the algorithm of a policy key object. +@@ -236,7 +236,7 @@ + * \param[in] algorithm an unsigned integer with a maximum value of 255. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_set_algorithm(policy_key_t* policy_key, unsigned int algorithm); ++extern int policy_key_set_algorithm(policy_key_t* policy_key, unsigned int algorithm); + + /** + * Set the bits of a policy key object. +@@ -244,7 +244,7 @@ + * \param[in] bits an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_set_bits(policy_key_t* policy_key, unsigned int bits); ++extern int policy_key_set_bits(policy_key_t* policy_key, unsigned int bits); + + /** + * Set the lifetime of a policy key object. +@@ -252,7 +252,7 @@ + * \param[in] lifetime an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_set_lifetime(policy_key_t* policy_key, unsigned int lifetime); ++extern int policy_key_set_lifetime(policy_key_t* policy_key, unsigned int lifetime); + + /** + * Set the repository of a policy key object. +@@ -260,7 +260,7 @@ + * \param[in] repository_text a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_set_repository(policy_key_t* policy_key, const char* repository_text); ++extern int policy_key_set_repository(policy_key_t* policy_key, const char* repository_text); + + /** + * Set the standby of a policy key object. +@@ -268,7 +268,7 @@ + * \param[in] standby an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_set_standby(policy_key_t* policy_key, unsigned int standby); ++extern int policy_key_set_standby(policy_key_t* policy_key, unsigned int standby); + + /** + * Set the manual_rollover of a policy key object. +@@ -276,7 +276,7 @@ + * \param[in] manual_rollover an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_set_manual_rollover(policy_key_t* policy_key, unsigned int manual_rollover); ++extern int policy_key_set_manual_rollover(policy_key_t* policy_key, unsigned int manual_rollover); + + /** + * Set the rfc5011 of a policy key object. +@@ -284,7 +284,7 @@ + * \param[in] rfc5011 an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_set_rfc5011(policy_key_t* policy_key, unsigned int rfc5011); ++extern int policy_key_set_rfc5011(policy_key_t* policy_key, unsigned int rfc5011); + + /** + * Set the minimize of a policy key object. +@@ -292,14 +292,14 @@ + * \param[in] minimize an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_set_minimize(policy_key_t* policy_key, unsigned int minimize); ++extern int policy_key_set_minimize(policy_key_t* policy_key, unsigned int minimize); + + /** + * Create a policy key object in the database. + * \param[in] policy_key a policy_key_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_create(policy_key_t* policy_key); ++extern int policy_key_create(policy_key_t* policy_key); + + /** + * Get a policy key object from the database by a id specified in `id`. +@@ -307,14 +307,14 @@ + * \param[in] id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_get_by_id(policy_key_t* policy_key, const db_value_t* id); ++extern int policy_key_get_by_id(policy_key_t* policy_key, const db_value_t* id); + + /** + * Delete a policy key object from the database. + * \param[in] policy_key a policy_key_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_delete(policy_key_t* policy_key); ++extern int policy_key_delete(policy_key_t* policy_key); + + /** + * A list of policy key objects. +@@ -338,14 +338,14 @@ + * \param[in] connection a db_connection_t pointer. + * \return a policy_key_list_t pointer or NULL on error. + */ +-policy_key_list_t* policy_key_list_new(const db_connection_t* connection); ++extern policy_key_list_t* policy_key_list_new(const db_connection_t* connection); + + /** + * Create a new policy key object list that is a copy of another. + * \param[in] policy_key_list a policy_key_list_t pointer. + * \return a policy_key_list_t pointer or NULL on error. + */ +-policy_key_list_t* policy_key_list_new_copy(const policy_key_list_t* policy_key_copy); ++extern policy_key_list_t* policy_key_list_new_copy(const policy_key_list_t* policy_key_copy); + + /** + * Specify that objects should be stored within the list as they are fetch, +@@ -353,13 +353,13 @@ + * \param[in] policy_key_list a policy_key_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_list_object_store(policy_key_list_t* policy_key_list); ++extern int policy_key_list_object_store(policy_key_list_t* policy_key_list); + + /** + * Delete a policy key object list. + * \param[in] policy_key_list a policy_key_list_t pointer. + */ +-void policy_key_list_free(policy_key_list_t* policy_key_list); ++extern void policy_key_list_free(policy_key_list_t* policy_key_list); + + /** + * Copy the content of another policy key object list. +@@ -367,7 +367,7 @@ + * \param[in] from_policy_key_list a policy_key_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_list_copy(policy_key_list_t* policy_key_list, const policy_key_list_t* from_policy_key_list); ++extern int policy_key_list_copy(policy_key_list_t* policy_key_list, const policy_key_list_t* from_policy_key_list); + + /** + * Get policy key objects from the database by a clause list. +@@ -375,7 +375,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_list_get_by_clauses(policy_key_list_t* policy_key_list, const db_clause_list_t* clause_list); ++extern int policy_key_list_get_by_clauses(policy_key_list_t* policy_key_list, const db_clause_list_t* clause_list); + + /** + * Get policy key objects from the database by a policy_id specified in `policy_id`. +@@ -383,7 +383,7 @@ + * \param[in] policy_id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int policy_key_list_get_by_policy_id(policy_key_list_t* policy_key_list, const db_value_t* policy_id); ++extern int policy_key_list_get_by_policy_id(policy_key_list_t* policy_key_list, const db_value_t* policy_id); + + /** + * Get a new list of policy key objects from the database by a policy_id specified in `policy_id`. +@@ -391,7 +391,7 @@ + * \param[in] policy_id a db_value_t pointer. + * \return a policy_key_list_t pointer or NULL on error. + */ +-policy_key_list_t* policy_key_list_new_get_by_policy_id(const db_connection_t* connection, const db_value_t* policy_id); ++extern policy_key_list_t* policy_key_list_new_get_by_policy_id(const db_connection_t* connection, const db_value_t* policy_id); + + /** + * Get the first policy key object in a policy key object list and reset the +@@ -400,7 +400,7 @@ + * \return a policy_key_t pointer or NULL on error or if there are no + * policy key objects in the policy key object list. + */ +-const policy_key_t* policy_key_list_begin(policy_key_list_t* policy_key_list); ++extern const policy_key_t* policy_key_list_begin(policy_key_list_t* policy_key_list); + + /** + * Get the next policy key object in a policy key object list. +@@ -410,7 +410,7 @@ + * \return a policy_key_t pointer or NULL on error or if there are no more + * policy key objects in the policy key object list. + */ +-const policy_key_t* policy_key_list_next(policy_key_list_t* policy_key_list); ++extern const policy_key_t* policy_key_list_next(policy_key_list_t* policy_key_list); + + /** + * Get the next policy key object in a policy key object list. +@@ -420,7 +420,7 @@ + * \return a policy_key_t pointer or NULL on error or if there are no more + * policy key objects in the policy key object list. + */ +-policy_key_t* policy_key_list_get_next(policy_key_list_t* policy_key_list); ++extern policy_key_t* policy_key_list_get_next(policy_key_list_t* policy_key_list); + + /** + * Get the size of a policy key object list. +@@ -428,9 +428,9 @@ + * \return a size_t with the size of the list or zero on error, if the list is + * empty or if the backend does not support returning the size. + */ +-size_t policy_key_list_size(policy_key_list_t* policy_key_list); ++extern size_t policy_key_list_size(policy_key_list_t* policy_key_list); + +-policy_key_t * policy_key_new_get_by_policyid_and_role (const db_connection_t* connection, const db_value_t* policyid, const policy_key_role_t role); ++extern policy_key_t * policy_key_new_get_by_policyid_and_role (const db_connection_t* connection, const db_value_t* policyid, const policy_key_role_t role); + +-int policy_key_get_by_policyid_and_role(policy_key_t* policy_key, const db_value_t* policyid , const policy_key_role_t role); ++extern int policy_key_get_by_policyid_and_role(policy_key_t* policy_key, const db_value_t* policyid , const policy_key_role_t role); + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/test/test_database_version.h opendnssec-2.1.6/enforcer/src/db/test/test_database_version.h +--- opendnssec-2.1.6-orig/enforcer/src/db/test/test_database_version.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/test/test_database_version.h 2020-02-18 23:08:38.113360672 -0500 +@@ -30,6 +30,6 @@ + #ifndef __test_database_version_h + #define __test_database_version_h + +-int test_database_version_add_suite(void); ++extern int test_database_version_add_suite(void); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/test/test.h opendnssec-2.1.6/enforcer/src/db/test/test.h +--- opendnssec-2.1.6-orig/enforcer/src/db/test/test.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/test/test.h 2020-02-18 23:08:38.113360672 -0500 +@@ -32,53 +32,53 @@ + #ifndef __test_test_h + #define __test_test_h + +-int init_suite_classes(void); +-int clean_suite_classes(void); +-void test_class_db_backend_handle(void); +-void test_class_db_backend(void); +-void test_class_db_clause(void); +-void test_class_db_clause_list(void); +-void test_class_db_configuration(void); +-void test_class_db_configuration_list(void); +-void test_class_db_connection(void); +-void test_class_db_join(void); +-void test_class_db_join_list(void); +-void test_class_db_object_field(void); +-void test_class_db_object_field_list(void); +-void test_class_db_object(void); +-void test_class_db_value_set(void); +-void test_class_db_result(void); +-void test_class_db_result_list(void); +-void test_class_db_value(void); +-void test_class_end(void); ++extern int init_suite_classes(void); ++extern int clean_suite_classes(void); ++extern void test_class_db_backend_handle(void); ++extern void test_class_db_backend(void); ++extern void test_class_db_clause(void); ++extern void test_class_db_clause_list(void); ++extern void test_class_db_configuration(void); ++extern void test_class_db_configuration_list(void); ++extern void test_class_db_connection(void); ++extern void test_class_db_join(void); ++extern void test_class_db_join_list(void); ++extern void test_class_db_object_field(void); ++extern void test_class_db_object_field_list(void); ++extern void test_class_db_object(void); ++extern void test_class_db_value_set(void); ++extern void test_class_db_result(void); ++extern void test_class_db_result_list(void); ++extern void test_class_db_value(void); ++extern void test_class_end(void); + +-int init_suite_initialization(void); +-int clean_suite_initialization(void); +-void test_initialization_configuration(void); +-void test_initialization_connection(void); ++extern int init_suite_initialization(void); ++extern int clean_suite_initialization(void); ++extern void test_initialization_configuration(void); ++extern void test_initialization_connection(void); + + #if defined(ENFORCER_DATABASE_SQLITE3) +-int init_suite_database_operations_sqlite(void); ++extern int init_suite_database_operations_sqlite(void); + #endif +-int init_suite_database_operations_mysql(void); +-int clean_suite_database_operations(void); +-void test_database_operations_read_object1(void); +-void test_database_operations_create_object2(void); +-void test_database_operations_read_object2(void); +-void test_database_operations_update_object2(void); +-void test_database_operations_delete_object2(void); +-void test_database_operations_create_object3(void); +-void test_database_operations_delete_object3(void); +-void test_database_operations_read_all(void); +-void test_database_operations_count(void); ++extern int init_suite_database_operations_mysql(void); ++extern int clean_suite_database_operations(void); ++extern void test_database_operations_read_object1(void); ++extern void test_database_operations_create_object2(void); ++extern void test_database_operations_read_object2(void); ++extern void test_database_operations_update_object2(void); ++extern void test_database_operations_delete_object2(void); ++extern void test_database_operations_create_object3(void); ++extern void test_database_operations_delete_object3(void); ++extern void test_database_operations_read_all(void); ++extern void test_database_operations_count(void); + +-void test_database_operations_read_object1_2(void); +-void test_database_operations_create_object2_2(void); +-void test_database_operations_read_object2_2(void); +-void test_database_operations_update_object2_2(void); +-void test_database_operations_delete_object2_2(void); +-void test_database_operations_create_object3_2(void); +-void test_database_operations_delete_object3_2(void); +-void test_database_operations_update_objects_revisions(void); ++extern void test_database_operations_read_object1_2(void); ++extern void test_database_operations_create_object2_2(void); ++extern void test_database_operations_read_object2_2(void); ++extern void test_database_operations_update_object2_2(void); ++extern void test_database_operations_delete_object2_2(void); ++extern void test_database_operations_create_object3_2(void); ++extern void test_database_operations_delete_object3_2(void); ++extern void test_database_operations_update_objects_revisions(void); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/test/test_hsm_key.h opendnssec-2.1.6/enforcer/src/db/test/test_hsm_key.h +--- opendnssec-2.1.6-orig/enforcer/src/db/test/test_hsm_key.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/test/test_hsm_key.h 2020-02-18 23:08:38.113360672 -0500 +@@ -30,6 +30,6 @@ + #ifndef __test_hsm_key_h + #define __test_hsm_key_h + +-int test_hsm_key_add_suite(void); ++extern int test_hsm_key_add_suite(void); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/test/test_key_data.h opendnssec-2.1.6/enforcer/src/db/test/test_key_data.h +--- opendnssec-2.1.6-orig/enforcer/src/db/test/test_key_data.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/test/test_key_data.h 2020-02-18 23:08:38.113360672 -0500 +@@ -30,6 +30,6 @@ + #ifndef __test_key_data_h + #define __test_key_data_h + +-int test_key_data_add_suite(void); ++extern int test_key_data_add_suite(void); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/test/test_key_dependency.h opendnssec-2.1.6/enforcer/src/db/test/test_key_dependency.h +--- opendnssec-2.1.6-orig/enforcer/src/db/test/test_key_dependency.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/test/test_key_dependency.h 2020-02-18 23:08:38.113360672 -0500 +@@ -30,6 +30,6 @@ + #ifndef __test_key_dependency_h + #define __test_key_dependency_h + +-int test_key_dependency_add_suite(void); ++extern int test_key_dependency_add_suite(void); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/test/test_key_state.h opendnssec-2.1.6/enforcer/src/db/test/test_key_state.h +--- opendnssec-2.1.6-orig/enforcer/src/db/test/test_key_state.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/test/test_key_state.h 2020-02-18 23:08:38.113360672 -0500 +@@ -30,6 +30,6 @@ + #ifndef __test_key_state_h + #define __test_key_state_h + +-int test_key_state_add_suite(void); ++extern int test_key_state_add_suite(void); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/test/test_policy.h opendnssec-2.1.6/enforcer/src/db/test/test_policy.h +--- opendnssec-2.1.6-orig/enforcer/src/db/test/test_policy.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/test/test_policy.h 2020-02-18 23:08:38.114360685 -0500 +@@ -30,6 +30,6 @@ + #ifndef __test_policy_h + #define __test_policy_h + +-int test_policy_add_suite(void); ++extern int test_policy_add_suite(void); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/test/test_policy_key.h opendnssec-2.1.6/enforcer/src/db/test/test_policy_key.h +--- opendnssec-2.1.6-orig/enforcer/src/db/test/test_policy_key.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/test/test_policy_key.h 2020-02-18 23:08:38.114360685 -0500 +@@ -30,6 +30,6 @@ + #ifndef __test_policy_key_h + #define __test_policy_key_h + +-int test_policy_key_add_suite(void); ++extern int test_policy_key_add_suite(void); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/test/test_zone.h opendnssec-2.1.6/enforcer/src/db/test/test_zone.h +--- opendnssec-2.1.6-orig/enforcer/src/db/test/test_zone.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/test/test_zone.h 2020-02-18 23:08:38.114360685 -0500 +@@ -30,6 +30,6 @@ + #ifndef __test_zone_h + #define __test_zone_h + +-int test_zone_add_suite(void); ++extern int test_zone_add_suite(void); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/zone_db_ext.h opendnssec-2.1.6/enforcer/src/db/zone_db_ext.h +--- opendnssec-2.1.6-orig/enforcer/src/db/zone_db_ext.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/zone_db_ext.h 2020-02-18 23:08:38.114360685 -0500 +@@ -39,7 +39,7 @@ + * Convert zone ID to name, caller must free resulting string. + * return NULL on error + */ +-char * ++extern char * + zone_db_ext_zonename_from_id(const db_connection_t* connection, + const db_value_t* id); + +@@ -48,14 +48,14 @@ + * \param[in] zone an zone_db_t pointer. + * \return a key_data_list_t pointer or NULL on error. + */ +-key_data_list_t* zone_db_get_keys(const zone_db_t* zone); ++extern key_data_list_t* zone_db_get_keys(const zone_db_t* zone); + + /** + * Get a list of key dependencies for an enforcer zone object. + * \param[in] zone an zone_db_t pointer. + * \return a key_dependency_list_t pointer or NULL on error. + */ +-key_dependency_list_t* zone_db_get_key_dependencies(const zone_db_t* zone); ++extern key_dependency_list_t* zone_db_get_key_dependencies(const zone_db_t* zone); + + /** + * Create a zone object from XML. +@@ -63,7 +63,7 @@ + * \param[in] zone_node a xmlNodePtr to the XML for the zone. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_create_from_xml(zone_db_t* zone, xmlNodePtr zone_node); ++extern int zone_db_create_from_xml(zone_db_t* zone, xmlNodePtr zone_node); + + /** + * Update a zone object from XML. +@@ -73,6 +73,6 @@ + * values in the zone was updated. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_update_from_xml(zone_db_t* zone, xmlNodePtr zone_node, int* updated); ++extern int zone_db_update_from_xml(zone_db_t* zone, xmlNodePtr zone_node, int* updated); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/db/zone_db.h opendnssec-2.1.6/enforcer/src/db/zone_db.h +--- opendnssec-2.1.6-orig/enforcer/src/db/zone_db.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/db/zone_db.h 2020-02-18 23:08:38.114360685 -0500 +@@ -76,20 +76,20 @@ + * \param[in] connection a db_connection_t pointer. + * \return a zone_db_t pointer or NULL on error. + */ +-zone_db_t* zone_db_new(const db_connection_t* connection); ++extern zone_db_t* zone_db_new(const db_connection_t* connection); + + /** + * Create a new zone object that is a copy of another zone object. + * \param[in] zone a zone_db_t pointer. + * \return a zone_db_t pointer or NULL on error. + */ +-zone_db_t* zone_db_new_copy(const zone_db_t* zone); ++extern zone_db_t* zone_db_new_copy(const zone_db_t* zone); + + /** + * Delete a zone object, this does not delete it from the database. + * \param[in] zone a zone_db_t pointer. + */ +-void zone_db_free(zone_db_t* zone); ++extern void zone_db_free(zone_db_t* zone); + + /** + * Copy the content of a zone object. +@@ -97,7 +97,7 @@ + * \param[in] zone_copy a zone_db_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_copy(zone_db_t* zone, const zone_db_t* zone_copy); ++extern int zone_db_copy(zone_db_t* zone, const zone_db_t* zone_copy); + + /** + * Set the content of a zone object based on a database result. +@@ -105,21 +105,21 @@ + * \param[in] result a db_result_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_from_result(zone_db_t* zone, const db_result_t* result); ++extern int zone_db_from_result(zone_db_t* zone, const db_result_t* result); + + /** + * Get the id of a zone object. + * \param[in] zone a zone_db_t pointer. + * \return a db_value_t pointer or NULL on error. + */ +-const db_value_t* zone_db_id(const zone_db_t* zone); ++extern const db_value_t* zone_db_id(const zone_db_t* zone); + + /** + * Get the policy_id of a zone object. + * \param[in] zone a zone_db_t pointer. + * \return a db_value_t pointer or NULL on error. + */ +-const db_value_t* zone_db_policy_id(const zone_db_t* zone); ++extern const db_value_t* zone_db_policy_id(const zone_db_t* zone); + + /** + * Get the policy_id object related to a zone object. +@@ -127,126 +127,126 @@ + * \param[in] zone a zone_db_t pointer. + * \return a policy_t pointer or NULL on error or if no object could be found. + */ +-policy_t* zone_db_get_policy(const zone_db_t* zone); ++extern policy_t* zone_db_get_policy(const zone_db_t* zone); + + /** + * Get the name of a zone object. + * \param[in] zone a zone_db_t pointer. + * \return a character pointer or NULL on error or if no name has been set. + */ +-const char* zone_db_name(const zone_db_t* zone); ++extern const char* zone_db_name(const zone_db_t* zone); + + /** + * Get the signconf_needs_writing of a zone object. Undefined behavior if `zone` is NULL. + * \param[in] zone a zone_db_t pointer. + * \return an unsigned integer. + */ +-unsigned int zone_db_signconf_needs_writing(const zone_db_t* zone); ++extern unsigned int zone_db_signconf_needs_writing(const zone_db_t* zone); + + /** + * Get the signconf_path of a zone object. + * \param[in] zone a zone_db_t pointer. + * \return a character pointer or NULL on error or if no signconf_path has been set. + */ +-const char* zone_db_signconf_path(const zone_db_t* zone); ++extern const char* zone_db_signconf_path(const zone_db_t* zone); + + /** + * Get the next_change of a zone object. Undefined behavior if `zone` is NULL. + * \param[in] zone a zone_db_t pointer. + * \return an integer. + */ +-int zone_db_next_change(const zone_db_t* zone); ++extern int zone_db_next_change(const zone_db_t* zone); + + /** + * Get the ttl_end_ds of a zone object. Undefined behavior if `zone` is NULL. + * \param[in] zone a zone_db_t pointer. + * \return an unsigned integer. + */ +-unsigned int zone_db_ttl_end_ds(const zone_db_t* zone); ++extern unsigned int zone_db_ttl_end_ds(const zone_db_t* zone); + + /** + * Get the ttl_end_dk of a zone object. Undefined behavior if `zone` is NULL. + * \param[in] zone a zone_db_t pointer. + * \return an unsigned integer. + */ +-unsigned int zone_db_ttl_end_dk(const zone_db_t* zone); ++extern unsigned int zone_db_ttl_end_dk(const zone_db_t* zone); + + /** + * Get the ttl_end_rs of a zone object. Undefined behavior if `zone` is NULL. + * \param[in] zone a zone_db_t pointer. + * \return an unsigned integer. + */ +-unsigned int zone_db_ttl_end_rs(const zone_db_t* zone); ++extern unsigned int zone_db_ttl_end_rs(const zone_db_t* zone); + + /** + * Get the roll_ksk_now of a zone object. Undefined behavior if `zone` is NULL. + * \param[in] zone a zone_db_t pointer. + * \return an unsigned integer. + */ +-unsigned int zone_db_roll_ksk_now(const zone_db_t* zone); ++extern unsigned int zone_db_roll_ksk_now(const zone_db_t* zone); + + /** + * Get the roll_zsk_now of a zone object. Undefined behavior if `zone` is NULL. + * \param[in] zone a zone_db_t pointer. + * \return an unsigned integer. + */ +-unsigned int zone_db_roll_zsk_now(const zone_db_t* zone); ++extern unsigned int zone_db_roll_zsk_now(const zone_db_t* zone); + + /** + * Get the roll_csk_now of a zone object. Undefined behavior if `zone` is NULL. + * \param[in] zone a zone_db_t pointer. + * \return an unsigned integer. + */ +-unsigned int zone_db_roll_csk_now(const zone_db_t* zone); ++extern unsigned int zone_db_roll_csk_now(const zone_db_t* zone); + + /** + * Get the input_adapter_type of a zone object. + * \param[in] zone a zone_db_t pointer. + * \return a character pointer or NULL on error or if no input_adapter_type has been set. + */ +-const char* zone_db_input_adapter_type(const zone_db_t* zone); ++extern const char* zone_db_input_adapter_type(const zone_db_t* zone); + + /** + * Get the input_adapter_uri of a zone object. + * \param[in] zone a zone_db_t pointer. + * \return a character pointer or NULL on error or if no input_adapter_uri has been set. + */ +-const char* zone_db_input_adapter_uri(const zone_db_t* zone); ++extern const char* zone_db_input_adapter_uri(const zone_db_t* zone); + + /** + * Get the output_adapter_type of a zone object. + * \param[in] zone a zone_db_t pointer. + * \return a character pointer or NULL on error or if no output_adapter_type has been set. + */ +-const char* zone_db_output_adapter_type(const zone_db_t* zone); ++extern const char* zone_db_output_adapter_type(const zone_db_t* zone); + + /** + * Get the output_adapter_uri of a zone object. + * \param[in] zone a zone_db_t pointer. + * \return a character pointer or NULL on error or if no output_adapter_uri has been set. + */ +-const char* zone_db_output_adapter_uri(const zone_db_t* zone); ++extern const char* zone_db_output_adapter_uri(const zone_db_t* zone); + + /** + * Get the next_ksk_roll of a zone object. Undefined behavior if `zone` is NULL. + * \param[in] zone a zone_db_t pointer. + * \return an unsigned integer. + */ +-unsigned int zone_db_next_ksk_roll(const zone_db_t* zone); ++extern unsigned int zone_db_next_ksk_roll(const zone_db_t* zone); + + /** + * Get the next_zsk_roll of a zone object. Undefined behavior if `zone` is NULL. + * \param[in] zone a zone_db_t pointer. + * \return an unsigned integer. + */ +-unsigned int zone_db_next_zsk_roll(const zone_db_t* zone); ++extern unsigned int zone_db_next_zsk_roll(const zone_db_t* zone); + + /** + * Get the next_csk_roll of a zone object. Undefined behavior if `zone` is NULL. + * \param[in] zone a zone_db_t pointer. + * \return an unsigned integer. + */ +-unsigned int zone_db_next_csk_roll(const zone_db_t* zone); ++extern unsigned int zone_db_next_csk_roll(const zone_db_t* zone); + + /** + * Set the policy_id of a zone object. If this fails the original value may have been lost. +@@ -254,7 +254,7 @@ + * \param[in] policy_id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_policy_id(zone_db_t* zone, const db_value_t* policy_id); ++extern int zone_db_set_policy_id(zone_db_t* zone, const db_value_t* policy_id); + + /** + * Set the name of a zone object. +@@ -262,7 +262,7 @@ + * \param[in] name_text a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_name(zone_db_t* zone, const char* name_text); ++extern int zone_db_set_name(zone_db_t* zone, const char* name_text); + + /** + * Set the signconf_needs_writing of a zone object. +@@ -270,7 +270,7 @@ + * \param[in] signconf_needs_writing an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_signconf_needs_writing(zone_db_t* zone, unsigned int signconf_needs_writing); ++extern int zone_db_set_signconf_needs_writing(zone_db_t* zone, unsigned int signconf_needs_writing); + + /** + * Set the signconf_path of a zone object. +@@ -278,7 +278,7 @@ + * \param[in] signconf_path_text a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_signconf_path(zone_db_t* zone, const char* signconf_path_text); ++extern int zone_db_set_signconf_path(zone_db_t* zone, const char* signconf_path_text); + + /** + * Set the next_change of a zone object. +@@ -286,7 +286,7 @@ + * \param[in] next_change an integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_next_change(zone_db_t* zone, int next_change); ++extern int zone_db_set_next_change(zone_db_t* zone, int next_change); + + /** + * Set the ttl_end_ds of a zone object. +@@ -294,7 +294,7 @@ + * \param[in] ttl_end_ds an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_ttl_end_ds(zone_db_t* zone, unsigned int ttl_end_ds); ++extern int zone_db_set_ttl_end_ds(zone_db_t* zone, unsigned int ttl_end_ds); + + /** + * Set the ttl_end_dk of a zone object. +@@ -302,7 +302,7 @@ + * \param[in] ttl_end_dk an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_ttl_end_dk(zone_db_t* zone, unsigned int ttl_end_dk); ++extern int zone_db_set_ttl_end_dk(zone_db_t* zone, unsigned int ttl_end_dk); + + /** + * Set the ttl_end_rs of a zone object. +@@ -310,7 +310,7 @@ + * \param[in] ttl_end_rs an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_ttl_end_rs(zone_db_t* zone, unsigned int ttl_end_rs); ++extern int zone_db_set_ttl_end_rs(zone_db_t* zone, unsigned int ttl_end_rs); + + /** + * Set the roll_ksk_now of a zone object. +@@ -318,7 +318,7 @@ + * \param[in] roll_ksk_now an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_roll_ksk_now(zone_db_t* zone, unsigned int roll_ksk_now); ++extern int zone_db_set_roll_ksk_now(zone_db_t* zone, unsigned int roll_ksk_now); + + /** + * Set the roll_zsk_now of a zone object. +@@ -326,7 +326,7 @@ + * \param[in] roll_zsk_now an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_roll_zsk_now(zone_db_t* zone, unsigned int roll_zsk_now); ++extern int zone_db_set_roll_zsk_now(zone_db_t* zone, unsigned int roll_zsk_now); + + /** + * Set the roll_csk_now of a zone object. +@@ -334,7 +334,7 @@ + * \param[in] roll_csk_now an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_roll_csk_now(zone_db_t* zone, unsigned int roll_csk_now); ++extern int zone_db_set_roll_csk_now(zone_db_t* zone, unsigned int roll_csk_now); + + /** + * Set the input_adapter_type of a zone object. +@@ -342,7 +342,7 @@ + * \param[in] input_adapter_type_text a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_input_adapter_type(zone_db_t* zone, const char* input_adapter_type_text); ++extern int zone_db_set_input_adapter_type(zone_db_t* zone, const char* input_adapter_type_text); + + /** + * Set the input_adapter_uri of a zone object. +@@ -350,7 +350,7 @@ + * \param[in] input_adapter_uri_text a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_input_adapter_uri(zone_db_t* zone, const char* input_adapter_uri_text); ++extern int zone_db_set_input_adapter_uri(zone_db_t* zone, const char* input_adapter_uri_text); + + /** + * Set the output_adapter_type of a zone object. +@@ -358,7 +358,7 @@ + * \param[in] output_adapter_type_text a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_output_adapter_type(zone_db_t* zone, const char* output_adapter_type_text); ++extern int zone_db_set_output_adapter_type(zone_db_t* zone, const char* output_adapter_type_text); + + /** + * Set the output_adapter_uri of a zone object. +@@ -366,7 +366,7 @@ + * \param[in] output_adapter_uri_text a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_output_adapter_uri(zone_db_t* zone, const char* output_adapter_uri_text); ++extern int zone_db_set_output_adapter_uri(zone_db_t* zone, const char* output_adapter_uri_text); + + /** + * Set the next_ksk_roll of a zone object. +@@ -374,7 +374,7 @@ + * \param[in] next_ksk_roll an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_next_ksk_roll(zone_db_t* zone, unsigned int next_ksk_roll); ++extern int zone_db_set_next_ksk_roll(zone_db_t* zone, unsigned int next_ksk_roll); + + /** + * Set the next_zsk_roll of a zone object. +@@ -382,7 +382,7 @@ + * \param[in] next_zsk_roll an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_next_zsk_roll(zone_db_t* zone, unsigned int next_zsk_roll); ++extern int zone_db_set_next_zsk_roll(zone_db_t* zone, unsigned int next_zsk_roll); + + /** + * Set the next_csk_roll of a zone object. +@@ -390,7 +390,7 @@ + * \param[in] next_csk_roll an unsigned integer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_set_next_csk_roll(zone_db_t* zone, unsigned int next_csk_roll); ++extern int zone_db_set_next_csk_roll(zone_db_t* zone, unsigned int next_csk_roll); + + /** + * Create a clause for policy_id of a zone object and add it to a database clause list. +@@ -401,14 +401,14 @@ + * \param[in] policy_id a db_value_t pointer. + * \return a db_clause_t pointer to the added clause or NULL on error. + */ +-db_clause_t* zone_db_policy_id_clause(db_clause_list_t* clause_list, const db_value_t* policy_id); ++extern db_clause_t* zone_db_policy_id_clause(db_clause_list_t* clause_list, const db_value_t* policy_id); + + /** + * Create a zone object in the database. + * \param[in] zone a zone_db_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_create(zone_db_t* zone); ++extern int zone_db_create(zone_db_t* zone); + + /** + * Get a zone object from the database by a id specified in `id`. +@@ -416,7 +416,7 @@ + * \param[in] id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_get_by_id(zone_db_t* zone, const db_value_t* id); ++extern int zone_db_get_by_id(zone_db_t* zone, const db_value_t* id); + + /** + * Get a zone object from the database by a name specified in `name`. +@@ -424,7 +424,7 @@ + * \param[in] name a character pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_get_by_name(zone_db_t* zone, const char* name); ++extern int zone_db_get_by_name(zone_db_t* zone, const char* name); + + /** + * Get a new zone object from the database by a name specified in `name`. +@@ -432,21 +432,21 @@ + * \param[in] name a character pointer. + * \return a zone_db_t pointer or NULL on error or if it does not exist. + */ +-zone_db_t* zone_db_new_get_by_name(const db_connection_t* connection, const char* name); ++extern zone_db_t* zone_db_new_get_by_name(const db_connection_t* connection, const char* name); + + /** + * Update a zone object in the database. + * \param[in] zone a zone_db_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_update(zone_db_t* zone); ++extern int zone_db_update(zone_db_t* zone); + + /** + * Delete a zone object from the database. + * \param[in] zone a zone_db_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_delete(zone_db_t* zone); ++extern int zone_db_delete(zone_db_t* zone); + + /** + * Count the number of zone objects in the database, if a selection of +@@ -458,7 +458,7 @@ + * should be counted. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_db_count(zone_db_t* zone, db_clause_list_t* clause_list, size_t* count); ++extern int zone_db_count(zone_db_t* zone, db_clause_list_t* clause_list, size_t* count); + + /** + * A list of zone objects. +@@ -482,14 +482,14 @@ + * \param[in] connection a db_connection_t pointer. + * \return a zone_list_db_t pointer or NULL on error. + */ +-zone_list_db_t* zone_list_db_new(const db_connection_t* connection); ++extern zone_list_db_t* zone_list_db_new(const db_connection_t* connection); + + /** + * Create a new zone object list that is a copy of another. + * \param[in] zone_list_db a zone_list_db_t pointer. + * \return a zone_list_db_t pointer or NULL on error. + */ +-zone_list_db_t* zone_list_db_new_copy(const zone_list_db_t* zone_copy); ++extern zone_list_db_t* zone_list_db_new_copy(const zone_list_db_t* zone_copy); + + /** + * Specify that objects should be stored within the list as they are fetch, +@@ -497,13 +497,13 @@ + * \param[in] zone_list_db a zone_list_db_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_list_db_object_store(zone_list_db_t* zone_list_db); ++extern int zone_list_db_object_store(zone_list_db_t* zone_list_db); + + /** + * Delete a zone object list. + * \param[in] zone_list_db a zone_list_db_t pointer. + */ +-void zone_list_db_free(zone_list_db_t* zone_list_db); ++extern void zone_list_db_free(zone_list_db_t* zone_list_db); + + /** + * Copy the content of another zone object list. +@@ -511,21 +511,21 @@ + * \param[in] from_zone_list_db a zone_list_db_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_list_db_copy(zone_list_db_t* zone_list_db, const zone_list_db_t* from_zone_list_db); ++extern int zone_list_db_copy(zone_list_db_t* zone_list_db, const zone_list_db_t* from_zone_list_db); + + /** + * Get all zone objects. + * \param[in] zone_list_db a zone_list_db_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_list_db_get(zone_list_db_t* zone_list_db); ++extern int zone_list_db_get(zone_list_db_t* zone_list_db); + + /** + * Get a new list with all zone objects. + * \param[in] connection a db_connection_t pointer. + * \return a zone_list_db_t pointer or NULL on error. + */ +-zone_list_db_t* zone_list_db_new_get(const db_connection_t* connection); ++extern zone_list_db_t* zone_list_db_new_get(const db_connection_t* connection); + + /** + * Get zone objects from the database by a clause list. +@@ -533,7 +533,7 @@ + * \param[in] clause_list a db_clause_list_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_list_db_get_by_clauses(zone_list_db_t* zone_list_db, const db_clause_list_t* clause_list); ++extern int zone_list_db_get_by_clauses(zone_list_db_t* zone_list_db, const db_clause_list_t* clause_list); + + /** + * Get zone objects from the database by a policy_id specified in `policy_id`. +@@ -541,7 +541,7 @@ + * \param[in] policy_id a db_value_t pointer. + * \return DB_ERROR_* on failure, otherwise DB_OK. + */ +-int zone_list_db_get_by_policy_id(zone_list_db_t* zone_list_db, const db_value_t* policy_id); ++extern int zone_list_db_get_by_policy_id(zone_list_db_t* zone_list_db, const db_value_t* policy_id); + + /** + * Get a new list of zone objects from the database by a policy_id specified in `policy_id`. +@@ -549,7 +549,7 @@ + * \param[in] policy_id a db_value_t pointer. + * \return a zone_list_db_t pointer or NULL on error. + */ +-zone_list_db_t* zone_list_db_new_get_by_policy_id(const db_connection_t* connection, const db_value_t* policy_id); ++extern zone_list_db_t* zone_list_db_new_get_by_policy_id(const db_connection_t* connection, const db_value_t* policy_id); + + /** + * Get the first zone object in a zone object list and reset the +@@ -558,7 +558,7 @@ + * \return a zone_db_t pointer or NULL on error or if there are no + * zone objects in the zone object list. + */ +-const zone_db_t* zone_list_db_begin(zone_list_db_t* zone_list_db); ++extern const zone_db_t* zone_list_db_begin(zone_list_db_t* zone_list_db); + + /** + * Get the next zone object in a zone object list. +@@ -568,7 +568,7 @@ + * \return a zone_db_t pointer or NULL on error or if there are no more + * zone objects in the zone object list. + */ +-const zone_db_t* zone_list_db_next(zone_list_db_t* zone_list_db); ++extern const zone_db_t* zone_list_db_next(zone_list_db_t* zone_list_db); + + /** + * Get the next zone object in a zone object list. +@@ -578,7 +578,7 @@ + * \return a zone_db_t pointer or NULL on error or if there are no more + * zone objects in the zone object list. + */ +-zone_db_t* zone_list_db_get_next(zone_list_db_t* zone_list_db); ++extern zone_db_t* zone_list_db_get_next(zone_list_db_t* zone_list_db); + + /** + * Get the size of a zone object list. +@@ -586,6 +586,6 @@ + * \return a size_t with the size of the list or zero on error, if the list is + * empty or if the backend does not support returning the size. + */ +-size_t zone_list_db_size(zone_list_db_t* zone_list_db); ++extern size_t zone_list_db_size(zone_list_db_t* zone_list_db); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/enforcer/autostart_cmd.h opendnssec-2.1.6/enforcer/src/enforcer/autostart_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/enforcer/autostart_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/enforcer/autostart_cmd.h 2020-02-18 23:08:38.114360685 -0500 +@@ -32,6 +32,6 @@ + + #include "daemon/engine.h" + +-void autostart(engine_type* engine); ++extern void autostart(engine_type* engine); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/enforcer/enforce_cmd.h opendnssec-2.1.6/enforcer/src/enforcer/enforce_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/enforcer/enforce_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/enforcer/enforce_cmd.h 2020-02-18 23:08:38.114360685 -0500 +@@ -30,6 +30,6 @@ + #ifndef _ENFORCER_ENFORCE_CMD_H_ + #define _ENFORCER_ENFORCE_CMD_H_ + +-struct cmd_func_block enforce_funcblock; ++extern struct cmd_func_block enforce_funcblock; + + #endif /* _ENFORCER_ENFORCE_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/enforcer/enforcer.h opendnssec-2.1.6/enforcer/src/enforcer/enforcer.h +--- opendnssec-2.1.6-orig/enforcer/src/enforcer/enforcer.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/enforcer/enforcer.h 2020-02-18 23:08:38.114360685 -0500 +@@ -47,7 +47,7 @@ + * @param[in] keyfactory + * @return time_t Time the function wishes to be called again. + * */ +-time_t ++extern time_t + update(engine_type *engine, db_connection_t *dbconn, zone_db_t *zone, policy_t const *policy, time_t now, int *zone_updated); + + #endif /* _ENFORCER_ENFORCER_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/enforcer/enforce_task.h opendnssec-2.1.6/enforcer/src/enforcer/enforce_task.h +--- opendnssec-2.1.6-orig/enforcer/src/enforcer/enforce_task.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/enforcer/enforce_task.h 2020-02-18 23:08:38.115360699 -0500 +@@ -35,19 +35,19 @@ + #include "scheduler/task.h" + #include "db/policy.h" + +-task_type *enforce_task(engine_type *engine, char const *owner); ++extern task_type *enforce_task(engine_type *engine, char const *owner); + +-time_t enforce_task_perform(task_type* task, char const *owner, void *context, ++extern time_t enforce_task_perform(task_type* task, char const *owner, void *context, + void *dbconn); + + /* Schedule enforce tasks for *now* for zone. */ +-void enforce_task_flush_zone(engine_type *engine, char const *zonename); ++extern void enforce_task_flush_zone(engine_type *engine, char const *zonename); + + /* Schedule enforce tasks for *now* for ALL zones of policy. */ +-void enforce_task_flush_policy(engine_type *engine, db_connection_t *dbconn, ++extern void enforce_task_flush_policy(engine_type *engine, db_connection_t *dbconn, + policy_t const *policy); + + /* Schedule enforce tasks for *now* for ALL zones. */ +-void enforce_task_flush_all(engine_type *engine, db_connection_t *dbconn); ++extern void enforce_task_flush_all(engine_type *engine, db_connection_t *dbconn); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/enforcer/repositorylist_cmd.h opendnssec-2.1.6/enforcer/src/enforcer/repositorylist_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/enforcer/repositorylist_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/enforcer/repositorylist_cmd.h 2020-02-18 23:18:13.218838340 -0500 +@@ -28,6 +28,6 @@ + #ifndef _ENFORCER_REPOSITORYLIST_CMD_H_ + #define _ENFORCER_REPOSITORYLIST_CMD_H_ + +-struct cmd_func_block repositorylist_funcblock; ++extern struct cmd_func_block repositorylist_funcblock; + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/enforcer/update_all_cmd.h opendnssec-2.1.6/enforcer/src/enforcer/update_all_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/enforcer/update_all_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/enforcer/update_all_cmd.h 2020-02-18 23:18:15.366865499 -0500 +@@ -30,6 +30,6 @@ + #ifndef UPDATE_ALL_CMD_H_ + #define UPDATE_ALL_CMD_H_ + +-struct cmd_func_block update_all_funcblock; ++extern struct cmd_func_block update_all_funcblock; + + #endif /* UPDATE_ALL_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/enforcer/update_conf_cmd.h opendnssec-2.1.6/enforcer/src/enforcer/update_conf_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/enforcer/update_conf_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/enforcer/update_conf_cmd.h 2020-02-18 23:18:18.125900384 -0500 +@@ -29,6 +29,6 @@ + #ifndef UPDATE_CONF_CMD_H_ + #define UPDATE_CONF_CMD_H_ + +-struct cmd_func_block update_conf_funcblock; ++extern struct cmd_func_block update_conf_funcblock; + + #endif /* UPDATE_CONF_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/enforcer/update_repositorylist_cmd.h opendnssec-2.1.6/enforcer/src/enforcer/update_repositorylist_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/enforcer/update_repositorylist_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/enforcer/update_repositorylist_cmd.h 2020-02-18 23:18:09.930796767 -0500 +@@ -30,6 +30,6 @@ + #ifndef UPDATE_REPOSITORYLIST_CMD_H_ + #define UPDATE_REPOSITORYLIST_CMD_H_ + +-struct cmd_func_block update_repositorylist_funcblock; ++extern struct cmd_func_block update_repositorylist_funcblock; + + #endif /* UPDATE_REPOSITORYLIST_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/hsmkey/backup_hsmkeys_cmd.h opendnssec-2.1.6/enforcer/src/hsmkey/backup_hsmkeys_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/hsmkey/backup_hsmkeys_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/hsmkey/backup_hsmkeys_cmd.h 2020-02-18 23:11:50.156968800 -0500 +@@ -30,6 +30,6 @@ + #ifndef _HSMKEY_BACKUP_CMD_H_ + #define _HSMKEY_BACKUP_CMD_H_ + +-struct cmd_func_block backup_funcblock; ++extern struct cmd_func_block backup_funcblock; + + #endif /* _HSMKEY_BACKUP_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/hsmkey/hsm_key_factory.h opendnssec-2.1.6/enforcer/src/hsmkey/hsm_key_factory.h +--- opendnssec-2.1.6-orig/enforcer/src/hsmkey/hsm_key_factory.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/hsmkey/hsm_key_factory.h 2020-02-18 23:08:38.115360699 -0500 +@@ -35,12 +35,12 @@ + + #include + +-void hsm_key_factory_deinit(void); ++extern void hsm_key_factory_deinit(void); + /** + * TODO + * \return 0 success, 1 error + */ +-int hsm_key_factory_generate(engine_type* engine, ++extern int hsm_key_factory_generate(engine_type* engine, + const db_connection_t* connection, const policy_t* policy, const policy_key_t* policy_key, + time_t duration); + +@@ -55,7 +55,7 @@ + * TODO + * \return 0 success, 1 error + */ +-int hsm_key_factory_generate_all(engine_type* engine, ++extern int hsm_key_factory_generate_all(engine_type* engine, + const db_connection_t* connection, time_t duration); + + +@@ -68,7 +68,7 @@ + * if its zero then the duration from conf.xml is taken. + * \return non-zero on error. + */ +-int hsm_key_factory_schedule_generate_policy(engine_type* engine, ++extern int hsm_key_factory_schedule_generate_policy(engine_type* engine, + const policy_t* policy_orig, time_t duration); + + /** +@@ -79,7 +79,7 @@ + * if its zero then the duration from conf.xml is taken. + * \return non-zero on error. + */ +-int hsm_key_factory_schedule_generate_all(engine_type* engine, time_t duration); ++extern int hsm_key_factory_schedule_generate_all(engine_type* engine, time_t duration); + + /** + * Allocate a private or shared HSM key for the policy key provided. This will +@@ -92,7 +92,7 @@ + * \return an allocated HSM key or NULL on error or if there are no unused keys + * available for allocation right now. + */ +-hsm_key_t* hsm_key_factory_get_key(engine_type* engine, ++extern hsm_key_t* hsm_key_factory_get_key(engine_type* engine, + const db_connection_t* connection, const policy_key_t* policy_key, + hsm_key_state_t hsm_key_state); + +@@ -101,7 +101,7 @@ + * \param[in] hsm_key_id a db_value_t pointer with the hsm_key database id. + * \return non-zero on error. + */ +-int hsm_key_factory_release_key_id(const db_value_t* hsm_key_id, ++extern int hsm_key_factory_release_key_id(const db_value_t* hsm_key_id, + const db_connection_t* connection); + + /** +@@ -109,7 +109,7 @@ + * \param[in] hsm_key a hsm_key_t pointer with the hsm_key to release. + * \return non-zero on error. + */ +-int hsm_key_factory_release_key(hsm_key_t* hsm_key, ++extern int hsm_key_factory_release_key(hsm_key_t* hsm_key, + const db_connection_t* connection); + + #endif /* _HSM_KEY_FACTORY_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/hsmkey/key_generate_cmd.h opendnssec-2.1.6/enforcer/src/hsmkey/key_generate_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/hsmkey/key_generate_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/hsmkey/key_generate_cmd.h 2020-02-18 23:12:13.673288174 -0500 +@@ -29,6 +29,6 @@ + #ifndef HSMKEY_KEY_GENERATE_CMD_H_ + #define HSMKEY_KEY_GENERATE_CMD_H_ + +-struct cmd_func_block key_generate_funcblock; ++extern struct cmd_func_block key_generate_funcblock; + + #endif /* HSMKEY_KEY_GENERATE_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/key_purge_cmd.h opendnssec-2.1.6/enforcer/src/keystate/key_purge_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/key_purge_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/key_purge_cmd.h 2020-02-18 23:17:59.806668762 -0500 +@@ -1,7 +1,7 @@ + #ifndef _KEYSTATE_KEY_PURGE_CMD_H_ + #define _KEYSTATE_KEY_PURGE_CMD_H_ + +-struct cmd_func_block key_purge_funcblock; ++extern struct cmd_func_block key_purge_funcblock; + + #endif /* _KEYSTATE_KEY_PURGE_CMD_H_ */ + +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/key_purge.h opendnssec-2.1.6/enforcer/src/keystate/key_purge.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/key_purge.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/key_purge.h 2020-02-18 23:08:38.115360699 -0500 +@@ -6,7 +6,7 @@ + #include "db/zone_db.h" + #include "db/policy.h" + +-int removeDeadKeysNow(int sockfd, db_connection_t *dbconn, policy_t *policy, zone_db_t *rzone); ++extern int removeDeadKeysNow(int sockfd, db_connection_t *dbconn, policy_t *policy, zone_db_t *rzone); + + #endif + +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_ds_gone_cmd.h opendnssec-2.1.6/enforcer/src/keystate/keystate_ds_gone_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_ds_gone_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/keystate_ds_gone_cmd.h 2020-02-18 23:17:54.732604608 -0500 +@@ -30,6 +30,6 @@ + #ifndef _KEYSTATE_DS_GONE_CMD_H_ + #define _KEYSTATE_DS_GONE_CMD_H_ + +-struct cmd_func_block key_ds_gone_funcblock; ++extern struct cmd_func_block key_ds_gone_funcblock; + + #endif /* _KEYSTATE_DS_GONE_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_ds.h opendnssec-2.1.6/enforcer/src/keystate/keystate_ds.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_ds.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/keystate_ds.h 2020-02-18 23:08:38.115360699 -0500 +@@ -30,13 +30,13 @@ + + #include "db/key_data.h" + +-int ++extern int + change_keys_from_to(db_connection_t *dbconn, int sockfd, + const char *zonename, const hsm_key_t* hsmkey, int keytag, + key_data_ds_at_parent_t state_from, + key_data_ds_at_parent_t state_to, engine_type* engine); + +-int run_ds_cmd(int sockfd, const char *cmd, ++extern int run_ds_cmd(int sockfd, const char *cmd, + db_connection_t *dbconn, key_data_ds_at_parent_t state_from, + key_data_ds_at_parent_t state_to, engine_type* engine); + +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_ds_retract_cmd.h opendnssec-2.1.6/enforcer/src/keystate/keystate_ds_retract_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_ds_retract_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/keystate_ds_retract_cmd.h 2020-02-18 23:17:52.621577917 -0500 +@@ -30,6 +30,6 @@ + #ifndef _KEYSTATE_DS_RETRACT_CMD_H_ + #define _KEYSTATE_DS_RETRACT_CMD_H_ + +-struct cmd_func_block key_ds_retract_funcblock; ++extern struct cmd_func_block key_ds_retract_funcblock; + + #endif /* _KEYSTATE_DS_RETRACT_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_ds_retract_task.h opendnssec-2.1.6/enforcer/src/keystate/keystate_ds_retract_task.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_ds_retract_task.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/keystate_ds_retract_task.h 2020-02-18 23:08:38.115360699 -0500 +@@ -30,7 +30,7 @@ + #ifndef _KEYSTATE_DS_RETRACT_TASK_H_ + #define _KEYSTATE_DS_RETRACT_TASK_H_ + +-task_type * ++extern task_type * + keystate_ds_retract_task(engine_type *engine, char const *owner); + + #endif /*_KEYSTATE_DS_RETRACT_TASK_H_*/ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_ds_seen_cmd.h opendnssec-2.1.6/enforcer/src/keystate/keystate_ds_seen_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_ds_seen_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/keystate_ds_seen_cmd.h 2020-02-18 23:17:50.392549734 -0500 +@@ -32,6 +32,6 @@ + + #include "daemon/engine.h" + +-struct cmd_func_block key_ds_seen_funcblock; ++extern struct cmd_func_block key_ds_seen_funcblock; + + #endif /* _KEYSTATE_DS_SEEN_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_ds_submit_cmd.h opendnssec-2.1.6/enforcer/src/keystate/keystate_ds_submit_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_ds_submit_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/keystate_ds_submit_cmd.h 2020-02-18 23:17:48.185521829 -0500 +@@ -30,6 +30,6 @@ + #ifndef _KEYSTATE_DS_SUBMIT_CMD_H_ + #define _KEYSTATE_DS_SUBMIT_CMD_H_ + +-struct cmd_func_block key_ds_submit_funcblock; ++extern struct cmd_func_block key_ds_submit_funcblock; + + #endif /* _KEYSTATE_DS_SUBMIT_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_ds_submit_task.h opendnssec-2.1.6/enforcer/src/keystate/keystate_ds_submit_task.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_ds_submit_task.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/keystate_ds_submit_task.h 2020-02-18 23:08:38.115360699 -0500 +@@ -30,7 +30,7 @@ + #ifndef _KEYSTATE_DS_SUBMIT_TASK_H_ + #define _KEYSTATE_DS_SUBMIT_TASK_H_ + +-task_type * ++extern task_type * + keystate_ds_submit_task(engine_type *engine, char const *owner); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_export_cmd.h opendnssec-2.1.6/enforcer/src/keystate/keystate_export_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_export_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/keystate_export_cmd.h 2020-02-18 23:16:09.403272877 -0500 +@@ -30,6 +30,6 @@ + #ifndef _KEYSTATE_EXPORT_CMD_H_ + #define _KEYSTATE_EXPORT_CMD_H_ + +-struct cmd_func_block key_export_funcblock; ++extern struct cmd_func_block key_export_funcblock; + + #endif /* _KEYSTATE_EXPORT_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_import_cmd.h opendnssec-2.1.6/enforcer/src/keystate/keystate_import_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_import_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/keystate_import_cmd.h 2020-02-18 23:17:42.005443692 -0500 +@@ -28,7 +28,7 @@ + #ifndef _KEYSTATE_IMPORT_CMD_H_ + #define _KEYSTATE_IMPORT_CMD_H_ + +-struct cmd_func_block key_import_funcblock; ++extern struct cmd_func_block key_import_funcblock; + + #endif /* _KEYSTATE_IMPORT_CMD_H_ */ + +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_list_cmd.h opendnssec-2.1.6/enforcer/src/keystate/keystate_list_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_list_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/keystate_list_cmd.h 2020-02-18 23:16:03.363196509 -0500 +@@ -32,8 +32,8 @@ + + #include "db/key_data.h" + +-struct cmd_func_block key_list_funcblock; ++extern struct cmd_func_block key_list_funcblock; + +-const char* map_keystate(key_data_t *key); ++extern const char* map_keystate(key_data_t *key); + + #endif /* _KEYSTATE_LIST_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_rollover_cmd.h opendnssec-2.1.6/enforcer/src/keystate/keystate_rollover_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/keystate_rollover_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/keystate_rollover_cmd.h 2020-02-18 23:17:57.082634320 -0500 +@@ -30,6 +30,6 @@ + #ifndef _KEYSTATE_ROLLOVER_CMD_H_ + #define _KEYSTATE_ROLLOVER_CMD_H_ + +-struct cmd_func_block key_rollover_funcblock; ++extern struct cmd_func_block key_rollover_funcblock; + + #endif /* _KEYSTATE_ROLLOVER_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/rollover_list_cmd.h opendnssec-2.1.6/enforcer/src/keystate/rollover_list_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/rollover_list_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/rollover_list_cmd.h 2020-02-18 23:16:06.639237929 -0500 +@@ -30,6 +30,6 @@ + #ifndef _ROLLOVER_LIST_CMD_H_ + #define _ROLLOVER_LIST_CMD_H_ + +-struct cmd_func_block rollover_list_funcblock; ++extern struct cmd_func_block rollover_list_funcblock; + + #endif /* _ROLLOVER_LIST_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/zone_add_cmd.h opendnssec-2.1.6/enforcer/src/keystate/zone_add_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/zone_add_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/zone_add_cmd.h 2020-02-18 23:13:08.797989394 -0500 +@@ -30,6 +30,6 @@ + #ifndef _KEYSTATE_ZONE_ADD_CMD_H_ + #define _KEYSTATE_ZONE_ADD_CMD_H_ + +-struct cmd_func_block zone_add_funcblock; ++extern struct cmd_func_block zone_add_funcblock; + + #endif /* _KEYSTATE_ZONE_ADD_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/zone_del_cmd.h opendnssec-2.1.6/enforcer/src/keystate/zone_del_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/zone_del_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/zone_del_cmd.h 2020-02-18 23:15:39.850899231 -0500 +@@ -30,6 +30,6 @@ + #ifndef _KEYSTATE_ZONE_DEL_CMD_H_ + #define _KEYSTATE_ZONE_DEL_CMD_H_ + +-struct cmd_func_block zone_del_funcblock; ++extern struct cmd_func_block zone_del_funcblock; + + #endif /* _KEYSTATE_ZONE_DEL_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/zone_list_cmd.h opendnssec-2.1.6/enforcer/src/keystate/zone_list_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/zone_list_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/zone_list_cmd.h 2020-02-18 23:12:32.216526873 -0500 +@@ -30,6 +30,6 @@ + #ifndef _KEYSTATE_ZONE_LIST_CMD_H_ + #define _KEYSTATE_ZONE_LIST_CMD_H_ + +-struct cmd_func_block zone_list_funcblock; ++extern struct cmd_func_block zone_list_funcblock; + + #endif /* _KEYSTATE_ZONE_LIST_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/zonelist_export_cmd.h opendnssec-2.1.6/enforcer/src/keystate/zonelist_export_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/zonelist_export_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/zonelist_export_cmd.h 2020-02-18 23:18:07.869770709 -0500 +@@ -29,6 +29,6 @@ + #ifndef _KEYSTATE_ZONELIST_EXPORT_CMD_H_ + #define _KEYSTATE_ZONELIST_EXPORT_CMD_H_ + +-struct cmd_func_block zonelist_export_funcblock; ++extern struct cmd_func_block zonelist_export_funcblock; + + #endif /* _KEYSTATE_ZONELIST_EXPORT_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/zonelist_export.h opendnssec-2.1.6/enforcer/src/keystate/zonelist_export.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/zonelist_export.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/zonelist_export.h 2020-02-18 23:08:38.115360699 -0500 +@@ -64,6 +64,6 @@ + * \param[in] comment if non-zero include a comment about the zonelist file. + * \return ZONELIST_EXPORT_ERR_* on error otherwise ZONELIST_EXPORT_OK. + */ +-int zonelist_export(int sockfd, db_connection_t* connection, const char* filename, int comment); ++extern int zonelist_export(int sockfd, db_connection_t* connection, const char* filename, int comment); + + #endif /* _KEYSTATE_ZONELIST_EXPORT_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/zonelist_import_cmd.h opendnssec-2.1.6/enforcer/src/keystate/zonelist_import_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/zonelist_import_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/zonelist_import_cmd.h 2020-02-18 23:18:02.925708198 -0500 +@@ -29,6 +29,6 @@ + #ifndef _KEYSTATE_ZONELIST_IMPORT_CMD_H_ + #define _KEYSTATE_ZONELIST_IMPORT_CMD_H_ + +-struct cmd_func_block zonelist_import_funcblock; ++extern struct cmd_func_block zonelist_import_funcblock; + + #endif /* _KEYSTATE_ZONELIST_IMPORT_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/zonelist_import.h opendnssec-2.1.6/enforcer/src/keystate/zonelist_import.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/zonelist_import.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/zonelist_import.h 2020-02-18 23:08:38.115360699 -0500 +@@ -68,7 +68,7 @@ + * \return ZONELIST_IMPORT_ERR_* on error otherwise ZONELIST_IMPORT_OK or + * ZONELIST_IMPORT_NO_CHANGE. + */ +-int zonelist_import(int sockfd, engine_type* engine, db_connection_t *dbconn, ++extern int zonelist_import(int sockfd, engine_type* engine, db_connection_t *dbconn, + int do_delete, const char* zonelist_path); + + #endif /* _KEYSTATE_ZONELIST_IMPORT_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/zonelist_update.h opendnssec-2.1.6/enforcer/src/keystate/zonelist_update.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/zonelist_update.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/zonelist_update.h 2020-02-18 23:08:38.115360699 -0500 +@@ -64,7 +64,7 @@ + * \param[in] comment if non-zero include a comment about the zonelist file. + * \return ZONELIST_UPDATE_ERR_* on error otherwise ZONELIST_UPDATE_OK. + */ +-int zonelist_update_add(int sockfd, const char* filename, const zone_db_t* zone, int comment); ++extern int zonelist_update_add(int sockfd, const char* filename, const zone_db_t* zone, int comment); + + /** + * Update a zonelist and remove the supplied zone from it. +@@ -74,6 +74,6 @@ + * \param[in] comment if non-zero include a comment about the zonelist file. + * \return ZONELIST_UPDATE_ERR_* on error otherwise ZONELIST_UPDATE_OK. + */ +-int zonelist_update_delete(int sockfd, const char* filename, const zone_db_t* zone, int comment); ++extern int zonelist_update_delete(int sockfd, const char* filename, const zone_db_t* zone, int comment); + + #endif /* _KEYSTATE_ZONELIST_UPDATE_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/keystate/zone_set_policy_cmd.h opendnssec-2.1.6/enforcer/src/keystate/zone_set_policy_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/keystate/zone_set_policy_cmd.h 2020-02-10 12:25:12.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/keystate/zone_set_policy_cmd.h 2020-02-18 23:15:47.325993743 -0500 +@@ -29,6 +29,6 @@ + #ifndef _KEYSTATE_ZONE_SET_POLICY_CMD_H_ + #define _KEYSTATE_ZONE_SET_POLICY_CMD_H_ + +-struct cmd_func_block zone_set_policy_funcblock; ++extern struct cmd_func_block zone_set_policy_funcblock; + + #endif /* _KEYSTATE_ZONE_SET_POLICY_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/parser/confparser.h opendnssec-2.1.6/enforcer/src/parser/confparser.h +--- opendnssec-2.1.6-orig/enforcer/src/parser/confparser.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/parser/confparser.h 2020-02-18 23:08:38.115360699 -0500 +@@ -44,7 +44,7 @@ + * \return ods_status status + * + */ +-ods_status parse_file_check(const char* cfgfile, const char* rngfile); ++extern ods_status parse_file_check(const char* cfgfile, const char* rngfile); + + /** + * Parse elements from the configuration file. +@@ -54,7 +54,7 @@ + * \return const char* string value + * + */ +-const char* parse_conf_string(const char* cfgfile, const char* expr, ++extern const char* parse_conf_string(const char* cfgfile, const char* expr, + int required); + + /** +@@ -66,25 +66,25 @@ + */ + + /** Common */ +-const char* parse_conf_policy_filename(const char* cfgfile); +-const char* parse_conf_zonelist_filename(const char* cfgfile); +-const char* parse_conf_zonefetch_filename(const char* cfgfile); +-const char* parse_conf_log_filename(const char* cfgfile); ++extern const char* parse_conf_policy_filename(const char* cfgfile); ++extern const char* parse_conf_zonelist_filename(const char* cfgfile); ++extern const char* parse_conf_zonefetch_filename(const char* cfgfile); ++extern const char* parse_conf_log_filename(const char* cfgfile); + + /** Enforcer specific */ +-const char* parse_conf_pid_filename(const char* cfgfile); +-const char* parse_conf_delegation_signer_submit_command(const char* cfgfile); +-const char* parse_conf_delegation_signer_retract_command(const char* cfgfile); +-const char* parse_conf_clisock_filename(const char* cfgfile); +-const char* parse_conf_working_dir(const char* cfgfile); +-const char* parse_conf_username(const char* cfgfile); +-const char* parse_conf_group(const char* cfgfile); +-const char* parse_conf_chroot(const char* cfgfile); +-const char* parse_conf_datastore(const char* cfgfile); +-const char* parse_conf_db_host(const char* cfgfile); +-const char* parse_conf_db_username(const char* cfgfile); +-const char* parse_conf_db_password(const char* cfgfile); +-engineconfig_database_type_t parse_conf_db_type(const char *cfgfile); ++extern const char* parse_conf_pid_filename(const char* cfgfile); ++extern const char* parse_conf_delegation_signer_submit_command(const char* cfgfile); ++extern const char* parse_conf_delegation_signer_retract_command(const char* cfgfile); ++extern const char* parse_conf_clisock_filename(const char* cfgfile); ++extern const char* parse_conf_working_dir(const char* cfgfile); ++extern const char* parse_conf_username(const char* cfgfile); ++extern const char* parse_conf_group(const char* cfgfile); ++extern const char* parse_conf_chroot(const char* cfgfile); ++extern const char* parse_conf_datastore(const char* cfgfile); ++extern const char* parse_conf_db_host(const char* cfgfile); ++extern const char* parse_conf_db_username(const char* cfgfile); ++extern const char* parse_conf_db_password(const char* cfgfile); ++extern engineconfig_database_type_t parse_conf_db_type(const char *cfgfile); + + /** + * Parse elements from the configuration file. +@@ -94,15 +94,15 @@ + */ + + /** Common */ +-int parse_conf_use_syslog(const char* cfgfile); +-int parse_conf_verbosity(const char* cfgfile); ++extern int parse_conf_use_syslog(const char* cfgfile); ++extern int parse_conf_verbosity(const char* cfgfile); + + /** Enforcer specific */ +-int parse_conf_worker_threads(const char* cfgfile); +-int parse_conf_manual_keygen(const char* cfgfile); +-int parse_conf_db_port(const char *cfgfile); +-time_t parse_conf_automatic_keygen_period(const char* cfgfile); +-time_t parse_conf_rollover_notification(const char* cfgfile); +-hsm_repository_t* parse_conf_repositories(const char* cfgfile); ++extern int parse_conf_worker_threads(const char* cfgfile); ++extern int parse_conf_manual_keygen(const char* cfgfile); ++extern int parse_conf_db_port(const char *cfgfile); ++extern time_t parse_conf_automatic_keygen_period(const char* cfgfile); ++extern time_t parse_conf_rollover_notification(const char* cfgfile); ++extern hsm_repository_t* parse_conf_repositories(const char* cfgfile); + + #endif /* PARSE_CONFPARSER_H */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/policy/policy_export_cmd.h opendnssec-2.1.6/enforcer/src/policy/policy_export_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/policy/policy_export_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/policy/policy_export_cmd.h 2020-02-18 23:10:40.656024915 -0500 +@@ -30,6 +30,6 @@ + #ifndef _POLICY_POLICY_EXPORT_CMD_H_ + #define _POLICY_POLICY_EXPORT_CMD_H_ + +-struct cmd_func_block policy_export_funcblock; ++extern struct cmd_func_block policy_export_funcblock; + + #endif /* _POLICY_POLICY_EXPORT_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/policy/policy_export.h opendnssec-2.1.6/enforcer/src/policy/policy_export.h +--- opendnssec-2.1.6-orig/enforcer/src/policy/policy_export.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/policy/policy_export.h 2020-02-18 23:08:38.116360712 -0500 +@@ -64,7 +64,7 @@ + * \param[in] filename the filename to write to, if NULL write to stdout. + * \return POLICY_EXPORT_ERR_* on error otherwise POLICY_EXPORT_OK. + */ +-int policy_export_all(int sockfd, const db_connection_t* connection, const char* filename); ++extern int policy_export_all(int sockfd, const db_connection_t* connection, const char* filename); + + /** + * Export the policy from the database to XML. +@@ -73,6 +73,6 @@ + * \param[in] filename the filename to write to, if NULL write to stdout. + * \return POLICY_EXPORT_ERR_* on error otherwise POLICY_EXPORT_OK. + */ +-int policy_export(int sockfd, const policy_t* policy, const char* filename); ++extern int policy_export(int sockfd, const policy_t* policy, const char* filename); + + #endif /* _POLICY_POLICY_EXPORT_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/policy/policy_import_cmd.h opendnssec-2.1.6/enforcer/src/policy/policy_import_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/policy/policy_import_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/policy/policy_import_cmd.h 2020-02-18 23:11:07.911395068 -0500 +@@ -30,6 +30,6 @@ + #ifndef _POLICY_POLICY_IMPORT_CMD_H_ + #define _POLICY_POLICY_IMPORT_CMD_H_ + +-struct cmd_func_block policy_import_funcblock; ++extern struct cmd_func_block policy_import_funcblock; + + #endif /* _POLICY_POLICY_IMPORT_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/policy/policy_import.h opendnssec-2.1.6/enforcer/src/policy/policy_import.h +--- opendnssec-2.1.6-orig/enforcer/src/policy/policy_import.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/policy/policy_import.h 2020-02-18 23:08:38.116360712 -0500 +@@ -62,7 +62,7 @@ + * in the KASP if non-zero. + * \return POLICY_IMPORT_ERR_* on error otherwise POLICY_IMPORT_OK. + */ +-int policy_import(int sockfd, engine_type* engine, db_connection_t *dbconn, ++extern int policy_import(int sockfd, engine_type* engine, db_connection_t *dbconn, + int do_delete); + + #endif /* _POLICY_POLICY_IMPORT_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/policy/policy_list_cmd.h opendnssec-2.1.6/enforcer/src/policy/policy_list_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/policy/policy_list_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/policy/policy_list_cmd.h 2020-02-18 23:11:22.168588694 -0500 +@@ -30,6 +30,6 @@ + #ifndef _POLICY_POLICY_LIST_CMD_H_ + #define _POLICY_POLICY_LIST_CMD_H_ + +-struct cmd_func_block policy_list_funcblock; ++extern struct cmd_func_block policy_list_funcblock; + + #endif /* _POLICY_POLICY_LIST_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/policy/policy_purge_cmd.h opendnssec-2.1.6/enforcer/src/policy/policy_purge_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/policy/policy_purge_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/policy/policy_purge_cmd.h 2020-02-18 23:10:56.045233914 -0500 +@@ -1,6 +1,6 @@ + #ifndef _POLICY_POLICY_PURGE_CMD_H_ + #define _POLICY_POLICY_PURGE_CMD_H_ + +-struct cmd_func_block policy_purge_funcblock; ++extern struct cmd_func_block policy_purge_funcblock; + + #endif /* _POLICY_POLICY_PURGE_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/policy/policy_resalt_cmd.h opendnssec-2.1.6/enforcer/src/policy/policy_resalt_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/policy/policy_resalt_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/policy/policy_resalt_cmd.h 2020-02-18 23:11:35.034763428 -0500 +@@ -30,6 +30,6 @@ + #ifndef _POLICY_POLICY_RESALT_CMD_H_ + #define _POLICY_POLICY_RESALT_CMD_H_ + +-struct cmd_func_block resalt_funcblock; ++extern struct cmd_func_block resalt_funcblock; + + #endif /*_POLICY_POLICY_RESALT_CMD_H_*/ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/policy/policy_resalt_task.h opendnssec-2.1.6/enforcer/src/policy/policy_resalt_task.h +--- opendnssec-2.1.6-orig/enforcer/src/policy/policy_resalt_task.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/policy/policy_resalt_task.h 2020-02-18 23:08:38.116360712 -0500 +@@ -33,6 +33,6 @@ + #include "daemon/engine.h" + #include "scheduler/task.h" + +-int flush_resalt_task_all(engine_type *engine, db_connection_t *dbconn); ++extern int flush_resalt_task_all(engine_type *engine, db_connection_t *dbconn); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/signconf/signconf_cmd.h opendnssec-2.1.6/enforcer/src/signconf/signconf_cmd.h +--- opendnssec-2.1.6-orig/enforcer/src/signconf/signconf_cmd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/signconf/signconf_cmd.h 2020-02-18 23:08:38.116360712 -0500 +@@ -30,6 +30,6 @@ + #ifndef _SIGNCONF_SIGNCONF_CMD_H_ + #define _SIGNCONF_SIGNCONF_CMD_H_ + +-struct cmd_func_block signconf_funcblock; ++extern struct cmd_func_block signconf_funcblock; + + #endif /* _SIGNCONF_SIGNCONF_CMD_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/signconf/signconf_task.h opendnssec-2.1.6/enforcer/src/signconf/signconf_task.h +--- opendnssec-2.1.6-orig/enforcer/src/signconf/signconf_task.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/signconf/signconf_task.h 2020-02-18 23:08:38.116360712 -0500 +@@ -33,12 +33,12 @@ + #include "db/db_connection.h" + #include "db/policy.h" + +-void signconf_task_flush_zone(engine_type *engine, db_connection_t *dbconn, ++extern void signconf_task_flush_zone(engine_type *engine, db_connection_t *dbconn, + const char* zonename); + +-void signconf_task_flush_policy(engine_type *engine, db_connection_t *dbconn, ++extern void signconf_task_flush_policy(engine_type *engine, db_connection_t *dbconn, + policy_t const *policy); + +-void signconf_task_flush_all(engine_type *engine, db_connection_t *dbconn); ++extern void signconf_task_flush_all(engine_type *engine, db_connection_t *dbconn); + + #endif +diff -Naur opendnssec-2.1.6-orig/enforcer/src/signconf/signconf_xml.h opendnssec-2.1.6/enforcer/src/signconf/signconf_xml.h +--- opendnssec-2.1.6-orig/enforcer/src/signconf/signconf_xml.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/signconf/signconf_xml.h 2020-02-18 23:08:38.116360712 -0500 +@@ -72,7 +72,7 @@ + * \return SIGNCONF_EXPORT_ERR_* on error, otherwise SIGNCONF_EXPORT_OK or + * SIGNCONF_EXPORT_NO_CHANGE. + */ +-int signconf_export_all(int sockfd, const db_connection_t* connection, int force); ++extern int signconf_export_all(int sockfd, const db_connection_t* connection, int force); + + /** + * Export the signconf XML for zone. +@@ -81,7 +81,7 @@ + * \return SIGNCONF_EXPORT_ERR_* on error, otherwise SIGNCONF_EXPORT_OK or + * SIGNCONF_EXPORT_NO_CHANGE. + */ +-int ++extern int + signconf_export_zone(char const *zonename, db_connection_t* dbconn); + + /** +@@ -94,6 +94,6 @@ + * \return SIGNCONF_EXPORT_ERR_* on error, otherwise SIGNCONF_EXPORT_OK or + * SIGNCONF_EXPORT_NO_CHANGE. + */ +-int signconf_export_policy(int sockfd, const db_connection_t* connection, const policy_t* policy, int force); ++extern int signconf_export_policy(int sockfd, const db_connection_t* connection, const policy_t* policy, int force); + + #endif /* SIGNCONF_SIGNCONF_H_ */ +diff -Naur opendnssec-2.1.6-orig/enforcer/src/utils/kc_helper.h opendnssec-2.1.6/enforcer/src/utils/kc_helper.h +--- opendnssec-2.1.6-orig/enforcer/src/utils/kc_helper.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/enforcer/src/utils/kc_helper.h 2020-02-18 23:08:38.116360712 -0500 +@@ -45,44 +45,44 @@ + char *TokenLabel; + } KC_REPO; + +-int check_conf(const char *conf, char **kasp, char **zonelist, ++extern int check_conf(const char *conf, char **kasp, char **zonelist, + char ***repo_listout, int *repo_countout, int verbose); +-int check_kasp(const char *kasp, char **repo_list, int repo_count, int verbose, ++extern int check_kasp(const char *kasp, char **repo_list, int repo_count, int verbose, + char ***policy_names_out, int *policy_count_out); +-int check_zonelist(const char *zonelist, int verbose, char **policy_names, ++extern int check_zonelist(const char *zonelist, int verbose, char **policy_names, + int policy_count); + +-void log_init(int facility, const char *program_name); +-void log_switch(int facility, const char *program_name); +-void dual_log(const char *format, ...) ++extern void log_init(int facility, const char *program_name); ++extern void log_switch(int facility, const char *program_name); ++extern void dual_log(const char *format, ...) + #ifdef HAVE___ATTRIBUTE__ + __attribute__ ((format (printf, 1, 2))) + #endif + ; + + +-int check_rng(const char *filename, const char *rngfilename, int verbose); ++extern int check_rng(const char *filename, const char *rngfilename, int verbose); + +-int check_file(const char *filename, const char *log_string); +-int check_file_from_xpath(xmlXPathContextPtr xpath_ctx, const char *log_string, const xmlChar *file_xexpr); ++extern int check_file(const char *filename, const char *log_string); ++extern int check_file_from_xpath(xmlXPathContextPtr xpath_ctx, const char *log_string, const xmlChar *file_xexpr); + +-int check_path(const char *pathname, const char *log_string); +-int check_path_from_xpath(xmlXPathContextPtr xpath_ctx, const char *log_string, const xmlChar *path_xexpr); ++extern int check_path(const char *pathname, const char *log_string); ++extern int check_path_from_xpath(xmlXPathContextPtr xpath_ctx, const char *log_string, const xmlChar *path_xexpr); + +-int check_user_group(xmlXPathContextPtr xpath_ctx, const xmlChar *user_xexpr, const xmlChar *group_xexpr); ++extern int check_user_group(xmlXPathContextPtr xpath_ctx, const xmlChar *user_xexpr, const xmlChar *group_xexpr); + +-int check_time_def(const char *time_expr, const char *location, const char *field, const char *filename, int* interval); +-int check_time_def_from_xpath(xmlXPathContextPtr xpath_ctx, const xmlChar *time_xexpr, const char *location, const char *field, const char *filename); ++extern int check_time_def(const char *time_expr, const char *location, const char *field, const char *filename, int* interval); ++extern int check_time_def_from_xpath(xmlXPathContextPtr xpath_ctx, const xmlChar *time_xexpr, const char *location, const char *field, const char *filename); + + /* if repo_list NULL, will skip the check to see all repositories in kasp are available in conf */ +-int check_policy(xmlNode *curNode, const char *policy_name, char **repo_list, int repo_count, const char *kasp); ++extern int check_policy(xmlNode *curNode, const char *policy_name, char **repo_list, int repo_count, const char *kasp); + +-int DtXMLIntervalSeconds(const char* text, int* interval); +-int StrStrtoi(const char* string, int* value); +-int StrStrtol(const char* string, long* value); +-char* StrStrdup(const char* string); +-void StrTrimR(char *text); +-char* StrTrimL(char* text); +-void* MemCalloc(size_t nmemb, size_t size); ++extern int DtXMLIntervalSeconds(const char* text, int* interval); ++extern int StrStrtoi(const char* string, int* value); ++extern int StrStrtol(const char* string, long* value); ++extern char* StrStrdup(const char* string); ++extern void StrTrimR(char *text); ++extern char* StrTrimL(char* text); ++extern void* MemCalloc(size_t nmemb, size_t size); + + #endif /* KC_HELPER_H */ +diff -Naur opendnssec-2.1.6-orig/libhsm/src/lib/libhsmdns.h opendnssec-2.1.6/libhsm/src/lib/libhsmdns.h +--- opendnssec-2.1.6-orig/libhsm/src/lib/libhsmdns.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/libhsm/src/lib/libhsmdns.h 2020-02-18 23:08:38.116360712 -0500 +@@ -50,7 +50,7 @@ + /*! + * Returns an allocated hsm_sign_params_t with some defaults + */ +-hsm_sign_params_t * hsm_sign_params_new(void); ++extern hsm_sign_params_t * hsm_sign_params_new(void); + + + /*! +@@ -61,7 +61,7 @@ + + \param params The signer parameters to free + */ +-void ++extern void + hsm_sign_params_free(hsm_sign_params_t *params); + + +@@ -74,7 +74,7 @@ + \param key Key pair used to sign + \return ldns_rr* Signed RRset + */ +-ldns_rr* ++extern ldns_rr* + hsm_sign_rrset(hsm_ctx_t *ctx, + const ldns_rr_list* rrset, + const libhsm_key_t *key, +@@ -90,7 +90,7 @@ + \param sign_params the signing parameters (flags, algorithm, etc) + \return ldns_rr* + */ +-ldns_rr* ++extern ldns_rr* + hsm_get_dnskey(hsm_ctx_t *ctx, + const libhsm_key_t *key, + const hsm_sign_params_t *sign_params); +@@ -103,6 +103,6 @@ + * @param[out] keytag: the calculated keytag + * return: non-zero in case of failure + */ +-int hsm_keytag(const char* loc, int alg, int ksk, uint16_t* keytag); ++extern int hsm_keytag(const char* loc, int alg, int ksk, uint16_t* keytag); + + #endif /* HSMDNS_H */ +diff -Naur opendnssec-2.1.6-orig/libhsm/src/lib/libhsm.h opendnssec-2.1.6/libhsm/src/lib/libhsm.h +--- opendnssec-2.1.6-orig/libhsm/src/lib/libhsm.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/libhsm/src/lib/libhsm.h 2020-02-18 23:08:38.117360726 -0500 +@@ -158,7 +158,7 @@ + \param action action for which the error occured + \param message error message format string + */ +-void ++extern void + hsm_ctx_set_error(hsm_ctx_t *ctx, int error, const char *action, + const char *message, ...) + #ifdef HAVE___ATTRIBUTE__ +@@ -181,7 +181,7 @@ + function that takes a context can be passed NULL, in which case the + global context will be used) and log into each HSM. + */ +-int ++extern int + hsm_open2(hsm_repository_t* rlist, + char *(pin_callback)(unsigned int, const char *, unsigned int)); + +@@ -195,7 +195,7 @@ + \param use_pubkey Whether to store the public key in the HSM. + \return The created repository. + */ +-hsm_repository_t * ++extern hsm_repository_t * + hsm_repository_new(char* name, char* module, char* tokenlabel, char* pin, + uint8_t use_pubkey, uint8_t allowextract, uint8_t require_backup); + +@@ -203,7 +203,7 @@ + + \param r Repository list. + */ +-void ++extern void + hsm_repository_free(hsm_repository_t* r); + + /*! Function that queries for a PIN, can be used as callback +@@ -215,7 +215,7 @@ + \param mode The type of mode the function should run in. + \return The string the user enters + */ +-char * ++extern char * + hsm_prompt_pin(unsigned int id, const char *repository, unsigned int mode); + + +@@ -227,7 +227,7 @@ + \param mode The type of mode the function should run in. + \return The string the user enters + */ +-char * ++extern char * + hsm_check_pin(unsigned int id, const char *repository, unsigned int mode); + + +@@ -237,7 +237,7 @@ + semaphore. Any authenticated process will still be able to interact + with the HSM. + */ +-int ++extern int + hsm_logout_pin(void); + + +@@ -247,7 +247,7 @@ + This cleans up all data for libhsm, and should be the last function + called. + */ +-void ++extern void + hsm_close(void); + + +@@ -256,7 +256,7 @@ + Creates a new session for each attached HSM. The returned hsm_ctx_t * + can be freed with hsm_destroy_context() + */ +-hsm_ctx_t * ++extern hsm_ctx_t * + hsm_create_context(void); + + +@@ -268,7 +268,7 @@ + \param context HSM context + \return 0 if successful, !0 if failed + */ +-int ++extern int + hsm_check_context(); + + +@@ -278,10 +278,10 @@ + + Also destroys any associated sessions. + */ +-void ++extern void + hsm_destroy_context(hsm_ctx_t *context); + +-void ++extern void + libhsm_key_free(libhsm_key_t *key); + + /*! List all known keys in all attached HSMs +@@ -296,7 +296,7 @@ + \param context HSM context + \param count location to store the number of keys found + */ +-libhsm_key_t ** ++extern libhsm_key_t ** + hsm_list_keys(hsm_ctx_t *context, size_t *count); + + +@@ -313,7 +313,7 @@ + \param count location to store the number of keys found + \param repository repository to list the keys in + */ +-libhsm_key_t ** ++extern libhsm_key_t ** + hsm_list_keys_repository(hsm_ctx_t *context, + size_t *count, + const char *repository); +@@ -329,7 +329,7 @@ + string of hex characters) + \return key identifier or NULL if not found (or invalid input) + */ +-libhsm_key_t * ++extern libhsm_key_t * + hsm_find_key_by_id(hsm_ctx_t *context, + const char *id); + +@@ -346,7 +346,7 @@ + \param keysize Size of RSA key + \return return key identifier or NULL if key generation failed + */ +-libhsm_key_t * ++extern libhsm_key_t * + hsm_generate_rsa_key(hsm_ctx_t *context, + const char *repository, + unsigned long keysize); +@@ -363,7 +363,7 @@ + \param keysize Size of DSA key + \return return key identifier or NULL if key generation failed + */ +-libhsm_key_t * ++extern libhsm_key_t * + hsm_generate_dsa_key(hsm_ctx_t *context, + const char *repository, + unsigned long keysize); +@@ -379,7 +379,7 @@ + \param repository repository in where to create the key + \return return key identifier or NULL if key generation failed + */ +-libhsm_key_t * ++extern libhsm_key_t * + hsm_generate_gost_key(hsm_ctx_t *context, + const char *repository); + +@@ -395,7 +395,7 @@ + \param curve which curve to use + \return return key identifier or NULL if key generation failed + */ +-libhsm_key_t * ++extern libhsm_key_t * + hsm_generate_ecdsa_key(hsm_ctx_t *context, + const char *repository, + const char *curve); +@@ -410,7 +410,7 @@ + \param key Key pair to be removed + \return 0 if successful, !0 if failed + */ +-int ++extern int + hsm_remove_key(hsm_ctx_t *context, libhsm_key_t *key); + + +@@ -420,7 +420,7 @@ + \param key_list The array of keys to free + \param count The number of keys in the array + */ +-void ++extern void + libhsm_key_list_free(libhsm_key_t **key_list, size_t count); + + +@@ -432,7 +432,7 @@ + \param key Key pair to get the ID from + \return id of key pair + */ +-char * ++extern char * + hsm_get_key_id(hsm_ctx_t *context, + const libhsm_key_t *key); + +@@ -446,7 +446,7 @@ + \param key Key pair to get information about + \return key information + */ +-libhsm_key_info_t * ++extern libhsm_key_info_t * + hsm_get_key_info(hsm_ctx_t *context, + const libhsm_key_t *key); + +@@ -455,7 +455,7 @@ + + \param key_info The structure to free + */ +-void ++extern void + libhsm_key_info_free(libhsm_key_info_t *key_info); + + /*! Fill a buffer with random data from any attached HSM +@@ -466,7 +466,7 @@ + \return 0 if successful, !0 if failed + + */ +-int ++extern int + hsm_random_buffer(hsm_ctx_t *ctx, + unsigned char *buffer, + unsigned long length); +@@ -477,7 +477,7 @@ + \return 32-bit random number, or 0 if no HSM with a random generator is + attached + */ +-uint32_t ++extern uint32_t + hsm_random32(hsm_ctx_t *ctx); + + +@@ -486,7 +486,7 @@ + \return 64-bit random number, or 0 if no HSM with a random generator is + attached + */ +-uint64_t ++extern uint64_t + hsm_random64(hsm_ctx_t *ctx); + + +@@ -506,7 +506,7 @@ + \param config optional configuration + \return 0 on success, -1 on error + */ +-int ++extern int + hsm_attach(const char *repository, + const char *token_name, + const char *path, +@@ -518,7 +518,7 @@ + \param token_name The name of the token + \return 1 if the token is attached, 0 if not found + */ +-int ++extern int + hsm_token_attached(hsm_ctx_t *ctx, + const char *repository); + +@@ -530,15 +530,15 @@ + \return error message string + */ + +-char * ++extern char * + hsm_get_error(hsm_ctx_t *gctx); + + /* a few debug functions for applications */ +-void hsm_print_session(hsm_session_t *session); +-void hsm_print_ctx(hsm_ctx_t *ctx); +-void hsm_print_key(hsm_ctx_t *ctx, libhsm_key_t *key); +-void hsm_print_error(hsm_ctx_t *ctx); +-void hsm_print_tokeninfo(hsm_ctx_t *ctx); ++extern void hsm_print_session(hsm_session_t *session); ++extern void hsm_print_ctx(hsm_ctx_t *ctx); ++extern void hsm_print_key(hsm_ctx_t *ctx, libhsm_key_t *key); ++extern void hsm_print_error(hsm_ctx_t *ctx); ++extern void hsm_print_tokeninfo(hsm_ctx_t *ctx); + + /* implementation of a key cache per context, needs changing see + * OPENDNSSEC-799. +diff -Naur opendnssec-2.1.6-orig/signer/src/adapter/adapi.h opendnssec-2.1.6/signer/src/adapter/adapi.h +--- opendnssec-2.1.6-orig/signer/src/adapter/adapi.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/adapter/adapi.h 2020-02-18 23:08:38.117360726 -0500 +@@ -44,7 +44,7 @@ + * \return uint32_t inbound serial + * + */ +-uint32_t adapi_get_serial(zone_type* zone); ++extern uint32_t adapi_get_serial(zone_type* zone); + + /** + * Set the inbound serial. +@@ -52,7 +52,7 @@ + * \param[in] serial inbound serial + * + */ +-void adapi_set_serial(zone_type* zone, uint32_t serial); ++extern void adapi_set_serial(zone_type* zone, uint32_t serial); + + /** + * Get origin. +@@ -60,7 +60,7 @@ + * \return ldns_rdf* origin + * + */ +-ldns_rdf* adapi_get_origin(zone_type* zone); ++extern ldns_rdf* adapi_get_origin(zone_type* zone); + + /** + * Get ttl. +@@ -68,7 +68,7 @@ + * \return uint32_t ttl + * + */ +-uint32_t adapi_get_ttl(zone_type* zone); ++extern uint32_t adapi_get_ttl(zone_type* zone); + + /* + * Do full zone transaction. +@@ -76,7 +76,7 @@ + * \param[in] more_coming more transactions are possible + * + */ +-void adapi_trans_full(zone_type* zone, unsigned more_coming); ++extern void adapi_trans_full(zone_type* zone, unsigned more_coming); + + /* + * Do incremental zone transaction. +@@ -84,7 +84,7 @@ + * \param[in] more_coming more transactions are possible + * + */ +-void adapi_trans_diff(zone_type* zone, unsigned more_coming); ++extern void adapi_trans_diff(zone_type* zone, unsigned more_coming); + + /** + * Add RR. +@@ -94,7 +94,7 @@ + * \return ods_status status + * + */ +-ods_status adapi_add_rr(zone_type* zone, ldns_rr* rr, int backup); ++extern ods_status adapi_add_rr(zone_type* zone, ldns_rr* rr, int backup); + + /** + * Delete RR. +@@ -104,7 +104,7 @@ + * \return ods_status status + * + */ +-ods_status adapi_del_rr(zone_type* zone, ldns_rr* rr, int backup); ++extern ods_status adapi_del_rr(zone_type* zone, ldns_rr* rr, int backup); + + /** + * Print zonefile. +@@ -113,7 +113,7 @@ + * \return ods_status status + * + */ +-ods_status adapi_printzone(FILE* fd, zone_type* zone); ++extern ods_status adapi_printzone(FILE* fd, zone_type* zone); + + /** + * Print axfr. +@@ -122,7 +122,7 @@ + * \return ods_status status + * + */ +-ods_status adapi_printaxfr(FILE* fd, zone_type* zone); ++extern ods_status adapi_printaxfr(FILE* fd, zone_type* zone); + + /** + * Print ixfr. +@@ -131,6 +131,6 @@ + * \return ods_status status + * + */ +-ods_status adapi_printixfr(FILE* fd, zone_type* zone); ++extern ods_status adapi_printixfr(FILE* fd, zone_type* zone); + + #endif /* ADAPTER_ADAPI_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/adapter/adapter.h opendnssec-2.1.6/signer/src/adapter/adapter.h +--- opendnssec-2.1.6-orig/signer/src/adapter/adapter.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/adapter/adapter.h 2020-02-18 23:08:38.117360726 -0500 +@@ -71,7 +71,7 @@ + * \return adapter_type* created adapter + * + */ +-adapter_type* adapter_create(const char* str, adapter_mode type, unsigned in); ++extern adapter_type* adapter_create(const char* str, adapter_mode type, unsigned in); + + /** + * Load configuration. +@@ -79,7 +79,7 @@ + * \return ods_status status + * + */ +-ods_status adapter_load_config(adapter_type* adapter); ++extern ods_status adapter_load_config(adapter_type* adapter); + + /** + * Compare adapters. +@@ -88,7 +88,7 @@ + * \return int 0 on equal, -1 if a1 < a2, 1 if a1 > a2 + * + */ +-int adapter_compare(adapter_type* a1, adapter_type* a2); ++extern int adapter_compare(adapter_type* a1, adapter_type* a2); + + /** + * Read zone from input adapter. +@@ -96,7 +96,7 @@ + * \return ods_status status + * + */ +-ods_status adapter_read(zone_type* zone); ++extern ods_status adapter_read(zone_type* zone); + + /** + * Write zone to output adapter. +@@ -104,13 +104,13 @@ + * \return ods_status status + * + */ +-ods_status adapter_write(zone_type* zone); ++extern ods_status adapter_write(zone_type* zone); + + /** + * Clean up adapter. + * \param[in] adapter adapter to cleanup + * + */ +-void adapter_cleanup(adapter_type* adapter); ++extern void adapter_cleanup(adapter_type* adapter); + + #endif /* ADAPTER_ADAPTER_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/adapter/addns.h opendnssec-2.1.6/signer/src/adapter/addns.h +--- opendnssec-2.1.6-orig/signer/src/adapter/addns.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/adapter/addns.h 2020-02-18 23:08:38.117360726 -0500 +@@ -70,14 +70,14 @@ + * \return dnsin_type* DNS input adapter + * + */ +-dnsin_type* dnsin_create(void); ++extern dnsin_type* dnsin_create(void); + + /** + * Create DNS output adapter. + * \return dnsout_type* DNS output adapter + * + */ +-dnsout_type* dnsout_create(void); ++extern dnsout_type* dnsout_create(void); + + /** + * Update DNS input adapter. +@@ -87,7 +87,7 @@ + * \return ods_status status + * + */ +-ods_status dnsin_update(dnsin_type** addns, const char* filename, ++extern ods_status dnsin_update(dnsin_type** addns, const char* filename, + time_t* last_mod); + + /** +@@ -98,7 +98,7 @@ + * \return ods_status status + * + */ +-ods_status dnsout_update(dnsout_type** addns, const char* filename, ++extern ods_status dnsout_update(dnsout_type** addns, const char* filename, + time_t* last_mod); + + /** +@@ -113,7 +113,7 @@ + * \return ldns_rr* RR + * + */ +-ldns_rr* addns_read_rr(FILE* fd, char* line, ldns_rdf** orig, ldns_rdf** prev, ++extern ldns_rr* addns_read_rr(FILE* fd, char* line, ldns_rdf** orig, ldns_rdf** prev, + uint32_t* ttl, ldns_status* status, unsigned int* l); + + +@@ -123,7 +123,7 @@ + * \return ods_status status + * + */ +-ods_status addns_read(void* zone); ++extern ods_status addns_read(void* zone); + + /** + * Write zone to DNS output adapter. +@@ -131,20 +131,20 @@ + * \return ods_status status + * + */ +-ods_status addns_write(void* zone); ++extern ods_status addns_write(void* zone); + + /** + * Clean up DNS input adapter. + * \param[in] addns DNS input adapter + * + */ +-void dnsin_cleanup(dnsin_type* addns); ++extern void dnsin_cleanup(dnsin_type* addns); + + /** + * Clean up DNS output adapter. + * \param[in] addns DNS output adapter + * + */ +-void dnsout_cleanup(dnsout_type* addns); ++extern void dnsout_cleanup(dnsout_type* addns); + + #endif /* ADAPTER_ADDNS_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/adapter/adfile.h opendnssec-2.1.6/signer/src/adapter/adfile.h +--- opendnssec-2.1.6-orig/signer/src/adapter/adfile.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/adapter/adfile.h 2020-02-18 23:08:38.117360726 -0500 +@@ -49,7 +49,7 @@ + * \return ods_status status + * + */ +-ods_status adfile_read(void* zone); ++extern ods_status adfile_read(void* zone); + + /** + * Write zone to output file adapter. +@@ -58,6 +58,6 @@ + * \return ods_status status + * + */ +-ods_status adfile_write(void* zone, const char* filename); ++extern ods_status adfile_write(void* zone, const char* filename); + + #endif /* ADAPTER_ADFILE_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/adapter/adutil.h opendnssec-2.1.6/signer/src/adapter/adutil.h +--- opendnssec-2.1.6-orig/signer/src/adapter/adutil.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/adapter/adutil.h 2020-02-18 23:08:38.117360726 -0500 +@@ -48,7 +48,7 @@ + * \return int number of characters read + * + */ +-int adutil_readline_frm_file(FILE* fd, char* line, unsigned int* l, ++extern int adutil_readline_frm_file(FILE* fd, char* line, unsigned int* l, + int keep_comments); + + /* +@@ -57,7 +57,7 @@ + * \param[out] line_len maintain line length + * + */ +-void adutil_rtrim_line(char* line, int* line_len); ++extern void adutil_rtrim_line(char* line, int* line_len); + + /** + * Check for white space. +@@ -65,6 +65,6 @@ + * \param[in] line_len line length + * + */ +-int adutil_whitespace_line(char* line, int line_len); ++extern int adutil_whitespace_line(char* line, int line_len); + + #endif /* ADAPTER_ADUTIL_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/daemon/cfg.h opendnssec-2.1.6/signer/src/daemon/cfg.h +--- opendnssec-2.1.6-orig/signer/src/daemon/cfg.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/daemon/cfg.h 2020-02-18 23:08:38.117360726 -0500 +@@ -69,7 +69,7 @@ + * \return engineconfig_type* engine configuration + * + */ +-engineconfig_type* ++extern engineconfig_type* + engine_config(const char* cfgfile, int cmdline_verbosity); + + /** +@@ -80,7 +80,7 @@ + * else: error in configuration settings + * + */ +-ods_status engine_config_check(engineconfig_type* config); ++extern ods_status engine_config_check(engineconfig_type* config); + + /** + * Print engine configuration. +@@ -88,13 +88,13 @@ + * \param[in] config engine configuration + * + */ +-void engine_config_print(FILE* out, engineconfig_type* config); ++extern void engine_config_print(FILE* out, engineconfig_type* config); + + /** + * Clean up config. + * \param[in] config engine configuration + * + */ +-void engine_config_cleanup(engineconfig_type* config); ++extern void engine_config_cleanup(engineconfig_type* config); + + #endif /* DAEMON_CONFIG_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/daemon/dnshandler.h opendnssec-2.1.6/signer/src/daemon/dnshandler.h +--- opendnssec-2.1.6-orig/signer/src/daemon/dnshandler.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/daemon/dnshandler.h 2020-02-18 23:08:38.117360726 -0500 +@@ -67,7 +67,7 @@ + * \return dnshandler_type* created dns handler + * + */ +-dnshandler_type* dnshandler_create(listener_type* interfaces); ++extern dnshandler_type* dnshandler_create(listener_type* interfaces); + + /** + * Start dns handler listener. +@@ -75,21 +75,21 @@ + * \return ods_status status + * + */ +-ods_status dnshandler_listen(dnshandler_type* dnshandler); ++extern ods_status dnshandler_listen(dnshandler_type* dnshandler); + + /** + * Start dns handler. + * \param[in] dnshandler_type* dns handler + * + */ +-void dnshandler_start(dnshandler_type* dnshandler); ++extern void dnshandler_start(dnshandler_type* dnshandler); + + /** + * Signal dns handler. + * \param[in] dnshandler_type* dns handler + * + */ +-void dnshandler_signal(dnshandler_type* dnshandler); ++extern void dnshandler_signal(dnshandler_type* dnshandler); + + /** + * Forward notify to zone transfer handler. +@@ -98,7 +98,7 @@ + * \param[in] len packet length + * + */ +-void dnshandler_fwd_notify(dnshandler_type* dnshandler, ++extern void dnshandler_fwd_notify(dnshandler_type* dnshandler, + uint8_t* pkt, size_t len); + + /** +@@ -106,6 +106,6 @@ + * \param[in] dnshandler_type* dns handler + * + */ +-void dnshandler_cleanup(dnshandler_type* dnshandler); ++extern void dnshandler_cleanup(dnshandler_type* dnshandler); + + #endif /* DAEMON_DNSHANDLER_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/daemon/engine.h opendnssec-2.1.6/signer/src/daemon/engine.h +--- opendnssec-2.1.6-orig/signer/src/daemon/engine.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/daemon/engine.h 2020-02-18 23:08:38.117360726 -0500 +@@ -82,7 +82,7 @@ + * \return 0 if successful, 1 on error + * + */ +-int engine_start(const char* cfgfile, int cmdline_verbosity, ++extern int engine_start(const char* cfgfile, int cmdline_verbosity, + int daemonize, int info); + + /** +@@ -90,7 +90,7 @@ + * \param[in] engine engine + * + */ +-void engine_wakeup_workers(engine_type* engine); ++extern void engine_wakeup_workers(engine_type* engine); + + /** + * Update zones. +@@ -98,13 +98,13 @@ + * \param[in] zl_changed whether the zonelist has changed or not + * + */ +-void engine_update_zones(engine_type* engine, ods_status zl_changed); ++extern void engine_update_zones(engine_type* engine, ods_status zl_changed); + + /** + * Clean up engine. + * \param[in] engine engine + * + */ +-void engine_cleanup(engine_type* engine); ++extern void engine_cleanup(engine_type* engine); + + #endif /* DAEMON_ENGINE_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/daemon/signercommands.h opendnssec-2.1.6/signer/src/daemon/signercommands.h +--- opendnssec-2.1.6-orig/signer/src/daemon/signercommands.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/daemon/signercommands.h 2020-02-19 17:04:19.583845991 -0500 +@@ -35,7 +35,7 @@ + #include "config.h" + #include "cmdhandler.h" + +-struct cmd_func_block** signercommands; ++extern struct cmd_func_block** signercommands; + + extern engine_type* getglobalcontext(cmdhandler_ctx_type*); + +diff -Naur opendnssec-2.1.6-orig/signer/src/daemon/signertasks.h opendnssec-2.1.6/signer/src/daemon/signertasks.h +--- opendnssec-2.1.6-orig/signer/src/daemon/signertasks.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/daemon/signertasks.h 2020-02-18 23:08:38.118360739 -0500 +@@ -42,14 +42,14 @@ + time_t clock_in; + }; + +-void drudge(worker_type* worker); +-void task_schedule_easy(const char* zonename, task_id class, task_id type, time_t(*fn)(task_type*,const char*,void*,void*), void*, time_t time); ++extern void drudge(worker_type* worker); ++extern void task_schedule_easy(const char* zonename, task_id class, task_id type, time_t(*fn)(task_type*,const char*,void*,void*), void*, time_t time); + +-time_t do_readsignconf(task_type* task, const char* zonename, void* zonearg, void *contextarg); +-time_t do_forcereadsignconf(task_type* task, const char* zonename, void* zonearg, void *contextarg); +-time_t do_signzone(task_type* task, const char* zonename, void* zonearg, void *contextarg); +-time_t do_readzone(task_type* task, const char* zonename, void* zonearg, void *contextarg); +-time_t do_forcereadzone(task_type* task, const char* zonename, void* zonearg, void *contextarg); +-time_t do_writezone(task_type* task, const char* zonename, void* zonearg, void *contextarg); ++extern time_t do_readsignconf(task_type* task, const char* zonename, void* zonearg, void *contextarg); ++extern time_t do_forcereadsignconf(task_type* task, const char* zonename, void* zonearg, void *contextarg); ++extern time_t do_signzone(task_type* task, const char* zonename, void* zonearg, void *contextarg); ++extern time_t do_readzone(task_type* task, const char* zonename, void* zonearg, void *contextarg); ++extern time_t do_forcereadzone(task_type* task, const char* zonename, void* zonearg, void *contextarg); ++extern time_t do_writezone(task_type* task, const char* zonename, void* zonearg, void *contextarg); + + #endif /* SIGNERTASKS_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/daemon/xfrhandler.h opendnssec-2.1.6/signer/src/daemon/xfrhandler.h +--- opendnssec-2.1.6-orig/signer/src/daemon/xfrhandler.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/daemon/xfrhandler.h 2020-02-18 23:08:38.118360739 -0500 +@@ -79,14 +79,14 @@ + * \return xfrhandler_type* created zoned transfer handler + * + */ +-xfrhandler_type* xfrhandler_create(void); ++extern xfrhandler_type* xfrhandler_create(void); + + /** + * Start zone transfer handler. + * \param[in] xfrhandler_type* zone transfer handler + * + */ +-void xfrhandler_start(xfrhandler_type* xfrhandler); ++extern void xfrhandler_start(xfrhandler_type* xfrhandler); + + /** + * Get current time from the zone transfer handler. +@@ -94,20 +94,20 @@ + * \return time_t current time + * + */ +-time_t xfrhandler_time(xfrhandler_type* xfrhandler); ++extern time_t xfrhandler_time(xfrhandler_type* xfrhandler); + + /** + * Signal zone transfer handler. + * \param[in] xfrhandler_type* zone transfer handler + * + */ +-void xfrhandler_signal(xfrhandler_type* xfrhandler); ++extern void xfrhandler_signal(xfrhandler_type* xfrhandler); + + /** + * Cleanup zone transfer handler. + * \param[in] xfrhandler_type* zone transfer handler + * + */ +-void xfrhandler_cleanup(xfrhandler_type* xfrhandler); ++extern void xfrhandler_cleanup(xfrhandler_type* xfrhandler); + + #endif /* DAEMON_XFRHANDLER_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/hsm.h opendnssec-2.1.6/signer/src/hsm.h +--- opendnssec-2.1.6-orig/signer/src/hsm.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/hsm.h 2020-02-18 23:08:38.118360739 -0500 +@@ -51,7 +51,7 @@ + * \return ods_status status + * + */ +-ods_status lhsm_get_key(hsm_ctx_t* ctx, ldns_rdf* owner, key_type* key_id, int skip_hsm_access); ++extern ods_status lhsm_get_key(hsm_ctx_t* ctx, ldns_rdf* owner, key_type* key_id, int skip_hsm_access); + + /** + * Get RRSIG from one of the HSMs, given a RRset and a key. +@@ -64,7 +64,7 @@ + * \return ldns_rr* RRSIG record + * + */ +-ldns_rr* lhsm_sign(hsm_ctx_t* ctx, ldns_rr_list* rrset, key_type* key_id, ++extern ldns_rr* lhsm_sign(hsm_ctx_t* ctx, ldns_rr_list* rrset, key_type* key_id, + ldns_rdf* owner, time_t inception, time_t expiration); + + #endif /* SHARED_HSM_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/parser/addnsparser.h opendnssec-2.1.6/signer/src/parser/addnsparser.h +--- opendnssec-2.1.6-orig/signer/src/parser/addnsparser.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/parser/addnsparser.h 2020-02-18 23:08:38.118360739 -0500 +@@ -46,7 +46,7 @@ + * \return acl_type* ACL + * + */ +-acl_type* parse_addns_request_xfr(const char* filename, tsig_type* tsig); ++extern acl_type* parse_addns_request_xfr(const char* filename, tsig_type* tsig); + + /** + * Parse . +@@ -56,7 +56,7 @@ + * \return acl_type* ACL + * + */ +-acl_type* parse_addns_allow_notify(const char* filename, tsig_type* tsig); ++extern acl_type* parse_addns_allow_notify(const char* filename, tsig_type* tsig); + + /** + * Parse . +@@ -66,7 +66,7 @@ + * \return acl_type* ACL + * + */ +-acl_type* parse_addns_provide_xfr(const char* filename, tsig_type* tsig); ++extern acl_type* parse_addns_provide_xfr(const char* filename, tsig_type* tsig); + + /** + * Parse . +@@ -76,7 +76,7 @@ + * \return acl_type* ACL + * + */ +-acl_type* parse_addns_do_notify(const char* filename, tsig_type* tsig); ++extern acl_type* parse_addns_do_notify(const char* filename, tsig_type* tsig); + + /** + * Parse . +@@ -85,6 +85,6 @@ + * \return tsig_type* TSIG + * + */ +-tsig_type* parse_addns_tsig(const char* filename); ++extern tsig_type* parse_addns_tsig(const char* filename); + + #endif /* PARSER_ADDNSPARSER_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/parser/confparser.h opendnssec-2.1.6/signer/src/parser/confparser.h +--- opendnssec-2.1.6-orig/signer/src/parser/confparser.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/parser/confparser.h 2020-02-18 23:08:38.118360739 -0500 +@@ -46,7 +46,7 @@ + * \return ods_status status + * + */ +-ods_status parse_file_check(const char* cfgfile, const char* rngfile); ++extern ods_status parse_file_check(const char* cfgfile, const char* rngfile); + + /** + * Parse elements from the configuration file. +@@ -56,7 +56,7 @@ + * \return const char* string value + * + */ +-const char* parse_conf_string(const char* cfgfile, const char* expr, ++extern const char* parse_conf_string(const char* cfgfile, const char* expr, + int required); + + /** +@@ -65,7 +65,7 @@ + * \return hsm_repository_t* repositories + * + */ +-hsm_repository_t* parse_conf_repositories(const char* cfgfile); ++extern hsm_repository_t* parse_conf_repositories(const char* cfgfile); + + /** + * Parse the listener interfaces. +@@ -74,7 +74,7 @@ + * \return listener_type* listener interfaces + * + */ +-listener_type* parse_conf_listener(const char* cfgfile); ++extern listener_type* parse_conf_listener(const char* cfgfile); + + /** + * Parse elements from the configuration file. +@@ -85,17 +85,17 @@ + */ + + /** Common */ +-const char* parse_conf_zonelist_filename(const char* cfgfile); +-const char* parse_conf_log_filename(const char* cfgfile); ++extern const char* parse_conf_zonelist_filename(const char* cfgfile); ++extern const char* parse_conf_log_filename(const char* cfgfile); + + /** Signer specific */ +-const char* parse_conf_pid_filename(const char* cfgfile); +-const char* parse_conf_notify_command(const char* cfgfile); +-const char* parse_conf_clisock_filename(const char* cfgfile); +-const char* parse_conf_working_dir(const char* cfgfile); +-const char* parse_conf_username(const char* cfgfile); +-const char* parse_conf_group(const char* cfgfile); +-const char* parse_conf_chroot(const char* cfgfile); ++extern const char* parse_conf_pid_filename(const char* cfgfile); ++extern const char* parse_conf_notify_command(const char* cfgfile); ++extern const char* parse_conf_clisock_filename(const char* cfgfile); ++extern const char* parse_conf_working_dir(const char* cfgfile); ++extern const char* parse_conf_username(const char* cfgfile); ++extern const char* parse_conf_group(const char* cfgfile); ++extern const char* parse_conf_chroot(const char* cfgfile); + + /** + * Parse elements from the configuration file. +@@ -105,11 +105,11 @@ + */ + + /** Common */ +-int parse_conf_use_syslog(const char* cfgfile); +-int parse_conf_verbosity(const char* cfgfile); ++extern int parse_conf_use_syslog(const char* cfgfile); ++extern int parse_conf_verbosity(const char* cfgfile); + + /** Signer specific */ +-int parse_conf_worker_threads(const char* cfgfile); +-int parse_conf_signer_threads(const char* cfgfile); ++extern int parse_conf_worker_threads(const char* cfgfile); ++extern int parse_conf_signer_threads(const char* cfgfile); + + #endif /* PARSE_CONFPARSER_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/parser/signconfparser.h opendnssec-2.1.6/signer/src/parser/signconfparser.h +--- opendnssec-2.1.6-orig/signer/src/parser/signconfparser.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/parser/signconfparser.h 2020-02-18 23:08:38.118360739 -0500 +@@ -47,7 +47,7 @@ + * \return keylist_type* key list + * + */ +-keylist_type* parse_sc_keys(void* sc, const char* cfgfile); ++extern keylist_type* parse_sc_keys(void* sc, const char* cfgfile); + + /** + * Parse elements from the configuration file. +@@ -55,19 +55,19 @@ + * \return duration_type* duration + * + */ +-duration_type* parse_sc_sig_resign_interval(const char* cfgfile); +-duration_type* parse_sc_sig_refresh_interval(const char* cfgfile); +-duration_type* parse_sc_sig_validity_default(const char* cfgfile); +-duration_type* parse_sc_sig_validity_denial(const char* cfgfile); +-duration_type* parse_sc_sig_validity_keyset(const char* cfgfile); +-duration_type* parse_sc_sig_jitter(const char* cfgfile); +-duration_type* parse_sc_sig_inception_offset(const char* cfgfile); +-duration_type* parse_sc_dnskey_ttl(const char* cfgfile); +-const char** parse_sc_dnskey_sigrrs(const char* cfgfile); +-duration_type* parse_sc_nsec3param_ttl(const char* cfgfile); +-duration_type* parse_sc_soa_ttl(const char* cfgfile); +-duration_type* parse_sc_soa_min(const char* cfgfile); +-duration_type* parse_sc_max_zone_ttl(const char* cfgfile); ++extern duration_type* parse_sc_sig_resign_interval(const char* cfgfile); ++extern duration_type* parse_sc_sig_refresh_interval(const char* cfgfile); ++extern duration_type* parse_sc_sig_validity_default(const char* cfgfile); ++extern duration_type* parse_sc_sig_validity_denial(const char* cfgfile); ++extern duration_type* parse_sc_sig_validity_keyset(const char* cfgfile); ++extern duration_type* parse_sc_sig_jitter(const char* cfgfile); ++extern duration_type* parse_sc_sig_inception_offset(const char* cfgfile); ++extern duration_type* parse_sc_dnskey_ttl(const char* cfgfile); ++extern const char** parse_sc_dnskey_sigrrs(const char* cfgfile); ++extern duration_type* parse_sc_nsec3param_ttl(const char* cfgfile); ++extern duration_type* parse_sc_soa_ttl(const char* cfgfile); ++extern duration_type* parse_sc_soa_min(const char* cfgfile); ++extern duration_type* parse_sc_max_zone_ttl(const char* cfgfile); + + /** + * Parse elements from the configuration file. +@@ -75,7 +75,7 @@ + * \return ldns_rr_type rr type + * + */ +-ldns_rr_type parse_sc_nsec_type(const char* cfgfile); ++extern ldns_rr_type parse_sc_nsec_type(const char* cfgfile); + + /** + * Parse elements from the configuration file. +@@ -83,8 +83,8 @@ + * \return uint32_t integer + * + */ +-uint32_t parse_sc_nsec3_algorithm(const char* cfgfile); +-uint32_t parse_sc_nsec3_iterations(const char* cfgfile); ++extern uint32_t parse_sc_nsec3_algorithm(const char* cfgfile); ++extern uint32_t parse_sc_nsec3_iterations(const char* cfgfile); + + /** + * Parse elements from the configuration file. +@@ -92,14 +92,14 @@ + * \return int integer + * + */ +-int parse_sc_nsec3_optout(const char* cfgfile); ++extern int parse_sc_nsec3_optout(const char* cfgfile); + + /** + * Parse elements from the configuration file. + * \param[in] cfgfile the configuration file name. + * \return boolean + */ +-int parse_sc_passthrough(const char* cfgfile); ++extern int parse_sc_passthrough(const char* cfgfile); + + /** + * Parse elements from the configuration file. +@@ -107,7 +107,7 @@ + * \return const char* string + * + */ +-const char* parse_sc_soa_serial(const char* cfgfile); +-const char* parse_sc_nsec3_salt(const char* cfgfile); ++extern const char* parse_sc_soa_serial(const char* cfgfile); ++extern const char* parse_sc_nsec3_salt(const char* cfgfile); + + #endif /* PARSER_SIGNCONFPARSER_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/parser/zonelistparser.h opendnssec-2.1.6/signer/src/parser/zonelistparser.h +--- opendnssec-2.1.6-orig/signer/src/parser/zonelistparser.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/parser/zonelistparser.h 2020-02-18 23:08:38.118360739 -0500 +@@ -45,6 +45,6 @@ + * \return ods_status status + * + */ +-ods_status parse_zonelist_zones(void* zlist, const char* zlfile); ++extern ods_status parse_zonelist_zones(void* zlist, const char* zlfile); + + #endif /* PARSER_ZONELISTPARSER_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/signer/backup.h opendnssec-2.1.6/signer/src/signer/backup.h +--- opendnssec-2.1.6-orig/signer/src/signer/backup.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/signer/backup.h 2020-02-18 23:08:38.118360739 -0500 +@@ -45,7 +45,7 @@ + * \return char* read token + * + */ +-char* backup_read_token(FILE* in); ++extern char* backup_read_token(FILE* in); + + /** + * Read and match a string from backup file. +@@ -54,7 +54,7 @@ + * \return 1 if string was read and matched, 0 otherwise + * + */ +-int backup_read_check_str(FILE* in, const char* str); ++extern int backup_read_check_str(FILE* in, const char* str); + + /** + * Read a string from backup file. +@@ -63,7 +63,7 @@ + * \return int 1 on success, 0 otherwise + * + */ +-int backup_read_str(FILE* in, const char** str); ++extern int backup_read_str(FILE* in, const char** str); + + /** + * Read time from backup file. +@@ -72,7 +72,7 @@ + * \return int 1 on success, 0 otherwise + * + */ +-int backup_read_time_t(FILE* in, time_t* v); ++extern int backup_read_time_t(FILE* in, time_t* v); + + /** + * Read duration from backup file. +@@ -81,7 +81,7 @@ + * \return int 1 on success, 0 otherwise + * + */ +-int backup_read_duration(FILE* in, duration_type** v); ++extern int backup_read_duration(FILE* in, duration_type** v); + + /** + * Read rr type from backup file. +@@ -90,7 +90,7 @@ + * \return int 1 on success, 0 otherwise + * + */ +-int backup_read_rr_type(FILE* in, ldns_rr_type* v); ++extern int backup_read_rr_type(FILE* in, ldns_rr_type* v); + + /** + * Read integer from backup file. +@@ -99,7 +99,7 @@ + * \return int 1 on success, 0 otherwise + * + */ +-int backup_read_int(FILE* in, int* v); ++extern int backup_read_int(FILE* in, int* v); + + /** + * Read 8bit unsigned integer from backup file. +@@ -108,7 +108,7 @@ + * \return int 1 on success, 0 otherwise + * + */ +-int backup_read_uint8_t(FILE* in, uint8_t* v); ++extern int backup_read_uint8_t(FILE* in, uint8_t* v); + + /** + * Read 32bit unsigned integer from backup file. +@@ -117,7 +117,7 @@ + * \return int 1 on success, 0 otherwise + * + */ +-int backup_read_uint32_t(FILE* in, uint32_t* v); ++extern int backup_read_uint32_t(FILE* in, uint32_t* v); + + /** + * Read namedb from backup file. +@@ -126,7 +126,7 @@ + * \return ods_status status + * + */ +-ods_status backup_read_namedb(FILE* in, void* zone); ++extern ods_status backup_read_namedb(FILE* in, void* zone); + + /** + * Read ixfr journal from file. +@@ -135,6 +135,6 @@ + * \return ods_status status + * + */ +-ods_status backup_read_ixfr(FILE* in, void* zone); ++extern ods_status backup_read_ixfr(FILE* in, void* zone); + + #endif /* SIGNER_BACKUP_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/signer/denial.h opendnssec-2.1.6/signer/src/signer/denial.h +--- opendnssec-2.1.6-orig/signer/src/signer/denial.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/signer/denial.h 2020-02-18 23:08:38.118360739 -0500 +@@ -64,14 +64,14 @@ + * \return denial_type* denial of existence data point + * + */ +-denial_type* denial_create(zone_type* zoneptr, ldns_rdf* dname); ++extern denial_type* denial_create(zone_type* zoneptr, ldns_rdf* dname); + + /** + * Apply differences at denial. + * \param[in] denial Denial of Existence data point + * + */ +-void denial_diff(denial_type* denial); ++extern void denial_diff(denial_type* denial); + + /** + * Add NSEC(3) to the Denial of Existence data point. +@@ -79,7 +79,7 @@ + * \param[in] rr NSEC(3) resource record + * + */ +-void denial_add_rr(denial_type* denial, ldns_rr* rr); ++extern void denial_add_rr(denial_type* denial, ldns_rr* rr); + + /** + * Nsecify Denial of Existence data point. +@@ -88,7 +88,7 @@ + * \param[out] num_added number of RRs added + * + */ +-void denial_nsecify(denial_type* denial, denial_type* nxt, uint32_t* num_added); ++extern void denial_nsecify(denial_type* denial, denial_type* nxt, uint32_t* num_added); + + /** + * Print Denial of Existence data point. +@@ -97,13 +97,13 @@ + * \param[out] status status + * + */ +-void denial_print(FILE* fd, denial_type* denial, ods_status* status); ++extern void denial_print(FILE* fd, denial_type* denial, ods_status* status); + + /** + * Cleanup Denial of Existence data point. + * \param[in] denial denial of existence data point + * + */ +-void denial_cleanup(denial_type* denial); ++extern void denial_cleanup(denial_type* denial); + + #endif /* SIGNER_DENIAL_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/signer/domain.h opendnssec-2.1.6/signer/src/signer/domain.h +--- opendnssec-2.1.6-orig/signer/src/signer/domain.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/signer/domain.h 2020-02-18 23:08:38.119360753 -0500 +@@ -67,7 +67,7 @@ + * \param[in] level log level + * + */ +-void log_dname(ldns_rdf* rdf, const char* pre, int level); ++extern void log_dname(ldns_rdf* rdf, const char* pre, int level); + + /** + * Create domain. +@@ -76,7 +76,7 @@ + * \return domain_type* domain + * + */ +-domain_type* domain_create(zone_type* zone, ldns_rdf* dname); ++extern domain_type* domain_create(zone_type* zone, ldns_rdf* dname); + + /** + * Count the number of RRsets at this domain with RRs that have is_added. +@@ -84,7 +84,7 @@ + * \return size_t number of RRsets + * + */ +-size_t domain_count_rrset_is_added(domain_type* domain); ++extern size_t domain_count_rrset_is_added(domain_type* domain); + + /** + * Look up RRset at this domain. +@@ -93,7 +93,7 @@ + * \return rrset_type* RRset, if found + * + */ +-rrset_type* domain_lookup_rrset(domain_type* domain, ldns_rr_type rrtype); ++extern rrset_type* domain_lookup_rrset(domain_type* domain, ldns_rr_type rrtype); + + /** + * Add RRset to domain. +@@ -101,7 +101,7 @@ + * \param[in] rrset RRset + * + */ +-void domain_add_rrset(domain_type* domain, rrset_type* rrset); ++extern void domain_add_rrset(domain_type* domain, rrset_type* rrset); + + /** + * Apply differences at domain. +@@ -110,7 +110,7 @@ + * \param[in] more_coming more transactions possible + * + */ +-void domain_diff(domain_type* domain, unsigned is_ixfr, unsigned more_coming); ++extern void domain_diff(domain_type* domain, unsigned is_ixfr, unsigned more_coming); + + /** + * Rollback differences at domain. +@@ -118,7 +118,7 @@ + * \param[in] keepsc keep RRs that did not came from the adapter + * + */ +-void domain_rollback(domain_type* domain, int keepsc); ++extern void domain_rollback(domain_type* domain, int keepsc); + + /** + * Check whether a domain is an empty non-terminal to an unsigned delegation. +@@ -126,7 +126,7 @@ + * \return int yes or no + * + */ +-int domain_ent2unsignedns(domain_type* domain); ++extern int domain_ent2unsignedns(domain_type* domain); + + /** + * Check whether a domain is a delegation, regardless of parent. +@@ -137,7 +137,7 @@ + * LDNS_RR_TYPE_SOA Authoritative data (or signed delegation) + * + */ +-ldns_rr_type domain_is_delegpt(domain_type* domain); ++extern ldns_rr_type domain_is_delegpt(domain_type* domain); + + /** + * Check whether the domain is occluded. +@@ -148,7 +148,7 @@ + * LDNS_RR_TYPE_SOA Authoritative data or delegation + * + */ +-ldns_rr_type domain_is_occluded(domain_type* domain); ++extern ldns_rr_type domain_is_occluded(domain_type* domain); + + /** + * Print domain. +@@ -157,14 +157,14 @@ + * \param[out] status status + * + */ +-void domain_print(FILE* fd, domain_type* domain, ods_status* status); ++extern void domain_print(FILE* fd, domain_type* domain, ods_status* status); + + /** + * Clean up domain. + * \param[in] domain domain to cleanup + * + */ +-void domain_cleanup(domain_type* domain); ++extern void domain_cleanup(domain_type* domain); + + /** + * Backup domain. +@@ -173,6 +173,6 @@ + * \param[in] sigs do RRSIGS if true, otherwise do RRset + * + */ +-void domain_backup2(FILE* fd, domain_type* domain, int sigs); ++extern void domain_backup2(FILE* fd, domain_type* domain, int sigs); + + #endif /* SIGNER_DOMAIN_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/signer/ixfr.h opendnssec-2.1.6/signer/src/signer/ixfr.h +--- opendnssec-2.1.6-orig/signer/src/signer/ixfr.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/signer/ixfr.h 2020-02-18 23:08:38.119360753 -0500 +@@ -70,7 +70,7 @@ + * \return ixfr_type* ixfr + * + */ +-ixfr_type* ixfr_create(void); ++extern ixfr_type* ixfr_create(void); + + /** + * Add +RR to ixfr journal. +@@ -78,7 +78,7 @@ + * \param[in] rr +RR + * + */ +-void ixfr_add_rr(ixfr_type* ixfr, ldns_rr* rr); ++extern void ixfr_add_rr(ixfr_type* ixfr, ldns_rr* rr); + + /** + * Add -RR to ixfr journal. +@@ -86,7 +86,7 @@ + * \param[in] rr -RR + * + */ +-void ixfr_del_rr(ixfr_type* ixfr, ldns_rr* rr); ++extern void ixfr_del_rr(ixfr_type* ixfr, ldns_rr* rr); + + /** + * Print the ixfr journal. +@@ -94,20 +94,20 @@ + * \param[in] ixfr journal + * + */ +-int ixfr_print(FILE* fd, ixfr_type* ixfr); ++extern int ixfr_print(FILE* fd, ixfr_type* ixfr); + + /** + * Purge the ixfr journal. + * \param[in] ixfr journal + * + */ +-void ixfr_purge(ixfr_type* ixfr, char const *zonename); ++extern void ixfr_purge(ixfr_type* ixfr, char const *zonename); + + /** + * Cleanup the ixfr journal. + * \param[in] ixfr journal + * + */ +-void ixfr_cleanup(ixfr_type* ixfr); ++extern void ixfr_cleanup(ixfr_type* ixfr); + + #endif /* SIGNER_IXFR_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/signer/keys.h opendnssec-2.1.6/signer/src/signer/keys.h +--- opendnssec-2.1.6-orig/signer/src/signer/keys.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/signer/keys.h 2020-02-18 23:08:38.119360753 -0500 +@@ -75,7 +75,7 @@ + * \return keylist_type* key list + * + */ +-keylist_type* keylist_create(signconf_type* sc); ++extern keylist_type* keylist_create(signconf_type* sc); + + /** + * Lookup a key in the key list by locator. +@@ -84,7 +84,7 @@ + * \return key_type* key if it exists, NULL otherwise + * + */ +-key_type* keylist_lookup_by_locator(keylist_type* kl, const char* locator); ++extern key_type* keylist_lookup_by_locator(keylist_type* kl, const char* locator); + + /** + * Push a key to the keylist. +@@ -98,7 +98,7 @@ + * \return key_type* key + * + */ +-key_type* keylist_push(keylist_type* kl, const char* locator, const char* resourcerecord, ++extern key_type* keylist_push(keylist_type* kl, const char* locator, const char* resourcerecord, + uint8_t algorithm, uint32_t flags, int publish, int ksk, int zsk); + + /** +@@ -107,14 +107,14 @@ + * \param[in] name zone name + * + */ +-void keylist_log(keylist_type* kl, const char* name); ++extern void keylist_log(keylist_type* kl, const char* name); + + /** + * Clean up key list. + * \param[in] kl key list to clean up + * + */ +-void keylist_cleanup(keylist_type* kl); ++extern void keylist_cleanup(keylist_type* kl); + + /** + * Recover key from backup. +@@ -123,7 +123,7 @@ + * \return key_type* key + * + */ +-key_type* key_recover2(FILE* fd, keylist_type* kl); ++extern key_type* key_recover2(FILE* fd, keylist_type* kl); + + /** + * Backup key list. +@@ -132,6 +132,6 @@ + * \param[in] version version string + * + */ +-void keylist_backup(FILE* fd, keylist_type* kl, const char* version); ++extern void keylist_backup(FILE* fd, keylist_type* kl, const char* version); + + #endif /* SIGNER_KEYS_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/signer/namedb.h opendnssec-2.1.6/signer/src/signer/namedb.h +--- opendnssec-2.1.6-orig/signer/src/signer/namedb.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/signer/namedb.h 2020-02-18 23:08:38.119360753 -0500 +@@ -65,7 +65,7 @@ + * \param[in] db namedb + * + */ +-void namedb_init_denials(namedb_type* db); ++extern void namedb_init_denials(namedb_type* db); + + /** + * Create a new namedb. +@@ -73,7 +73,7 @@ + * \return namedb_type* namedb + * + */ +-namedb_type* namedb_create(void* zone); ++extern namedb_type* namedb_create(void* zone); + + /** + * Determine new SOA SERIAL. +@@ -84,7 +84,7 @@ + * \return ods_status status + * + */ +-ods_status namedb_update_serial(namedb_type* db, const char* zone_name, ++extern ods_status namedb_update_serial(namedb_type* db, const char* zone_name, + const char* format, uint32_t inbound_serial); + + /** +@@ -95,7 +95,7 @@ + * \return ods_status status + * + */ +-ods_status namedb_domain_entize(namedb_type* db, domain_type* domain, ++extern ods_status namedb_domain_entize(namedb_type* db, domain_type* domain, + ldns_rdf* apex); + + /** +@@ -105,7 +105,7 @@ + * \return domain_type* domain, if found + * + */ +-domain_type* namedb_lookup_domain(namedb_type* db, ldns_rdf* dname); ++extern domain_type* namedb_lookup_domain(namedb_type* db, ldns_rdf* dname); + + /** + * Add domain to namedb. +@@ -114,7 +114,7 @@ + * \return domain_type* added domain + * + */ +-domain_type* namedb_add_domain(namedb_type* db, ldns_rdf* dname); ++extern domain_type* namedb_add_domain(namedb_type* db, ldns_rdf* dname); + + /** + * Delete domain from namedb +@@ -123,7 +123,7 @@ + * \return domain_type* deleted domain + * + */ +-domain_type* namedb_del_domain(namedb_type* db, domain_type* domain); ++extern domain_type* namedb_del_domain(namedb_type* db, domain_type* domain); + + /** + * Lookup denial. +@@ -132,7 +132,7 @@ + * \return denial_type* denial, if found + * + */ +-denial_type* namedb_lookup_denial(namedb_type* db, ldns_rdf* dname); ++extern denial_type* namedb_lookup_denial(namedb_type* db, ldns_rdf* dname); + + /** + * Add denial to namedb. +@@ -142,7 +142,7 @@ + * \return denial_type* added denial + * + */ +-denial_type* namedb_add_denial(namedb_type* db, ldns_rdf* dname, ++extern denial_type* namedb_add_denial(namedb_type* db, ldns_rdf* dname, + nsec3params_type* n3p); + + /** +@@ -152,7 +152,7 @@ + * \return denial_type* deleted denial + * + */ +-denial_type* namedb_del_denial(namedb_type* db, denial_type* denial); ++extern denial_type* namedb_del_denial(namedb_type* db, denial_type* denial); + + /** + * Examine updates to namedb. +@@ -160,7 +160,7 @@ + * \return ods_status status + * + */ +-ods_status namedb_examine(namedb_type* db); ++extern ods_status namedb_examine(namedb_type* db); + + /** + * Apply differences in db. +@@ -169,7 +169,7 @@ + * \param[in] more_coming more transactions possible + * + */ +-void namedb_diff(namedb_type* db, unsigned is_ixfr, unsigned more_coming); ++extern void namedb_diff(namedb_type* db, unsigned is_ixfr, unsigned more_coming); + + /** + * Rollback differences in db. +@@ -177,7 +177,7 @@ + * \param[in] keepsc keep RRs that did not came from the adapter. + * + */ +-void namedb_rollback(namedb_type* db, unsigned keepsc); ++extern void namedb_rollback(namedb_type* db, unsigned keepsc); + + /** + * Nsecify db. +@@ -185,7 +185,7 @@ + * \param[out] num_added number of NSEC RRs added + * + */ +-void namedb_nsecify(namedb_type* db, uint32_t* num_added); ++extern void namedb_nsecify(namedb_type* db, uint32_t* num_added); + + /** + * Export db to file. +@@ -194,28 +194,28 @@ + * \param[out] status status + * + */ +-void namedb_export(FILE* fd, namedb_type* db, ods_status* status); ++extern void namedb_export(FILE* fd, namedb_type* db, ods_status* status); + + /** + * Wipe out all NSEC(3) RRsets. + * \param[in] db namedb + * + */ +-void namedb_wipe_denial(namedb_type* db); ++extern void namedb_wipe_denial(namedb_type* db); + + /** + * Clean up denial of existence chain. + * \param[in] db namedb + * + */ +-void namedb_cleanup_denials(namedb_type* db); ++extern void namedb_cleanup_denials(namedb_type* db); + + /** + * Clean up namedb. + * \param[in] namedb namedb + * + */ +-void namedb_cleanup(namedb_type* db); ++extern void namedb_cleanup(namedb_type* db); + + /** + * Backup namedb. +@@ -223,6 +223,6 @@ + * \param[in] zd zone data + * + */ +-void namedb_backup2(FILE* fd, namedb_type* db); ++extern void namedb_backup2(FILE* fd, namedb_type* db); + + #endif /* SIGNER_NAMEDB_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/signer/nsec3params.h opendnssec-2.1.6/signer/src/signer/nsec3params.h +--- opendnssec-2.1.6-orig/signer/src/signer/nsec3params.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/signer/nsec3params.h 2020-02-18 23:08:38.119360753 -0500 +@@ -62,7 +62,7 @@ + * \return ods_status status + * + */ +-ods_status nsec3params_create_salt(const char* salt_str, uint8_t* salt_len, ++extern ods_status nsec3params_create_salt(const char* salt_str, uint8_t* salt_len, + uint8_t** salt); + + /** +@@ -75,7 +75,7 @@ + * \return nsec3params_type* the created nsec3params + * + */ +-nsec3params_type* nsec3params_create(void* sc, uint8_t algo, uint8_t flags, ++extern nsec3params_type* nsec3params_create(void* sc, uint8_t algo, uint8_t flags, + uint16_t iter, const char* salt); + + /** +@@ -89,7 +89,7 @@ + * \param[in] version version string + * + */ +-void nsec3params_backup(FILE* fd, uint8_t algo, uint8_t flags, ++extern void nsec3params_backup(FILE* fd, uint8_t algo, uint8_t flags, + uint16_t iter, const char* salt, ldns_rr* rr, const char* version); + + /** +@@ -97,6 +97,6 @@ + * \param[in] nsec3params the nsec3param to be deleted + * + */ +-void nsec3params_cleanup(nsec3params_type* nsec3params); ++extern void nsec3params_cleanup(nsec3params_type* nsec3params); + + #endif /* SIGNER_NSEC3PARAMS_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/signer/rrset.h opendnssec-2.1.6/signer/src/signer/rrset.h +--- opendnssec-2.1.6-orig/signer/src/signer/rrset.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/signer/rrset.h 2020-02-18 23:08:38.119360753 -0500 +@@ -74,7 +74,7 @@ + * \param[in] level log level + * + */ +-void log_rr(ldns_rr* rr, const char* pre, int level); ++extern void log_rr(ldns_rr* rr, const char* pre, int level); + + /** + * Log RRset. +@@ -84,7 +84,7 @@ + * \param[in] level log level + * + */ +-void log_rrset(ldns_rdf* dname, ldns_rr_type type, const char* pre, int level); ++extern void log_rrset(ldns_rdf* dname, ldns_rr_type type, const char* pre, int level); + + /** + * Get the string-format of RRtype. +@@ -92,7 +92,7 @@ + * \return const char* string-format of RRtype + * + */ +-const char* rrset_type2str(ldns_rr_type type); ++extern const char* rrset_type2str(ldns_rr_type type); + + /** + * Create RRset. +@@ -101,7 +101,7 @@ + * \return rrset_type* RRset + * + */ +-rrset_type* rrset_create(zone_type* zone, ldns_rr_type type); ++extern rrset_type* rrset_create(zone_type* zone, ldns_rr_type type); + + /** + * Lookup RR in RRset. +@@ -110,13 +110,13 @@ + * \return rr_type* RR if found + * + */ +-rr_type* rrset_lookup_rr(rrset_type* rrset, ldns_rr* rr); ++extern rr_type* rrset_lookup_rr(rrset_type* rrset, ldns_rr* rr); + + /** + * What TTL should new RR's in this RRS get? + * + */ +-uint32_t rrset_lookup_ttl(rrset_type* rrset, uint32_t default_ttl); ++extern uint32_t rrset_lookup_ttl(rrset_type* rrset, uint32_t default_ttl); + + /** + * Count the number of RRs in this RRset that have is_added. +@@ -124,7 +124,7 @@ + * \return size_t number of RRs + * + */ +-size_t rrset_count_rr_is_added(rrset_type* rrset); ++extern size_t rrset_count_rr_is_added(rrset_type* rrset); + + /** + * Add RR to RRset. +@@ -133,7 +133,7 @@ + * \return rr_type* added RR + * + */ +-rr_type* rrset_add_rr(rrset_type* rrset, ldns_rr* rr); ++extern rr_type* rrset_add_rr(rrset_type* rrset, ldns_rr* rr); + + /** + * Delete RR from RRset. +@@ -141,7 +141,7 @@ + * \param[in] rrnum position of RR + * + */ +-void rrset_del_rr(rrset_type* rrset, uint16_t rrnum); ++extern void rrset_del_rr(rrset_type* rrset, uint16_t rrnum); + + /** + * Add RRSIG to RRset. +@@ -151,7 +151,7 @@ + * \param[in] flags key flags + * + */ +-void rrset_add_rrsig(rrset_type* rrset, ldns_rr* rr, ++extern void rrset_add_rrsig(rrset_type* rrset, ldns_rr* rr, + const char* locator, uint32_t flags); + + /** +@@ -160,7 +160,7 @@ + * \param[in] rrnum position of RRSIG + * + */ +-void rrset_drop_rrsigs(zone_type* zone, rrset_type* rrset); ++extern void rrset_drop_rrsigs(zone_type* zone, rrset_type* rrset); + + /** + * Apply differences at RRset. +@@ -169,7 +169,7 @@ + * \param[in] more_coming more transactions possible + * + */ +-void rrset_diff(rrset_type* rrset, unsigned is_ixfr, unsigned more_coming); ++extern void rrset_diff(rrset_type* rrset, unsigned is_ixfr, unsigned more_coming); + + /** + * Sign RRset. +@@ -179,7 +179,7 @@ + * \return ods_status status + * + */ +-ods_status rrset_sign(hsm_ctx_t* ctx, rrset_type* rrset, time_t signtime); ++extern ods_status rrset_sign(hsm_ctx_t* ctx, rrset_type* rrset, time_t signtime); + + /** + * Obtain a resource record (containing a signature of a dnskeyset or +@@ -189,7 +189,7 @@ + * \param[in] ttl the time-to-live to use if non is specified + * \param[in] apex the owner domain is none can be determined from input string + */ +-ods_status rrset_getliteralrr(ldns_rr** dnskey, const char *resourcerecord, uint32_t ttl, ldns_rdf* apex); ++extern ods_status rrset_getliteralrr(ldns_rr** dnskey, const char *resourcerecord, uint32_t ttl, ldns_rdf* apex); + + /** + * Print RRset. +@@ -199,7 +199,7 @@ + * \param[out] status status + * + */ +-void rrset_print(FILE* fd, rrset_type* rrset, int skip_rrsigs, ++extern void rrset_print(FILE* fd, rrset_type* rrset, int skip_rrsigs, + ods_status* status); + + /** +@@ -207,7 +207,7 @@ + * \param[in] rrset RRset to be cleaned up + * + */ +-void rrset_cleanup(rrset_type* rrset); ++extern void rrset_cleanup(rrset_type* rrset); + + /** + * Backup RRset. +@@ -215,8 +215,8 @@ + * \param[in] rrset RRset + * + */ +-void rrset_backup2(FILE* fd, rrset_type* rrset); ++extern void rrset_backup2(FILE* fd, rrset_type* rrset); + +-collection_class rrset_store_initialize(void); ++extern collection_class rrset_store_initialize(void); + + #endif /* SIGNER_RRSET_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/signer/signconf.h opendnssec-2.1.6/signer/src/signer/signconf.h +--- opendnssec-2.1.6-orig/signer/src/signer/signconf.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/signer/signconf.h 2020-02-18 23:08:38.119360753 -0500 +@@ -77,7 +77,7 @@ + * \return signconf_type* signer configuration + * + */ +-signconf_type* signconf_create(void); ++extern signconf_type* signconf_create(void); + + /** + * Update signer configuration. +@@ -87,7 +87,7 @@ + * \return ods_status status + * + */ +-ods_status signconf_update(signconf_type** signconf, const char* scfile, ++extern ods_status signconf_update(signconf_type** signconf, const char* scfile, + time_t last_modified); + + /** +@@ -97,7 +97,7 @@ + * \param[in] version version string + * + */ +-void signconf_backup(FILE* fd, signconf_type* sc, const char* version); ++extern void signconf_backup(FILE* fd, signconf_type* sc, const char* version); + + /** + * Check signer configuration. +@@ -105,7 +105,7 @@ + * \return ods_status status + * + */ +-ods_status signconf_check(signconf_type* signconf); ++extern ods_status signconf_check(signconf_type* signconf); + + /** + * Compare signer configurations on denial of existence material. +@@ -114,7 +114,7 @@ + * \return task_id what task needs to be scheduled + * + */ +-task_id signconf_compare_denial(signconf_type* a, signconf_type* b); ++extern task_id signconf_compare_denial(signconf_type* a, signconf_type* b); + + /** + * Log signer configuration. +@@ -122,13 +122,13 @@ + * \param[in] name zone name + * + */ +-void signconf_log(signconf_type* sc, const char* name); ++extern void signconf_log(signconf_type* sc, const char* name); + + /** + * Clean up signer configuration. + * \param[in] sc signconf to cleanup + * + */ +-void signconf_cleanup(signconf_type* sc); ++extern void signconf_cleanup(signconf_type* sc); + + #endif /* SIGNER_SIGNCONF_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/signer/stats.h opendnssec-2.1.6/signer/src/signer/stats.h +--- opendnssec-2.1.6-orig/signer/src/signer/stats.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/signer/stats.h 2020-02-18 23:08:38.119360753 -0500 +@@ -68,7 +68,7 @@ + * \return the initialized stats; + * + */ +-stats_type* stats_create(void); ++extern stats_type* stats_create(void); + + /** + * Log statistics. +@@ -78,7 +78,7 @@ + * \param[in] nsec_type NSEC or NSEC3 + * + */ +-void stats_log(stats_type* stats, const char* name, uint32_t serial, ++extern void stats_log(stats_type* stats, const char* name, uint32_t serial, + ldns_rr_type nsec_type); + + /** +@@ -86,13 +86,13 @@ + * \param[in] stats statistics to be cleared + * + */ +-void stats_clear(stats_type* stats); ++extern void stats_clear(stats_type* stats); + + /** + * Clean up statistics. + * \param[in] stats statistics to be deleted + * + */ +-void stats_cleanup(stats_type* stats); ++extern void stats_cleanup(stats_type* stats); + + #endif /* SIGNER_STATS_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/signer/tools.h opendnssec-2.1.6/signer/src/signer/tools.h +--- opendnssec-2.1.6-orig/signer/src/signer/tools.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/signer/tools.h 2020-02-18 23:08:38.120360767 -0500 +@@ -38,7 +38,7 @@ + * \return ods_status status + * + */ +-ods_status tools_signconf(zone_type* zone); ++extern ods_status tools_signconf(zone_type* zone); + + /** + * Read zone from input adapter. +@@ -46,7 +46,7 @@ + * \return ods_status status + * + */ +-ods_status tools_input(zone_type* zone); ++extern ods_status tools_input(zone_type* zone); + + /** + * Write zone to output adapter. +@@ -55,6 +55,6 @@ + * \return ods_status status + * + */ +-ods_status tools_output(zone_type* zone, engine_type* engine); ++extern ods_status tools_output(zone_type* zone, engine_type* engine); + + #endif /* SIGNER_TOOLS_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/signer/zone.h opendnssec-2.1.6/signer/src/signer/zone.h +--- opendnssec-2.1.6-orig/signer/src/signer/zone.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/signer/zone.h 2020-02-18 23:08:38.120360767 -0500 +@@ -98,7 +98,7 @@ + * \return zone_type* zone + * + */ +-zone_type* zone_create(char* name, ldns_rr_class klass); ++extern zone_type* zone_create(char* name, ldns_rr_class klass); + + /** + * Load signer configuration for zone. +@@ -110,7 +110,7 @@ + * other: signer configuration not loaded, error occurred + * + */ +-ods_status zone_load_signconf(zone_type* zone, signconf_type** new_signconf); ++extern ods_status zone_load_signconf(zone_type* zone, signconf_type** new_signconf); + + /** + * Reschedule task for zone. +@@ -120,7 +120,7 @@ + * \return ods_status status + * + */ +-ods_status zone_reschedule_task(zone_type* zone, schedule_type* taskq, ++extern ods_status zone_reschedule_task(zone_type* zone, schedule_type* taskq, + task_id what); + + /** +@@ -129,14 +129,14 @@ + * \return ods_status status + * + */ +-ods_status zone_publish_dnskeys(zone_type* zone, int skip_hsm_access); ++extern ods_status zone_publish_dnskeys(zone_type* zone, int skip_hsm_access); + + /** + * Unlink DNSKEY RRs. + * \param[in] zone zone + * + */ +-void zone_rollback_dnskeys(zone_type* zone); ++extern void zone_rollback_dnskeys(zone_type* zone); + + /** + * Publish the NSEC3 parameters as indicated by the signer configuration. +@@ -144,14 +144,14 @@ + * \return ods_status status + * + */ +-ods_status zone_publish_nsec3param(zone_type* zone); ++extern ods_status zone_publish_nsec3param(zone_type* zone); + + /** + * Unlink NSEC3PARAM RR. + * \param[in] zone zone + * + */ +-void zone_rollback_nsec3param(zone_type* zone); ++extern void zone_rollback_nsec3param(zone_type* zone); + + /** + * Prepare keys for signing. +@@ -159,7 +159,7 @@ + * \return ods_status status + * + */ +-ods_status zone_prepare_keys(zone_type* zone); ++extern ods_status zone_prepare_keys(zone_type* zone); + + /** + * Update serial. +@@ -167,7 +167,7 @@ + * \return ods_status status + * + */ +-ods_status zone_update_serial(zone_type* zone); ++extern ods_status zone_update_serial(zone_type* zone); + + /** + * Lookup RRset. +@@ -177,7 +177,7 @@ + * \return rrset_type* RRset, if found + * + */ +-rrset_type* zone_lookup_rrset(zone_type* zone, ldns_rdf* owner, ++extern rrset_type* zone_lookup_rrset(zone_type* zone, ldns_rdf* owner, + ldns_rr_type type); + + /** +@@ -191,7 +191,7 @@ + * other: rr not added to zone, error occurred + * + */ +-ods_status zone_add_rr(zone_type* zone, ldns_rr* rr, int do_stats); ++extern ods_status zone_add_rr(zone_type* zone, ldns_rr* rr, int do_stats); + + /** + * Delete RR. +@@ -204,13 +204,13 @@ + * other: rr not removed from zone, error occurred + * + */ +-ods_status zone_del_rr(zone_type* zone, ldns_rr* rr, int do_stats); ++extern ods_status zone_del_rr(zone_type* zone, ldns_rr* rr, int do_stats); + + /** + * Remove all NSEC3PARAM RRs from the zone + * \return ODS_STATUS_UNCHANGED or ODS_STATUS_OK + */ +-ods_status zone_del_nsec3params(zone_type* zone); ++extern ods_status zone_del_nsec3params(zone_type* zone); + + /** + * Merge zones. Values that are merged: +@@ -222,14 +222,14 @@ + * \param[in] z2 zone with new values + * + */ +-void zone_merge(zone_type* z1, zone_type* z2); ++extern void zone_merge(zone_type* z1, zone_type* z2); + + /** + * Clean up zone. + * \param[in] zone zone + * + */ +-void zone_cleanup(zone_type* zone); ++extern void zone_cleanup(zone_type* zone); + + /** + * Backup zone. +@@ -237,13 +237,13 @@ + * \return ods_status status + * + */ +-ods_status zone_backup2(zone_type* zone, time_t nextResign); ++extern ods_status zone_backup2(zone_type* zone, time_t nextResign); + + /** + * Recover zone from backup. + * \param[in] zone corresponding zone + * + */ +-ods_status zone_recover2(engine_type* engine, zone_type* zone); ++extern ods_status zone_recover2(engine_type* engine, zone_type* zone); + + #endif /* SIGNER_ZONE_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/signer/zonelist.h opendnssec-2.1.6/signer/src/signer/zonelist.h +--- opendnssec-2.1.6-orig/signer/src/signer/zonelist.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/signer/zonelist.h 2020-02-18 23:08:38.120360767 -0500 +@@ -56,7 +56,7 @@ + * \return zonelist_type* created zone list + * + */ +-zonelist_type* zonelist_create(void); ++extern zonelist_type* zonelist_create(void); + + /** + * Lookup zone by name and class. +@@ -66,7 +66,7 @@ + * \return zone_type* found zone + * + */ +-zone_type* zonelist_lookup_zone_by_name(zonelist_type* zonelist, ++extern zone_type* zonelist_lookup_zone_by_name(zonelist_type* zonelist, + const char* name, ldns_rr_class klass); + + /** +@@ -77,7 +77,7 @@ + * \return zone_type* found zone + * + */ +-zone_type* zonelist_lookup_zone_by_dname(zonelist_type* zonelist, ++extern zone_type* zonelist_lookup_zone_by_dname(zonelist_type* zonelist, + ldns_rdf* dname, ldns_rr_class klass); + + /** +@@ -87,7 +87,7 @@ + * \return zone_type* added zone + * + */ +-zone_type* zonelist_add_zone(zonelist_type* zl, zone_type* zone); ++extern zone_type* zonelist_add_zone(zonelist_type* zl, zone_type* zone); + + /** + * Delete zone. +@@ -95,7 +95,7 @@ + * \param[in] zone zone + * + */ +-void zonelist_del_zone(zonelist_type* zlist, zone_type* zone); ++extern void zonelist_del_zone(zonelist_type* zlist, zone_type* zone); + + /** + * Update zonelist. +@@ -104,20 +104,20 @@ + * \return ods_status status + * + */ +-ods_status zonelist_update(zonelist_type* zl, const char* zlfile); ++extern ods_status zonelist_update(zonelist_type* zl, const char* zlfile); + + /** + * Clean up zone list. + * \param[in] zl zone list + * + */ +-void zonelist_cleanup(zonelist_type* zl); ++extern void zonelist_cleanup(zonelist_type* zl); + + /** + * Free zone list. + * \param[in] zl zone list + * + */ +-void zonelist_free(zonelist_type* zl); ++extern void zonelist_free(zonelist_type* zl); + + #endif /* SIGNER_ZONELIST_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/wire/acl.h opendnssec-2.1.6/signer/src/wire/acl.h +--- opendnssec-2.1.6-orig/signer/src/wire/acl.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/wire/acl.h 2020-02-18 23:08:38.120360767 -0500 +@@ -81,7 +81,7 @@ + * \return acl_type* ACL + * + */ +-acl_type* acl_create(char* address, ++extern acl_type* acl_create(char* address, + char* port, char* tsig_name, tsig_type* tsig); + + /** +@@ -92,7 +92,7 @@ + * \return acl_type* ACL that matches + * + */ +-acl_type* acl_find(acl_type* acl, struct sockaddr_storage* addr, ++extern acl_type* acl_find(acl_type* acl, struct sockaddr_storage* addr, + tsig_rr_type* tsig); + + /** +@@ -101,7 +101,7 @@ + * \return int address family + * + */ +-int acl_parse_family(const char* a); ++extern int acl_parse_family(const char* a); + + /** + * Address storage to IP string. +@@ -111,7 +111,7 @@ + * \return int 0 if failed, 1 otherwise + * + */ +-int addr2ip(struct sockaddr_storage addr, char* ip, size_t len); ++extern int addr2ip(struct sockaddr_storage addr, char* ip, size_t len); + + /** + * Clean up ACL. +@@ -119,6 +119,6 @@ + * \param[in] allocator memory allocator + * + */ +-void acl_cleanup(acl_type* acl); ++extern void acl_cleanup(acl_type* acl); + + #endif /* WIRE_ACL_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/wire/axfr.h opendnssec-2.1.6/signer/src/wire/axfr.h +--- opendnssec-2.1.6-orig/signer/src/wire/axfr.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/wire/axfr.h 2020-02-18 23:08:38.120360767 -0500 +@@ -49,7 +49,7 @@ + * \return query_state state of the query + * + */ +-query_state soa_request(query_type* q, engine_type* engine); ++extern query_state soa_request(query_type* q, engine_type* engine); + + /** + * Do AXFR. +@@ -59,7 +59,7 @@ + * \return query_state state of the query + * + */ +-query_state axfr(query_type* q, engine_type* engine, int fallback); ++extern query_state axfr(query_type* q, engine_type* engine, int fallback); + + /** + * Do IXFR. +@@ -68,6 +68,6 @@ + * \return query_state state of the query + * + */ +-query_state ixfr(query_type* q, engine_type* engine); ++extern query_state ixfr(query_type* q, engine_type* engine); + + #endif /* WIRE_AXFR_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/wire/buffer.h opendnssec-2.1.6/signer/src/wire/buffer.h +--- opendnssec-2.1.6-orig/signer/src/wire/buffer.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/wire/buffer.h 2020-02-18 23:08:38.120360767 -0500 +@@ -124,7 +124,7 @@ + * \return buffer_type* buffer + * + */ +-buffer_type* buffer_create(size_t capacity); ++extern buffer_type* buffer_create(size_t capacity); + + /** + * Clear the buffer and make it ready for writing. +@@ -132,7 +132,7 @@ + * \param[in] buffer buffer + * + */ +-void buffer_clear(buffer_type* buffer); ++extern void buffer_clear(buffer_type* buffer); + + /** + * Flip the buffer and make it ready for reading. +@@ -150,7 +150,7 @@ + * \return size_t position + * + */ +-size_t buffer_position(buffer_type* buffer); ++extern size_t buffer_position(buffer_type* buffer); + + /** + * Set the buffer's position. +@@ -159,7 +159,7 @@ + * \param[in] pos position + * + */ +-void buffer_set_position(buffer_type* buffer, size_t pos); ++extern void buffer_set_position(buffer_type* buffer, size_t pos); + + /** + * Change the buffer's position. +@@ -169,7 +169,7 @@ + * \param[in] count number of bytes to skip + * + */ +-void buffer_skip(buffer_type* buffer, ssize_t count); ++extern void buffer_skip(buffer_type* buffer, ssize_t count); + + /** + * Change the buffer's position so that one dname is skipped. +@@ -178,7 +178,7 @@ + * 1 otherwise + * + */ +-int buffer_skip_dname(buffer_type* buffer); ++extern int buffer_skip_dname(buffer_type* buffer); + + /** + * Change the buffer's position so that one RR is skipped. +@@ -188,7 +188,7 @@ + * 1 otherwise + * + */ +-int buffer_skip_rr(buffer_type* buffer, unsigned qrr); ++extern int buffer_skip_rr(buffer_type* buffer, unsigned qrr); + + /** + * Get the buffer's limit. +@@ -196,7 +196,7 @@ + * \return size_t limit + * + */ +-size_t buffer_limit(buffer_type* buffer); ++extern size_t buffer_limit(buffer_type* buffer); + + /** + * Set the buffer's limit. If the buffer's position is greater +@@ -205,7 +205,7 @@ + * \param[in] limit limit + * + */ +-void buffer_set_limit(buffer_type* buffer, size_t limit); ++extern void buffer_set_limit(buffer_type* buffer, size_t limit); + + /** + * Get the buffer's capacity. +@@ -213,7 +213,7 @@ + * \return size_t capacity + * + */ +-size_t buffer_capacity(buffer_type* buffer); ++extern size_t buffer_capacity(buffer_type* buffer); + + /** + * Return a pointer to the data at the indicated position. +@@ -222,7 +222,7 @@ + * \return uint8_t* pointer to the data at the indicated position + * + */ +-uint8_t* buffer_at(buffer_type* buffer, size_t at); ++extern uint8_t* buffer_at(buffer_type* buffer, size_t at); + + /** + * Return a pointer to the data at the beginning of the buffer. +@@ -230,7 +230,7 @@ + * \return uint8_t* pointer to the data at the begin of the buffer + * + */ +-uint8_t* buffer_begin(buffer_type* buffer); ++extern uint8_t* buffer_begin(buffer_type* buffer); + + /** + * Return a pointer to the data at the buffer's current position. +@@ -238,7 +238,7 @@ + * \return uint8_t* pointer to the data at the buffer's current position + * + */ +-uint8_t* buffer_current(buffer_type* buffer); ++extern uint8_t* buffer_current(buffer_type* buffer); + + /** + * The number of bytes remaining between the buffer's position and limit. +@@ -246,7 +246,7 @@ + * \return size_t remaining number of bytes + * + */ +-size_t buffer_remaining(buffer_type* buffer); ++extern size_t buffer_remaining(buffer_type* buffer); + + /** + * Check if the buffer has enough bytes available. +@@ -256,7 +256,7 @@ + * 1 otherwise + * + */ +-int buffer_available(buffer_type* buffer, size_t count); ++extern int buffer_available(buffer_type* buffer, size_t count); + + /** + * Write to buffer. +@@ -265,7 +265,7 @@ + * \param[in] count number of bytes to write + * + */ +-void buffer_write(buffer_type* buffer, const void* data, size_t count); ++extern void buffer_write(buffer_type* buffer, const void* data, size_t count); + + /** + * Write uint8_t to buffer. +@@ -273,7 +273,7 @@ + * \param[in] data data to write + * + */ +-void buffer_write_u8(buffer_type* buffer, uint8_t data); ++extern void buffer_write_u8(buffer_type* buffer, uint8_t data); + + /** + * Write uint16_t to buffer. +@@ -281,7 +281,7 @@ + * \param[in] data data to write + * + */ +-void buffer_write_u16(buffer_type* buffer, uint16_t data); ++extern void buffer_write_u16(buffer_type* buffer, uint16_t data); + + /** + * Write uint16_t to buffer at indicated position. +@@ -290,7 +290,7 @@ + * \param[in] data data to write + * + */ +-void buffer_write_u16_at(buffer_type* buffer, size_t at, uint16_t data); ++extern void buffer_write_u16_at(buffer_type* buffer, size_t at, uint16_t data); + + /** + * Write uint32_t to buffer. +@@ -298,7 +298,7 @@ + * \param[in] data data to write + * + */ +-void buffer_write_u32(buffer_type* buffer, uint32_t data); ++extern void buffer_write_u32(buffer_type* buffer, uint32_t data); + + /** + * Write rdf to buffer. +@@ -306,7 +306,7 @@ + * \param[in] rdf data to write + * + */ +-void buffer_write_rdf(buffer_type* buffer, ldns_rdf* rdf); ++extern void buffer_write_rdf(buffer_type* buffer, ldns_rdf* rdf); + + /** + * Write rr to buffer. +@@ -315,7 +315,7 @@ + * \return int 1 if rr fits, 0 otherwise + * + */ +-int buffer_write_rr(buffer_type* buffer, ldns_rr* rr); ++extern int buffer_write_rr(buffer_type* buffer, ldns_rr* rr); + + /** + * Read from buffer. +@@ -324,7 +324,7 @@ + * \param[in] count number of bytes to read + * + */ +-void buffer_read(buffer_type* buffer, void* data, size_t count); ++extern void buffer_read(buffer_type* buffer, void* data, size_t count); + + /** + * Read uint8_t from buffer. +@@ -332,7 +332,7 @@ + * \return uint8_t read data + * + */ +-uint8_t buffer_read_u8(buffer_type* buffer); ++extern uint8_t buffer_read_u8(buffer_type* buffer); + + /** + * Read uint16_t from buffer. +@@ -340,7 +340,7 @@ + * \return uint16_t read data + * + */ +-uint16_t buffer_read_u16(buffer_type* buffer); ++extern uint16_t buffer_read_u16(buffer_type* buffer); + + /** + * Read uint32_t from buffer. +@@ -348,7 +348,7 @@ + * \return uint32_t read data + * + */ +-uint32_t buffer_read_u32(buffer_type* buffer); ++extern uint32_t buffer_read_u32(buffer_type* buffer); + + /** + * Read dname from buffer. +@@ -358,7 +358,7 @@ + * \return int dname length + * + */ +-size_t buffer_read_dname(buffer_type* buffer, uint8_t* dname, ++extern size_t buffer_read_dname(buffer_type* buffer, uint8_t* dname, + unsigned allow_pointers); + + /** +@@ -367,14 +367,14 @@ + * \return uint16_t query id + * + */ +-uint16_t buffer_pkt_id(buffer_type* buffer); ++extern uint16_t buffer_pkt_id(buffer_type* buffer); + + /** + * Set random query id in buffer. + * \param[in] buffer buffer + * + */ +-void buffer_pkt_set_random_id(buffer_type* buffer); ++extern void buffer_pkt_set_random_id(buffer_type* buffer); + + /** + * Get flags from buffer. +@@ -382,7 +382,7 @@ + * \return uint16_t flags + * + */ +-uint16_t buffer_pkt_flags(buffer_type* buffer); ++extern uint16_t buffer_pkt_flags(buffer_type* buffer); + + /** + * Set flags in buffer. +@@ -390,7 +390,7 @@ + * \param[in] flags flags + * + */ +-void buffer_pkt_set_flags(buffer_type* buffer, uint16_t flags); ++extern void buffer_pkt_set_flags(buffer_type* buffer, uint16_t flags); + + /** + * Get QR bit from buffer. +@@ -399,21 +399,21 @@ + * 1 if QR bit is set + * + */ +-int buffer_pkt_qr(buffer_type* buffer); ++extern int buffer_pkt_qr(buffer_type* buffer); + + /** + * Set QR bit in buffer. + * \param[in] buffer buffer + * + */ +-void buffer_pkt_set_qr(buffer_type* buffer); ++extern void buffer_pkt_set_qr(buffer_type* buffer); + + /** + * Clear QR bit in buffer. + * \param[in] buffer buffer + * + */ +-void buffer_pkt_clear_qr(buffer_type* buffer); ++extern void buffer_pkt_clear_qr(buffer_type* buffer); + + /** + * Get AA bit from buffer. +@@ -422,14 +422,14 @@ + * 1 if AA bit is set + * + */ +-int buffer_pkt_aa(buffer_type* buffer); ++extern int buffer_pkt_aa(buffer_type* buffer); + + /** + * Set AA bit in buffer. + * \param[in] buffer buffer + * + */ +-void buffer_pkt_set_aa(buffer_type* buffer); ++extern void buffer_pkt_set_aa(buffer_type* buffer); + + /** + * Get TC bit from buffer. +@@ -438,7 +438,7 @@ + * 1 if TC bit is set + * + */ +-int buffer_pkt_tc(buffer_type* buffer); ++extern int buffer_pkt_tc(buffer_type* buffer); + + /** + * Get RD bit from buffer. +@@ -447,7 +447,7 @@ + * 1 if RD bit is set + * + */ +-int buffer_pkt_rd(buffer_type* buffer); ++extern int buffer_pkt_rd(buffer_type* buffer); + + /** + * Get RA bit from buffer. +@@ -456,7 +456,7 @@ + * 1 if RA bit is set + * + */ +-int buffer_pkt_ra(buffer_type* buffer); ++extern int buffer_pkt_ra(buffer_type* buffer); + + /** + * Get AD bit from buffer. +@@ -465,7 +465,7 @@ + * 1 if AD bit is set + * + */ +-int buffer_pkt_ad(buffer_type* buffer); ++extern int buffer_pkt_ad(buffer_type* buffer); + + /** + * Get CD bit from buffer. +@@ -474,7 +474,7 @@ + * 1 if CD bit is set + * + */ +-int buffer_pkt_cd(buffer_type* buffer); ++extern int buffer_pkt_cd(buffer_type* buffer); + + /** + * Get OPCODE from buffer. +@@ -482,7 +482,7 @@ + * \return ldns_pkt_opcode OPCODE + * + */ +-ldns_pkt_opcode buffer_pkt_opcode(buffer_type* buffer); ++extern ldns_pkt_opcode buffer_pkt_opcode(buffer_type* buffer); + + /** + * Set OPCODE in buffer. +@@ -490,7 +490,7 @@ + * \param[in] opcode OPCODE + * + */ +-void buffer_pkt_set_opcode(buffer_type* buffer, ldns_pkt_opcode opcode); ++extern void buffer_pkt_set_opcode(buffer_type* buffer, ldns_pkt_opcode opcode); + + /** + * Get RCODE from buffer. +@@ -498,7 +498,7 @@ + * \return ldns_pkt_rcode RCODE + * + */ +-ldns_pkt_rcode buffer_pkt_rcode(buffer_type* buffer); ++extern ldns_pkt_rcode buffer_pkt_rcode(buffer_type* buffer); + + /** + * Set RCODE in buffer. +@@ -506,7 +506,7 @@ + * \param[in] rcode RCODE + * + */ +-void buffer_pkt_set_rcode(buffer_type* buffer, ldns_pkt_rcode rcode); ++extern void buffer_pkt_set_rcode(buffer_type* buffer, ldns_pkt_rcode rcode); + + /** + * Look up a descriptive text by each rcode. +@@ -514,7 +514,7 @@ + * \return const char* descriptive text + * + */ +-const char* buffer_rcode2str(ldns_pkt_rcode rcode); ++extern const char* buffer_rcode2str(ldns_pkt_rcode rcode); + + /** + * Get QDCOUNT from buffer. +@@ -522,7 +522,7 @@ + * \return uint16_t QDCOUNT + * + */ +-uint16_t buffer_pkt_qdcount(buffer_type* buffer); ++extern uint16_t buffer_pkt_qdcount(buffer_type* buffer); + + /** + * Set QDCOUNT in buffer. +@@ -530,7 +530,7 @@ + * \param[in] count QDCOUNT + * + */ +-void buffer_pkt_set_qdcount(buffer_type* buffer, uint16_t count); ++extern void buffer_pkt_set_qdcount(buffer_type* buffer, uint16_t count); + + /** + * Get ANCOUNT from buffer. +@@ -538,7 +538,7 @@ + * \return uint16_t ANCOUNT + * + */ +-uint16_t buffer_pkt_ancount(buffer_type* buffer); ++extern uint16_t buffer_pkt_ancount(buffer_type* buffer); + + /** + * Set ANCOUNT in buffer. +@@ -546,7 +546,7 @@ + * \param[in] count ANCOUNT + * + */ +-void buffer_pkt_set_ancount(buffer_type* buffer, uint16_t count); ++extern void buffer_pkt_set_ancount(buffer_type* buffer, uint16_t count); + + /** + * Get NSCOUNT from buffer. +@@ -554,7 +554,7 @@ + * \return uint16_t NSCOUNT + * + */ +-uint16_t buffer_pkt_nscount(buffer_type* buffer); ++extern uint16_t buffer_pkt_nscount(buffer_type* buffer); + + /** + * Set NSCOUNT in buffer. +@@ -562,7 +562,7 @@ + * \param[in] count NSCOUNT + * + */ +-void buffer_pkt_set_nscount(buffer_type* buffer, uint16_t count); ++extern void buffer_pkt_set_nscount(buffer_type* buffer, uint16_t count); + + /** + * Get ARCOUNT from buffer. +@@ -570,7 +570,7 @@ + * \return uint16_t ARCOUNT + * + */ +-uint16_t buffer_pkt_arcount(buffer_type* buffer); ++extern uint16_t buffer_pkt_arcount(buffer_type* buffer); + + /** + * Set ARCOUNT in buffer. +@@ -578,7 +578,7 @@ + * \param[in] count ARCOUNT + * + */ +-void buffer_pkt_set_arcount(buffer_type* buffer, uint16_t count); ++extern void buffer_pkt_set_arcount(buffer_type* buffer, uint16_t count); + + /** + * Make a new query. +@@ -588,7 +588,7 @@ + * \param[in] qclass qclass + * + */ +-void ++extern void + buffer_pkt_query(buffer_type* buffer, ldns_rdf* qname, ldns_rr_type qtype, + ldns_rr_class qclass); + +@@ -599,7 +599,7 @@ + * \param[in] qclass qclass + * + */ +-void ++extern void + buffer_pkt_notify(buffer_type* buffer, ldns_rdf* qname, ldns_rr_class qclass); + + /** +@@ -608,7 +608,7 @@ + * \param[in] allocator memory allocator + * + */ +-void buffer_cleanup(buffer_type* buffer); ++extern void buffer_cleanup(buffer_type* buffer); + + /** UTIL **/ + +diff -Naur opendnssec-2.1.6-orig/signer/src/wire/edns.h opendnssec-2.1.6/signer/src/wire/edns.h +--- opendnssec-2.1.6-orig/signer/src/wire/edns.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/wire/edns.h 2020-02-18 23:08:38.120360767 -0500 +@@ -87,7 +87,7 @@ + * \param[in] max_length maximum length. + * + */ +-void edns_init(edns_data_type* data, uint16_t max_length); ++extern void edns_init(edns_data_type* data, uint16_t max_length); + + /** + * Create new EDNS RR. +@@ -95,7 +95,7 @@ + * \return edns_rr_type* EDNS RR. + * + */ +-edns_rr_type* edns_rr_create(void); ++extern edns_rr_type* edns_rr_create(void); + + + /** +@@ -103,7 +103,7 @@ + * \param[in] err EDNS record. + * + */ +-void edns_rr_reset(edns_rr_type* err); ++extern void edns_rr_reset(edns_rr_type* err); + + /** + * Parse EDNS OPT RR. +@@ -112,7 +112,7 @@ + * \return int 1 if EDNS and valid, 0 otherwise. + * + */ +-int edns_rr_parse(edns_rr_type* err, buffer_type* buffer); ++extern int edns_rr_parse(edns_rr_type* err, buffer_type* buffer); + + /** + * The amount of space to reserve in the response for the EDNS data. +@@ -120,9 +120,9 @@ + * \return size_t amount of space to reserve. + * + */ +-size_t edns_rr_reserved_space(edns_rr_type* err); ++extern size_t edns_rr_reserved_space(edns_rr_type* err); + +-void edns_rr_cleanup(edns_rr_type* err); ++extern void edns_rr_cleanup(edns_rr_type* err); + + + #endif /* WIRE_EDNS_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/wire/listener.h opendnssec-2.1.6/signer/src/wire/listener.h +--- opendnssec-2.1.6-orig/signer/src/wire/listener.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/wire/listener.h 2020-02-18 23:08:38.121360780 -0500 +@@ -89,7 +89,7 @@ + * \return listener_type* listener + * + */ +-listener_type* listener_create(void); ++extern listener_type* listener_create(void); + + /** + * Push an interface to the listener. +@@ -100,7 +100,7 @@ + * \return interface_type* added interface + * + */ +-interface_type* listener_push(listener_type* list, char* address, int family, ++extern interface_type* listener_push(listener_type* list, char* address, int family, + const char* port); + + /** +@@ -108,13 +108,13 @@ + * \param[in] i interface + * + */ +-void interface_cleanup(interface_type* i); ++extern void interface_cleanup(interface_type* i); + + /** + * Clean up listener. + * \param[in] listener listener to clean up + * + */ +-void listener_cleanup(listener_type* listener); ++extern void listener_cleanup(listener_type* listener); + + #endif /* WIRE_LISTENER_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/wire/netio.h opendnssec-2.1.6/signer/src/wire/netio.h +--- opendnssec-2.1.6-orig/signer/src/wire/netio.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/wire/netio.h 2020-02-18 23:08:38.121360780 -0500 +@@ -162,7 +162,7 @@ + * \return netio_type* netio instance + * + */ +-netio_type* netio_create(void); ++extern netio_type* netio_create(void); + + /* + * Add a new handler to netio. +@@ -170,7 +170,7 @@ + * \param[in] handler handler + * + */ +-void netio_add_handler(netio_type* netio, netio_handler_type* handler); ++extern void netio_add_handler(netio_type* netio, netio_handler_type* handler); + + /* + * Remove the handler from netio. +@@ -178,7 +178,7 @@ + * \param[in] handler handler + * + */ +-void netio_remove_handler(netio_type* netio, netio_handler_type* handler); ++extern void netio_remove_handler(netio_type* netio, netio_handler_type* handler); + + /* + * Retrieve the current time (using gettimeofday(2)). +@@ -186,7 +186,7 @@ + * \return const struct timespec* current time + * + */ +-const struct timespec* netio_current_time(netio_type* netio); ++extern const struct timespec* netio_current_time(netio_type* netio); + + /* + * Check for events and dispatch them to the handlers. +@@ -198,7 +198,7 @@ + * and -1 on error (with errno set appropriately). + * + */ +-int netio_dispatch(netio_type* netio, const struct timespec* timeout, ++extern int netio_dispatch(netio_type* netio, const struct timespec* timeout, + const sigset_t* sigmask); + + /** +@@ -206,8 +206,8 @@ + * \param[in] netio netio instance + * + */ +-void netio_cleanup(netio_type* netio); +-void netio_cleanup_shallow(netio_type* netio); ++extern void netio_cleanup(netio_type* netio); ++extern void netio_cleanup_shallow(netio_type* netio); + + /** + * Add timespecs. +@@ -215,7 +215,7 @@ + * \param[in] right right + * + */ +-void timespec_add(struct timespec* left, const struct timespec* right); ++extern void timespec_add(struct timespec* left, const struct timespec* right); + + + #ifdef __cplusplus +diff -Naur opendnssec-2.1.6-orig/signer/src/wire/notify.h opendnssec-2.1.6/signer/src/wire/notify.h +--- opendnssec-2.1.6-orig/signer/src/wire/notify.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/wire/notify.h 2020-02-18 23:08:38.121360780 -0500 +@@ -74,7 +74,7 @@ + * \return notify_type* notify structure. + * + */ +-notify_type* notify_create(xfrhandler_type* xfrhandler, zone_type* zone); ++extern notify_type* notify_create(xfrhandler_type* xfrhandler, zone_type* zone); + + /** + * Enable notify. +@@ -82,20 +82,20 @@ + * \param[in] soa current soa + * + */ +-void notify_enable(notify_type* notify, ldns_rr* soa); ++extern void notify_enable(notify_type* notify, ldns_rr* soa); + + /** + * Send notify. + * \param[in] notify notify structure + * + */ +-void notify_send(notify_type* notify); ++extern void notify_send(notify_type* notify); + + /** + * Cleanup notify structure. + * \param[in] notify notify structure. + * + */ +-void notify_cleanup(notify_type* notify); ++extern void notify_cleanup(notify_type* notify); + + #endif /* WIRE_NOTIFY_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/wire/query.h opendnssec-2.1.6/signer/src/wire/query.h +--- opendnssec-2.1.6-orig/signer/src/wire/query.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/wire/query.h 2020-02-18 23:08:38.121360780 -0500 +@@ -104,14 +104,14 @@ + * \return query_type* query + * + */ +-query_type* query_create(void); ++extern query_type* query_create(void); + + /** + * Prepare response. + * \param[in] q query + * + */ +-void query_prepare(query_type* q); ++extern void query_prepare(query_type* q); + + /** + * Process query. +@@ -120,7 +120,7 @@ + * \return query_state state of the query + * + */ +-query_state query_process(query_type* q, engine_type* engine); ++extern query_state query_process(query_type* q, engine_type* engine); + + /** + * Reset query. +@@ -129,7 +129,7 @@ + * \param[in] is_tcp 1 if tcp query + * + */ +-void query_reset(query_type* q, size_t maxlen, int is_tcp); ++extern void query_reset(query_type* q, size_t maxlen, int is_tcp); + + /** + * Add optional RRs to query. +@@ -137,7 +137,7 @@ + * \param[in] engine signer engine + * + */ +-void query_add_optional(query_type* q, engine_type* engine); ++extern void query_add_optional(query_type* q, engine_type* engine); + + /** + * Add RR to query. +@@ -146,13 +146,13 @@ + * \return int 1 if ok, 0 if overflow. + * + */ +-int query_add_rr(query_type* q, ldns_rr* rr); ++extern int query_add_rr(query_type* q, ldns_rr* rr); + + /** + * Cleanup query. + * \param[in] q query + * + */ +-void query_cleanup(query_type* q); ++extern void query_cleanup(query_type* q); + + #endif /* WIRE_QUERY_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/wire/sock.h opendnssec-2.1.6/signer/src/wire/sock.h +--- opendnssec-2.1.6-orig/signer/src/wire/sock.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/wire/sock.h 2020-02-18 23:08:38.121360780 -0500 +@@ -99,7 +99,7 @@ + * \return ods_status status + * + */ +-ods_status sock_listen(socklist_type* sockets, listener_type* listener); ++extern ods_status sock_listen(socklist_type* sockets, listener_type* listener); + + /** + * Handle incoming udp queries. +@@ -108,7 +108,7 @@ + * \param[in] event_types the types of events that should be checked for + * + */ +-void sock_handle_udp(netio_type* netio, netio_handler_type* handler, ++extern void sock_handle_udp(netio_type* netio, netio_handler_type* handler, + netio_events_type event_types); + + /** +@@ -118,7 +118,7 @@ + * \param[in] event_types the types of events that should be checked for + * + */ +-void sock_handle_tcp_accept(netio_type* netio, netio_handler_type* handler, ++extern void sock_handle_tcp_accept(netio_type* netio, netio_handler_type* handler, + netio_events_type event_types); + + /** +@@ -128,7 +128,7 @@ + * \param[in] event_types the types of events that should be checked for + * + */ +-void sock_handle_tcp_read(netio_type* netio, netio_handler_type* handler, ++extern void sock_handle_tcp_read(netio_type* netio, netio_handler_type* handler, + netio_events_type event_types); + + /** +@@ -138,7 +138,7 @@ + * \param[in] event_types the types of events that should be checked for + * + */ +-void sock_handle_tcp_write(netio_type* netio, netio_handler_type* handler, ++extern void sock_handle_tcp_write(netio_type* netio, netio_handler_type* handler, + netio_events_type event_types); + + #endif /* WIRE_SOCK_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/wire/tcpset.h opendnssec-2.1.6/signer/src/wire/tcpset.h +--- opendnssec-2.1.6-orig/signer/src/wire/tcpset.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/wire/tcpset.h 2020-02-18 23:08:38.121360780 -0500 +@@ -77,7 +77,7 @@ + * \return tcp_conn_type* TCP connection. + * + */ +-tcp_conn_type* tcp_conn_create(void); ++extern tcp_conn_type* tcp_conn_create(void); + + /** + * Create a set of tcp connections. +@@ -85,14 +85,14 @@ + * \return tcp_set_type* set of tcp connection. + * + */ +-tcp_set_type* tcp_set_create(void); ++extern tcp_set_type* tcp_set_create(void); + + /** + * Make tcp connection ready for reading. + * \param[in] tcp tcp connection + * + */ +-void tcp_conn_ready(tcp_conn_type* tcp); ++extern void tcp_conn_ready(tcp_conn_type* tcp); + + /* + * Read from a tcp connection. +@@ -104,7 +104,7 @@ + * 1 on completed read. + * + */ +-int tcp_conn_read(tcp_conn_type* tcp); ++extern int tcp_conn_read(tcp_conn_type* tcp); + + /* + * Write to a tcp connection. +@@ -116,7 +116,7 @@ + * 1 on completed write. + * + */ +-int tcp_conn_write(tcp_conn_type* tcp); ++extern int tcp_conn_write(tcp_conn_type* tcp); + + /** + * Clean up set of tcp connections. +@@ -124,6 +124,6 @@ + * \param[in] allocator memory allocator + * + */ +-void tcp_set_cleanup(tcp_set_type* set); ++extern void tcp_set_cleanup(tcp_set_type* set); + + #endif /* WIRE_TCPSET_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/wire/tsig.h opendnssec-2.1.6/signer/src/wire/tsig.h +--- opendnssec-2.1.6-orig/signer/src/wire/tsig.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/wire/tsig.h 2020-02-18 23:08:38.121360780 -0500 +@@ -150,27 +150,27 @@ + * \return ods_status status + * + */ +-ods_status tsig_handler_init(void); ++extern ods_status tsig_handler_init(void); + + /** + * Clean up TSIG handler. + * + */ +-void tsig_handler_cleanup(void); ++extern void tsig_handler_cleanup(void); + + /** + * Add key to TSIG handler. + * \param[in] key tsig key + * + */ +-void tsig_handler_add_key(tsig_key_type* key); ++extern void tsig_handler_add_key(tsig_key_type* key); + + /** + * Add algorithm to TSIG handler. + * \param[in] algo tsig algorithm + * + */ +-void tsig_handler_add_algo(tsig_algo_type* algo); ++extern void tsig_handler_add_algo(tsig_algo_type* algo); + + /** + * Create new TSIG. +@@ -181,7 +181,7 @@ + * \return tsig_type* TSIG + * + */ +-tsig_type* tsig_create(char* name, char* algo, ++extern tsig_type* tsig_create(char* name, char* algo, + char* secret); + + /** +@@ -191,7 +191,7 @@ + * \return tsig_type* TSIG + * + */ +-tsig_type* tsig_lookup_by_name(tsig_type* tsig, const char* name); ++extern tsig_type* tsig_lookup_by_name(tsig_type* tsig, const char* name); + + /** + * Lookup TSIG algorithm by name. +@@ -199,7 +199,7 @@ + * \return tsig_algo_type* TSIG algorithm + * + */ +-tsig_algo_type* tsig_lookup_algo(const char* name); ++extern tsig_algo_type* tsig_lookup_algo(const char* name); + + /** + * Create new TSIG RR. +@@ -207,7 +207,7 @@ + * \return tsig_rr_type* TSIG RR + * + */ +-tsig_rr_type* tsig_rr_create(void); ++extern tsig_rr_type* tsig_rr_create(void); + + /** + * Reset TSIG RR. +@@ -216,7 +216,7 @@ + * \param[in] key tsig key + * + */ +-void tsig_rr_reset(tsig_rr_type* trr, tsig_algo_type* algo, tsig_key_type* key); ++extern void tsig_rr_reset(tsig_rr_type* trr, tsig_algo_type* algo, tsig_key_type* key); + + /** + * Find TSIG RR. +@@ -225,7 +225,7 @@ + * \return int 1 if not present or present and valid, 0 otherwise. + * + */ +-int tsig_rr_find(tsig_rr_type* trr, buffer_type* buffer); ++extern int tsig_rr_find(tsig_rr_type* trr, buffer_type* buffer); + + /** + * Parse TSIG RR. +@@ -234,7 +234,7 @@ + * \return int 1 if not TSIG RR or TSIG RR and valid, 0 otherwise. + * + */ +-int tsig_rr_parse(tsig_rr_type* trr, buffer_type* buffer); ++extern int tsig_rr_parse(tsig_rr_type* trr, buffer_type* buffer); + + /** + * Lookup TSIG RR. +@@ -242,14 +242,14 @@ + * \return int 1 if succeeded, 0 if unknown + * + */ +-int tsig_rr_lookup(tsig_rr_type* trr); ++extern int tsig_rr_lookup(tsig_rr_type* trr); + + /** + * Prepare TSIG RR. + * \param[in] trr TSIG RR + * + */ +-void tsig_rr_prepare(tsig_rr_type* trr); ++extern void tsig_rr_prepare(tsig_rr_type* trr); + + /** + * Update TSIG RR. +@@ -260,14 +260,14 @@ + * query idfrom TSIG. + * + */ +-void tsig_rr_update(tsig_rr_type* trr, buffer_type* buffer, size_t length); ++extern void tsig_rr_update(tsig_rr_type* trr, buffer_type* buffer, size_t length); + + /** + * Sign TSIG RR. + * \param[in] trr TSIG RR + * + */ +-void tsig_rr_sign(tsig_rr_type* trr); ++extern void tsig_rr_sign(tsig_rr_type* trr); + + /** + * Verify TSIG RR. +@@ -275,7 +275,7 @@ + * \return int 1 if verified, 0 on error + * + */ +-int tsig_rr_verify(tsig_rr_type* trr); ++extern int tsig_rr_verify(tsig_rr_type* trr); + + /** + * Append TSIG RR. +@@ -283,7 +283,7 @@ + * \param[in] buffer packet buffer + * + */ +-void tsig_rr_append(tsig_rr_type* trr, buffer_type* buffer); ++extern void tsig_rr_append(tsig_rr_type* trr, buffer_type* buffer); + + /* + * The amount of space to reserve in the response for the TSIG data. +@@ -291,14 +291,14 @@ + * \return size_t reserved space size + * + */ +-size_t tsig_rr_reserved_space(tsig_rr_type *trr); ++extern size_t tsig_rr_reserved_space(tsig_rr_type *trr); + + /** + * Reply with error TSIG RR. + * \param[in] trr TSIG RR + * + */ +-void tsig_rr_error(tsig_rr_type* trr); ++extern void tsig_rr_error(tsig_rr_type* trr); + + /** + * Get human readable TSIG error code. +@@ -306,7 +306,7 @@ + * \return const char* TSIG status + * + */ +-const char* tsig_status2str(tsig_status status); ++extern const char* tsig_status2str(tsig_status status); + + /** + * Get human readable TSIG error code. +@@ -314,21 +314,21 @@ + * \return const char* readable error code + * + */ +-const char* tsig_strerror(uint16_t error); ++extern const char* tsig_strerror(uint16_t error); + + /** + * Free TSIG RR. + * \param[in] trr TSIG RR + * + */ +-void tsig_rr_free(tsig_rr_type* trr); ++extern void tsig_rr_free(tsig_rr_type* trr); + + /** + * Cleanup TSIG RR + * \param[in] trr TSIG RR + * + */ +-void tsig_rr_cleanup(tsig_rr_type* trr); ++extern void tsig_rr_cleanup(tsig_rr_type* trr); + + /** + * Clean up TSIG. +@@ -336,6 +336,6 @@ + * \param[in] allocator memory allocator + * + */ +-void tsig_cleanup(tsig_type* tsig); ++extern void tsig_cleanup(tsig_type* tsig); + + #endif /* WIRE_TSIG_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/wire/tsig-openssl.h opendnssec-2.1.6/signer/src/wire/tsig-openssl.h +--- opendnssec-2.1.6-orig/signer/src/wire/tsig-openssl.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/wire/tsig-openssl.h 2020-02-18 23:08:38.122360794 -0500 +@@ -44,13 +44,13 @@ + * \return ods_status status + * + */ +-ods_status tsig_handler_openssl_init(void); ++extern ods_status tsig_handler_openssl_init(void); + + /** + * Finalize OpenSSL support for TSIG. + * + */ +-void tsig_handler_openssl_finalize(void); ++extern void tsig_handler_openssl_finalize(void); + + #endif /* HAVE_SSL */ + #endif /* WIRE_TSIG_OPENSSL_H */ +diff -Naur opendnssec-2.1.6-orig/signer/src/wire/xfrd.c opendnssec-2.1.6/signer/src/wire/xfrd.c +--- opendnssec-2.1.6-orig/signer/src/wire/xfrd.c 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/wire/xfrd.c 2020-02-18 23:08:38.122360794 -0500 +@@ -1549,7 +1549,7 @@ + xfrd->master->ixfr_disabled = time_now(); + ods_log_verbose("[%s] disable ixfr requests for %s from now (%lu)", + xfrd_str, xfrd->master->address, (unsigned long)xfrd->master->ixfr_disabled); +- /* break; */ ++ /* break; FALL THROUGH */ + case XFRD_PKT_BAD: + default: + ods_log_debug("[%s] tcp read %s: release connection", xfrd_str, +diff -Naur opendnssec-2.1.6-orig/signer/src/wire/xfrd.h opendnssec-2.1.6/signer/src/wire/xfrd.h +--- opendnssec-2.1.6-orig/signer/src/wire/xfrd.h 2020-02-10 12:25:11.000000000 -0500 ++++ opendnssec-2.1.6/signer/src/wire/xfrd.h 2020-02-18 23:08:38.122360794 -0500 +@@ -147,7 +147,7 @@ + * \return xfrd_type* zone transfer structure. + * + */ +-xfrd_type* xfrd_create(xfrhandler_type* xfrhandler, zone_type* zone); ++extern xfrd_type* xfrd_create(xfrhandler_type* xfrhandler, zone_type* zone); + + /** + * Set timeout for zone transfer to now. +@@ -177,7 +177,7 @@ + * \return socklen_t length of address + * + */ +-socklen_t xfrd_acl_sockaddr_to(acl_type* acl, ++extern socklen_t xfrd_acl_sockaddr_to(acl_type* acl, + struct sockaddr_storage* to); + + /** +@@ -186,6 +186,6 @@ + * \param[in] backup backup transfer variables. + * + */ +-void xfrd_cleanup(xfrd_type* xfrd, int backup); ++extern void xfrd_cleanup(xfrd_type* xfrd, int backup); + + #endif /* WIRE_XFRD_H */ diff --git a/sources b/sources index 418303a..83969ee 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (opendnssec-1.4.14.tar.gz) = b814d13ef95dcf238f3e9d6bb3dc489328d7a4a5db9e32214ac29716043f9e635e62fb3795b9d5d75e8215373f9330ea5a17840830f5e467067f305a610bee6b +SHA512 (opendnssec-2.1.6.tar.gz) = 9dad545d4ec92bb6fc74fd568160f0515cdfa23af4a901ce147f2c82b684224237687461a13c0e37ce6d3813494e4292dfa98cfb17f871d444eb69baf72a1afd