2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-09-03 07:25:18 +00:00

[#3536] added hook callouts

This commit is contained in:
Razvan Becheriu
2024-09-16 21:25:33 +03:00
parent 26b584355a
commit ac3642cd8b
65 changed files with 1404 additions and 97 deletions

View File

@@ -4,8 +4,8 @@
// License, v. 2.0. If a copy of the MPL was not distributed with this // License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifndef LEASE_CMD_LOG_H #ifndef MYSQL_CB_LOG_H
#define LEASE_CMD_LOG_H #define MYSQL_CB_LOG_H
#include <log/logger_support.h> #include <log/logger_support.h>
#include <log/macros.h> #include <log/macros.h>

View File

@@ -226,7 +226,7 @@ const char* values[] = {
"MYSQL_CB_CREATE_UPDATE_SHARED_NETWORK_OPTION6", "create or update shared network: %1 option", "MYSQL_CB_CREATE_UPDATE_SHARED_NETWORK_OPTION6", "create or update shared network: %1 option",
"MYSQL_CB_CREATE_UPDATE_SUBNET4", "create or update subnet: %1", "MYSQL_CB_CREATE_UPDATE_SUBNET4", "create or update subnet: %1",
"MYSQL_CB_CREATE_UPDATE_SUBNET6", "create or update subnet: %1", "MYSQL_CB_CREATE_UPDATE_SUBNET6", "create or update subnet: %1",
"MYSQL_CB_DEINIT_OK", "unloading MYSQL CB hooks library successful", "MYSQL_CB_DEINIT_OK", "unloading MySQL CB hooks library successful",
"MYSQL_CB_DELETE_ALL_CLIENT_CLASSES4", "delete all client classes", "MYSQL_CB_DELETE_ALL_CLIENT_CLASSES4", "delete all client classes",
"MYSQL_CB_DELETE_ALL_CLIENT_CLASSES4_RESULT", "deleted: %1 entries", "MYSQL_CB_DELETE_ALL_CLIENT_CLASSES4_RESULT", "deleted: %1 entries",
"MYSQL_CB_DELETE_ALL_CLIENT_CLASSES6", "delete all client classes", "MYSQL_CB_DELETE_ALL_CLIENT_CLASSES6", "delete all client classes",
@@ -383,7 +383,7 @@ const char* values[] = {
"MYSQL_CB_GET_SUBNET6_BY_SUBNET_ID", "retrieving subnet by subnet id: %1", "MYSQL_CB_GET_SUBNET6_BY_SUBNET_ID", "retrieving subnet by subnet id: %1",
"MYSQL_CB_GET_TYPE4", "get type", "MYSQL_CB_GET_TYPE4", "get type",
"MYSQL_CB_GET_TYPE6", "get type", "MYSQL_CB_GET_TYPE6", "get type",
"MYSQL_CB_INIT_OK", "loading MYSQL CB hooks library successful", "MYSQL_CB_INIT_OK", "loading MySQL CB hooks library successful",
"MYSQL_CB_NO_TLS", "TLS was required but is not used", "MYSQL_CB_NO_TLS", "TLS was required but is not used",
"MYSQL_CB_RECONNECT_ATTEMPT_FAILED4", "database reconnect failed: %1", "MYSQL_CB_RECONNECT_ATTEMPT_FAILED4", "database reconnect failed: %1",
"MYSQL_CB_RECONNECT_ATTEMPT_FAILED6", "database reconnect failed: %1", "MYSQL_CB_RECONNECT_ATTEMPT_FAILED6", "database reconnect failed: %1",

View File

@@ -88,7 +88,7 @@ Debug message issued when triggered an action to create or update subnet
Logged at debug log level 40. Logged at debug log level 40.
Debug message issued when triggered an action to create or update subnet Debug message issued when triggered an action to create or update subnet
% MYSQL_CB_DEINIT_OK unloading MYSQL CB hooks library successful % MYSQL_CB_DEINIT_OK unloading MySQL CB hooks library successful
This informational message indicates that the MySQL Configuration Backend hooks This informational message indicates that the MySQL Configuration Backend hooks
library has been unloaded successfully. library has been unloaded successfully.
@@ -720,7 +720,7 @@ Debug message issued when triggered an action to retrieve type
Logged at debug log level 40. Logged at debug log level 40.
Debug message issued when triggered an action to retrieve type Debug message issued when triggered an action to retrieve type
% MYSQL_CB_INIT_OK loading MYSQL CB hooks library successful % MYSQL_CB_INIT_OK loading MySQL CB hooks library successful
This informational message indicates that the MySQL Configuration Backend hooks This informational message indicates that the MySQL Configuration Backend hooks
library has been loaded successfully. Enjoy! library has been loaded successfully. Enjoy!

View File

@@ -0,0 +1,2 @@
/mysql_hb_messages.cc -diff merge=ours
/mysql_hb_messages.h -diff merge=ours

View File

@@ -14,7 +14,11 @@ CLEANFILES = *.gcno *.gcda
# convenience archive # convenience archive
noinst_LTLIBRARIES = libmysqlhb.la noinst_LTLIBRARIES = libmysqlhb.la
libmysqlhb_la_SOURCES = mysql_host_data_source.cc mysql_host_data_source.h libmysqlhb_la_SOURCES = mysql_hb_callouts.cc
libmysqlhb_la_SOURCES += mysql_hb_log.cc mysql_hb_log.h
libmysqlhb_la_SOURCES += mysql_hb_messages.cc mysql_hb_messages.h
libmysqlhb_la_SOURCES += mysql_host_data_source.cc mysql_host_data_source.h
libmysqlhb_la_SOURCES += version.cc
libmysqlhb_la_CXXFLAGS = $(AM_CXXFLAGS) libmysqlhb_la_CXXFLAGS = $(AM_CXXFLAGS)
libmysqlhb_la_CPPFLAGS = $(AM_CPPFLAGS) libmysqlhb_la_CPPFLAGS = $(AM_CPPFLAGS)

View File

@@ -0,0 +1 @@
hook_load_unittests

View File

@@ -0,0 +1,56 @@
SUBDIRS = .
AM_CPPFLAGS = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib
AM_CPPFLAGS += -I$(top_builddir)/src/hooks/dhcp/mysql_hb -I$(top_srcdir)/src/hooks/dhcp/mysql_hb
AM_CPPFLAGS += $(BOOST_INCLUDES)
AM_CPPFLAGS += -DLIBDHCP_MYSQL_HB_SO=\"$(abs_top_builddir)/src/hooks/dhcp/mysql_hb/.libs/libdhcp_mysql_hb.so\"
AM_CXXFLAGS = $(KEA_CXXFLAGS)
if USE_STATIC_LINK
AM_LDFLAGS = -static
endif
EXTRA_DIST =
CLEANFILES = *.gcno *.gcda
TESTS_ENVIRONMENT = \
$(LIBTOOL) --mode=execute $(VALGRIND_COMMAND)
if HAVE_GTEST
TESTS = hook_load_unittests
hook_load_unittests_SOURCES =
hook_load_unittests_SOURCES += load_unload_unittests.cc
hook_load_unittests_SOURCES += run_unittests.cc
hook_load_unittests_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES) $(LOG4CPLUS_INCLUDES)
hook_load_unittests_CXXFLAGS = $(AM_CXXFLAGS)
hook_load_unittests_LDFLAGS = $(AM_LDFLAGS) $(GTEST_LDFLAGS)
hook_load_unittests_LDADD = $(top_builddir)/src/lib/dhcpsrv/libkea-dhcpsrv.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/process/libkea-process.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/eval/libkea-eval.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/dhcp_ddns/libkea-dhcp_ddns.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/stats/libkea-stats.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/config/libkea-cfgclient.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/http/libkea-http.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/dhcp/libkea-dhcp++.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/hooks/libkea-hooks.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/mysql/libkea-mysql.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/database/libkea-database.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/cc/libkea-cc.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/asiolink/libkea-asiolink.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/dns/libkea-dns++.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/cryptolink/libkea-cryptolink.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/log/libkea-log.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/util/libkea-util.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/exceptions/libkea-exceptions.la
hook_load_unittests_LDADD += $(LOG4CPLUS_LIBS)
hook_load_unittests_LDADD += $(CRYPTO_LIBS)
hook_load_unittests_LDADD += $(BOOST_LIBS)
hook_load_unittests_LDADD += $(GTEST_LDADD)
noinst_PROGRAMS = $(TESTS)
endif

View File

@@ -0,0 +1,60 @@
// Copyright (C) 2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
/// @file This file contains tests which exercise the load and unload
/// functions in the ddns tuning hook library. In order to test the load
/// function, one must be able to pass it hook library parameters. The
/// the only way to populate these parameters is by actually loading the
/// library via HooksManager::loadLibraries().
#include <config.h>
#include <dhcpsrv/testutils/lib_load_test_fixture.h>
#include <testutils/gtest_utils.h>
#include <gtest/gtest.h>
#include <errno.h>
using namespace std;
using namespace isc;
using namespace isc::hooks;
using namespace isc::data;
using namespace isc::dhcp;
using namespace isc::process;
namespace {
/// @brief Test fixture for testing loading and unloading the MySQL hb library
class MySqlHbLibLoadTest : public isc::test::LibLoadTest {
public:
/// @brief Constructor
MySqlHbLibLoadTest() : LibLoadTest(LIBDHCP_MYSQL_HB_SO) {
}
/// @brief Destructor
virtual ~MySqlHbLibLoadTest() {
unloadLibraries();
}
};
// Simple V4 test that checks the library can be loaded and unloaded several times.
TEST_F(MySqlHbLibLoadTest, validLoad4) {
validDaemonTest("kea-dhcp4");
}
// Simple V6 test that checks the library can be loaded and unloaded several times.
TEST_F(MySqlHbLibLoadTest, validLoad6) {
validDaemonTest("kea-dhcp6", AF_INET6);
}
// Simple test that checks the library cannot by loaded by invalid daemons.
TEST_F(MySqlHbLibLoadTest, invalidDaemonLoad) {
invalidDaemonTest("kea-ctrl-agent");
invalidDaemonTest("kea-dhcp-ddns");
invalidDaemonTest("bogus");
}
} // end of anonymous namespace

View File

@@ -0,0 +1,19 @@
// Copyright (C) 2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include <config.h>
#include <log/logger_support.h>
#include <gtest/gtest.h>
int
main(int argc, char* argv[]) {
::testing::InitGoogleTest(&argc, argv);
isc::log::initLogger();
int result = RUN_ALL_TESTS();
return (result);
}

View File

@@ -0,0 +1,82 @@
// Copyright (C) 2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
// Functions accessed by the hooks framework use C linkage to avoid the name
// mangling that accompanies use of the C++ compiler as well as to avoid
// issues related to namespaces.
#include <config.h>
#include <asiolink/io_service_mgr.h>
#include <dhcpsrv/base_host_data_source.h>
#include <dhcpsrv/cfgmgr.h>
#include <hooks/hooks.h>
#include <process/daemon.h>
#include <mysql_hb_log.h>
#include <mysql_host_data_source.h>
#include <sstream>
#include <string>
using namespace isc::asiolink;
using namespace isc::dhcp;
using namespace isc::hooks;
using namespace isc::log;
using namespace isc::process;
using namespace std;
extern "C" {
/// @brief This function is called when the library is loaded.
///
/// @param handle library handle
/// @return 0 when initialization is successful, 1 otherwise
int load(LibraryHandle& /* handle */) {
// Make the hook library not loadable by d2 or ca.
uint16_t family = CfgMgr::instance().getFamily();
const std::string& proc_name = Daemon::getProcName();
if (family == AF_INET) {
if (proc_name != "kea-dhcp4") {
isc_throw(isc::Unexpected, "Bad process name: " << proc_name
<< ", expected kea-dhcp4");
}
} else {
if (proc_name != "kea-dhcp6") {
isc_throw(isc::Unexpected, "Bad process name: " << proc_name
<< ", expected kea-dhcp6");
}
}
// Register MySQL HB factories with Host Managers
isc::dhcp::HostDataSourceFactory::registerFactory("mysql", MySqlHostDataSource::factory, true);
LOG_INFO(mysql_hb_logger, MYSQL_HB_INIT_OK);
return (0);
}
/// @brief This function is called when the library is unloaded.
///
/// @return 0 if deregistration was successful, 1 otherwise
int unload() {
// Unregister the factories and remove MySQL backends
isc::dhcp::HostDataSourceFactory::deregisterFactory("mysql", true);
LOG_INFO(mysql_hb_logger, MYSQL_HB_DEINIT_OK);
return (0);
}
/// @brief This function is called to retrieve the multi-threading compatibility.
///
/// @note: the compatibility is based on the assumption this hook library
/// is always called from the main thread.
///
/// @return 1 which means compatible with multi-threading.
int multi_threading_compatible() {
return (1);
}
} // end extern "C"

View File

@@ -0,0 +1,17 @@
// Copyright (C) 2019-2022 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include <config.h>
#include <mysql_hb_log.h>
namespace isc {
namespace dhcp {
isc::log::Logger mysql_hb_logger("mysql-hb-hooks");
} // namespace dhcp
} // namespace isc

View File

@@ -0,0 +1,22 @@
// Copyright (C) 2019-2022 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifndef MYSQL_HB_LOG_H
#define MYSQL_HB_LOG_H
#include <log/logger_support.h>
#include <log/macros.h>
#include <mysql_hb_messages.h>
namespace isc {
namespace dhcp {
extern isc::log::Logger mysql_hb_logger;
} // namespace dhcp
} // namespace isc
#endif

View File

@@ -0,0 +1,23 @@
// File created from ../../../../src/hooks/dhcp/mysql_hb/mysql_hb_messages.mes
#include <cstddef>
#include <log/message_types.h>
#include <log/message_initializer.h>
extern const isc::log::MessageID MYSQL_HB_DB = "MYSQL_HB_DB";
extern const isc::log::MessageID MYSQL_HB_DEINIT_OK = "MYSQL_HB_DEINIT_OK";
extern const isc::log::MessageID MYSQL_HB_INIT_OK = "MYSQL_HB_INIT_OK";
namespace {
const char* values[] = {
"MYSQL_HB_DB", "opening MySQL hosts database: %1",
"MYSQL_HB_DEINIT_OK", "unloading MySQL HB hooks library successful",
"MYSQL_HB_INIT_OK", "loading MySQL HB hooks library successful",
NULL
};
const isc::log::MessageInitializer initializer(values);
} // Anonymous namespace

View File

@@ -0,0 +1,12 @@
// File created from ../../../../src/hooks/dhcp/mysql_hb/mysql_hb_messages.mes
#ifndef MYSQL_HB_MESSAGES_H
#define MYSQL_HB_MESSAGES_H
#include <log/message_types.h>
extern const isc::log::MessageID MYSQL_HB_DB;
extern const isc::log::MessageID MYSQL_HB_DEINIT_OK;
extern const isc::log::MessageID MYSQL_HB_INIT_OK;
#endif // MYSQL_HB_MESSAGES_H

View File

@@ -0,0 +1,14 @@
% MYSQL_HB_DB opening MySQL hosts database: %1
Logged at debug log level 50.
This informational message is logged when a DHCP server (either V4 or
V6) is about to open a MySQL hosts database. The parameters of the
connection including database name and username needed to access it
(but not the password if any) are logged.
% MYSQL_HB_DEINIT_OK unloading MySQL HB hooks library successful
This informational message indicates that the MySQL Host Backend hooks
library has been unloaded successfully.
% MYSQL_HB_INIT_OK loading MySQL HB hooks library successful
This informational message indicates that the MySQL Host Backend hooks
library has been loaded successfully. Enjoy!

View File

@@ -11,6 +11,7 @@
#include <database/db_exceptions.h> #include <database/db_exceptions.h>
#include <dhcpsrv/base_host_data_source.h> #include <dhcpsrv/base_host_data_source.h>
#include <dhcpsrv/host_data_source_factory.h> #include <dhcpsrv/host_data_source_factory.h>
#include <mysql_hb_log.h>
#include <mysql/mysql_connection.h> #include <mysql/mysql_connection.h>
#include <stdint.h> #include <stdint.h>
@@ -530,27 +531,32 @@ public:
private: private:
/// @brief Pointer to the implementation of the @ref MySqlHostDataSource. /// @brief Pointer to the implementation of the @ref MySqlHostDataSource.
MySqlHostDataSourceImplPtr impl_; MySqlHostDataSourceImplPtr impl_;
public:
/// @brief Factory class method.
///
/// @param parameters A data structure relating keywords and values
/// concerned with the database.
///
/// @return The MySQL Host Manager.
static HostDataSourcePtr
factory(const isc::db::DatabaseConnection::ParameterMap& parameters) {
LOG_INFO(mysql_hb_logger, MYSQL_HB_DB)
.arg(isc::db::DatabaseConnection::redactedAccessString(parameters));
return (HostDataSourcePtr(new MySqlHostDataSource(parameters)));
}
}; };
struct MySqlHostDataSourceInit { struct MySqlHostDataSourceInit {
// Constructor registers // Constructor registers
MySqlHostDataSourceInit() { MySqlHostDataSourceInit() {
isc::dhcp::HostDataSourceFactory::registerFactory("mysql", factory, true); isc::dhcp::HostDataSourceFactory::registerFactory("mysql", MySqlHostDataSource::factory, true);
} }
// Destructor deregisters // Destructor deregisters
~MySqlHostDataSourceInit() { ~MySqlHostDataSourceInit() {
isc::dhcp::HostDataSourceFactory::deregisterFactory("mysql", true); isc::dhcp::HostDataSourceFactory::deregisterFactory("mysql", true);
} }
// Factory class method
static HostDataSourcePtr
factory(const isc::db::DatabaseConnection::ParameterMap& parameters) {
// TODO - fix messages
//LOG_INFO(hosts_logger, DHCPSRV_MYSQL_HOST_DB)
// .arg(DatabaseConnection::redactedAccessString(parameters));
return (HostDataSourcePtr(new MySqlHostDataSource(parameters)));
}
}; };
} }

View File

@@ -0,0 +1,18 @@
// Copyright (C) 2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include <config.h>
#include <hooks/hooks.h>
extern "C" {
/// @brief returns Kea hooks version.
int version() {
return (KEA_HOOKS_VERSION);
}
}

View File

@@ -0,0 +1,2 @@
/mysql_lb_messages.cc -diff merge=ours
/mysql_lb_messages.h -diff merge=ours

View File

@@ -14,7 +14,11 @@ CLEANFILES = *.gcno *.gcda
# convenience archive # convenience archive
noinst_LTLIBRARIES = libmysqllb.la noinst_LTLIBRARIES = libmysqllb.la
libmysqllb_la_SOURCES = mysql_lease_mgr.cc mysql_lease_mgr.h libmysqllb_la_SOURCES = mysql_lb_callouts.cc
libmysqllb_la_SOURCES += mysql_lb_log.cc mysql_lb_log.h
libmysqllb_la_SOURCES += mysql_lb_messages.cc mysql_lb_messages.h
libmysqllb_la_SOURCES += mysql_lease_mgr.cc mysql_lease_mgr.h
libmysqllb_la_SOURCES += version.cc
libmysqllb_la_CXXFLAGS = $(AM_CXXFLAGS) libmysqllb_la_CXXFLAGS = $(AM_CXXFLAGS)
libmysqllb_la_CPPFLAGS = $(AM_CPPFLAGS) libmysqllb_la_CPPFLAGS = $(AM_CPPFLAGS)

View File

@@ -0,0 +1 @@
hook_load_unittests

View File

@@ -0,0 +1,56 @@
SUBDIRS = .
AM_CPPFLAGS = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib
AM_CPPFLAGS += -I$(top_builddir)/src/hooks/dhcp/mysql_lb -I$(top_srcdir)/src/hooks/dhcp/mysql_lb
AM_CPPFLAGS += $(BOOST_INCLUDES)
AM_CPPFLAGS += -DLIBDHCP_MYSQL_LB_SO=\"$(abs_top_builddir)/src/hooks/dhcp/mysql_lb/.libs/libdhcp_mysql_lb.so\"
AM_CXXFLAGS = $(KEA_CXXFLAGS)
if USE_STATIC_LINK
AM_LDFLAGS = -static
endif
EXTRA_DIST =
CLEANFILES = *.gcno *.gcda
TESTS_ENVIRONMENT = \
$(LIBTOOL) --mode=execute $(VALGRIND_COMMAND)
if HAVE_GTEST
TESTS = hook_load_unittests
hook_load_unittests_SOURCES =
hook_load_unittests_SOURCES += load_unload_unittests.cc
hook_load_unittests_SOURCES += run_unittests.cc
hook_load_unittests_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES) $(LOG4CPLUS_INCLUDES)
hook_load_unittests_CXXFLAGS = $(AM_CXXFLAGS)
hook_load_unittests_LDFLAGS = $(AM_LDFLAGS) $(GTEST_LDFLAGS)
hook_load_unittests_LDADD = $(top_builddir)/src/lib/dhcpsrv/libkea-dhcpsrv.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/process/libkea-process.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/eval/libkea-eval.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/dhcp_ddns/libkea-dhcp_ddns.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/stats/libkea-stats.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/config/libkea-cfgclient.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/http/libkea-http.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/dhcp/libkea-dhcp++.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/hooks/libkea-hooks.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/mysql/libkea-mysql.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/database/libkea-database.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/cc/libkea-cc.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/asiolink/libkea-asiolink.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/dns/libkea-dns++.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/cryptolink/libkea-cryptolink.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/log/libkea-log.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/util/libkea-util.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/exceptions/libkea-exceptions.la
hook_load_unittests_LDADD += $(LOG4CPLUS_LIBS)
hook_load_unittests_LDADD += $(CRYPTO_LIBS)
hook_load_unittests_LDADD += $(BOOST_LIBS)
hook_load_unittests_LDADD += $(GTEST_LDADD)
noinst_PROGRAMS = $(TESTS)
endif

View File

@@ -0,0 +1,60 @@
// Copyright (C) 2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
/// @file This file contains tests which exercise the load and unload
/// functions in the ddns tuning hook library. In order to test the load
/// function, one must be able to pass it hook library parameters. The
/// the only way to populate these parameters is by actually loading the
/// library via HooksManager::loadLibraries().
#include <config.h>
#include <dhcpsrv/testutils/lib_load_test_fixture.h>
#include <testutils/gtest_utils.h>
#include <gtest/gtest.h>
#include <errno.h>
using namespace std;
using namespace isc;
using namespace isc::hooks;
using namespace isc::data;
using namespace isc::dhcp;
using namespace isc::process;
namespace {
/// @brief Test fixture for testing loading and unloading the MySQL lb library
class MySqlLbLibLoadTest : public isc::test::LibLoadTest {
public:
/// @brief Constructor
MySqlLbLibLoadTest() : LibLoadTest(LIBDHCP_MYSQL_LB_SO) {
}
/// @brief Destructor
virtual ~MySqlLbLibLoadTest() {
unloadLibraries();
}
};
// Simple V4 test that checks the library can be loaded and unloaded several times.
TEST_F(MySqlLbLibLoadTest, validLoad4) {
validDaemonTest("kea-dhcp4");
}
// Simple V6 test that checks the library can be loaded and unloaded several times.
TEST_F(MySqlLbLibLoadTest, validLoad6) {
validDaemonTest("kea-dhcp6", AF_INET6);
}
// Simple test that checks the library cannot by loaded by invalid daemons.
TEST_F(MySqlLbLibLoadTest, invalidDaemonLoad) {
invalidDaemonTest("kea-ctrl-agent");
invalidDaemonTest("kea-dhcp-ddns");
invalidDaemonTest("bogus");
}
} // end of anonymous namespace

View File

@@ -0,0 +1,19 @@
// Copyright (C) 2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include <config.h>
#include <log/logger_support.h>
#include <gtest/gtest.h>
int
main(int argc, char* argv[]) {
::testing::InitGoogleTest(&argc, argv);
isc::log::initLogger();
int result = RUN_ALL_TESTS();
return (result);
}

View File

@@ -0,0 +1,82 @@
// Copyright (C) 2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
// Functions accessed by the hooks framework use C linkage to avoid the name
// mangling that accompanies use of the C++ compiler as well as to avoid
// issues related to namespaces.
#include <config.h>
#include <asiolink/io_service_mgr.h>
#include <dhcpsrv/cfgmgr.h>
#include <hooks/hooks.h>
#include <process/daemon.h>
#include <mysql_lb_log.h>
#include <mysql_lease_mgr.h>
#include <dhcpsrv/lease_mgr_factory.h>
#include <sstream>
#include <string>
using namespace isc::asiolink;
using namespace isc::dhcp;
using namespace isc::hooks;
using namespace isc::log;
using namespace isc::process;
using namespace std;
extern "C" {
/// @brief This function is called when the library is loaded.
///
/// @param handle library handle
/// @return 0 when initialization is successful, 1 otherwise
int load(LibraryHandle& /* handle */) {
// Make the hook library not loadable by d2 or ca.
uint16_t family = CfgMgr::instance().getFamily();
const std::string& proc_name = Daemon::getProcName();
if (family == AF_INET) {
if (proc_name != "kea-dhcp4") {
isc_throw(isc::Unexpected, "Bad process name: " << proc_name
<< ", expected kea-dhcp4");
}
} else {
if (proc_name != "kea-dhcp6") {
isc_throw(isc::Unexpected, "Bad process name: " << proc_name
<< ", expected kea-dhcp6");
}
}
// Register MySQL LB factories with Lease Managers
LeaseMgrFactory::registerFactory("mysql", MySqlLeaseMgr::factory, true);
LOG_INFO(mysql_lb_logger, MYSQL_LB_INIT_OK);
return (0);
}
/// @brief This function is called when the library is unloaded.
///
/// @return 0 if deregistration was successful, 1 otherwise
int unload() {
// Unregister the factories and remove MySQL backends
LeaseMgrFactory::deregisterFactory("mysql", true);
LOG_INFO(mysql_lb_logger, MYSQL_LB_DEINIT_OK);
return (0);
}
/// @brief This function is called to retrieve the multi-threading compatibility.
///
/// @note: the compatibility is based on the assumption this hook library
/// is always called from the main thread.
///
/// @return 1 which means compatible with multi-threading.
int multi_threading_compatible() {
return (1);
}
} // end extern "C"

View File

@@ -0,0 +1,17 @@
// Copyright (C) 2019-2022 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include <config.h>
#include <mysql_lb_log.h>
namespace isc {
namespace dhcp {
isc::log::Logger mysql_lb_logger("mysql-lb-hooks");
} // namespace dhcp
} // namespace isc

View File

@@ -0,0 +1,22 @@
// Copyright (C) 2019-2022 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifndef MYSQL_LB_LOG_H
#define MYSQL_LB_LOG_H
#include <log/logger_support.h>
#include <log/macros.h>
#include <mysql_lb_messages.h>
namespace isc {
namespace dhcp {
extern isc::log::Logger mysql_lb_logger;
} // namespace dhcp
} // namespace isc
#endif

View File

@@ -0,0 +1,23 @@
// File created from ../../../../src/hooks/dhcp/mysql_lb/mysql_lb_messages.mes
#include <cstddef>
#include <log/message_types.h>
#include <log/message_initializer.h>
extern const isc::log::MessageID MYSQL_LB_DB = "MYSQL_LB_DB";
extern const isc::log::MessageID MYSQL_LB_DEINIT_OK = "MYSQL_LB_DEINIT_OK";
extern const isc::log::MessageID MYSQL_LB_INIT_OK = "MYSQL_LB_INIT_OK";
namespace {
const char* values[] = {
"MYSQL_LB_DB", "opening MySQL lease database: %1",
"MYSQL_LB_DEINIT_OK", "unloading MySQL LB hooks library successful",
"MYSQL_LB_INIT_OK", "loading MySQL LB hooks library successful",
NULL
};
const isc::log::MessageInitializer initializer(values);
} // Anonymous namespace

View File

@@ -0,0 +1,12 @@
// File created from ../../../../src/hooks/dhcp/mysql_lb/mysql_lb_messages.mes
#ifndef MYSQL_LB_MESSAGES_H
#define MYSQL_LB_MESSAGES_H
#include <log/message_types.h>
extern const isc::log::MessageID MYSQL_LB_DB;
extern const isc::log::MessageID MYSQL_LB_DEINIT_OK;
extern const isc::log::MessageID MYSQL_LB_INIT_OK;
#endif // MYSQL_LB_MESSAGES_H

View File

@@ -0,0 +1,13 @@
% MYSQL_LB_DB opening MySQL lease database: %1
This informational message is logged when a DHCP server (either V4 or
V6) is about to open a MySQL lease database. The parameters of the
connection including database name and username needed to access it
(but not the password if any) are logged.
% MYSQL_LB_DEINIT_OK unloading MySQL LB hooks library successful
This informational message indicates that the MySQL Lease Backend hooks
library has been unloaded successfully.
% MYSQL_LB_INIT_OK loading MySQL LB hooks library successful
This informational message indicates that the MySQL Lease Backend hooks
library has been loaded successfully. Enjoy!

View File

@@ -8,9 +8,12 @@
#define MYSQL_LEASE_MGR_H #define MYSQL_LEASE_MGR_H
#include <asiolink/io_service.h> #include <asiolink/io_service.h>
#include <database/database_connection.h>
#include <dhcp/hwaddr.h> #include <dhcp/hwaddr.h>
#include <dhcpsrv/dhcpsrv_exceptions.h> #include <dhcpsrv/dhcpsrv_exceptions.h>
#include <dhcpsrv/lease_mgr_factory.h>
#include <dhcpsrv/tracking_lease_mgr.h> #include <dhcpsrv/tracking_lease_mgr.h>
#include <mysql_lb_log.h>
#include <mysql/mysql_connection.h> #include <mysql/mysql_connection.h>
#include <boost/scoped_ptr.hpp> #include <boost/scoped_ptr.hpp>
@@ -1295,27 +1298,32 @@ private:
/// @brief Timer name used to register database reconnect timer. /// @brief Timer name used to register database reconnect timer.
std::string timer_name_; std::string timer_name_;
public:
/// @brief Factory class method.
///
/// @param parameters A data structure relating keywords and values
/// concerned with the database.
///
/// @return The MySQL Lease Manager.
static TrackingLeaseMgrPtr
factory(const isc::db::DatabaseConnection::ParameterMap& parameters) {
LOG_INFO(mysql_lb_logger, MYSQL_LB_DB)
.arg(isc::db::DatabaseConnection::redactedAccessString(parameters));
return (TrackingLeaseMgrPtr(new MySqlLeaseMgr(parameters)));
}
}; };
struct MySqlLeaseMgrInit { struct MySqlLeaseMgrInit {
// Constructor registers // Constructor registers
MySqlLeaseMgrInit() { MySqlLeaseMgrInit() {
LeaseMgrFactory::registerFactory("mysql", factory, true); LeaseMgrFactory::registerFactory("mysql", MySqlLeaseMgr::factory, true);
} }
// Destructor deregisters // Destructor deregisters
~MySqlLeaseMgrInit() { ~MySqlLeaseMgrInit() {
LeaseMgrFactory::deregisterFactory("mysql", true); LeaseMgrFactory::deregisterFactory("mysql", true);
} }
// Factory class method
static TrackingLeaseMgrPtr
factory(const isc::db::DatabaseConnection::ParameterMap& parameters) {
// TODO - fix messages
//LOG_INFO(dhcpsrv_logger, DHCPSRV_MYSQL_DB)
// .arg(DatabaseConnection::redactedAccessString(parameters));
return (TrackingLeaseMgrPtr(new MySqlLeaseMgr(parameters)));
}
}; };
} // namespace dhcp } // namespace dhcp

View File

@@ -0,0 +1,18 @@
// Copyright (C) 2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include <config.h>
#include <hooks/hooks.h>
extern "C" {
/// @brief returns Kea hooks version.
int version() {
return (KEA_HOOKS_VERSION);
}
}

View File

@@ -4,8 +4,8 @@
// License, v. 2.0. If a copy of the MPL was not distributed with this // License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifndef LEASE_CMD_LOG_H #ifndef PGSQL_CB_LOG_H
#define LEASE_CMD_LOG_H #define PGSQL_CB_LOG_H
#include <log/logger_support.h> #include <log/logger_support.h>
#include <log/macros.h> #include <log/macros.h>

View File

@@ -226,7 +226,7 @@ const char* values[] = {
"PGSQL_CB_CREATE_UPDATE_SHARED_NETWORK_OPTION6", "create or update shared network: %1 option", "PGSQL_CB_CREATE_UPDATE_SHARED_NETWORK_OPTION6", "create or update shared network: %1 option",
"PGSQL_CB_CREATE_UPDATE_SUBNET4", "create or update subnet: %1", "PGSQL_CB_CREATE_UPDATE_SUBNET4", "create or update subnet: %1",
"PGSQL_CB_CREATE_UPDATE_SUBNET6", "create or update subnet: %1", "PGSQL_CB_CREATE_UPDATE_SUBNET6", "create or update subnet: %1",
"PGSQL_CB_DEINIT_OK", "unloading Postgres CB hooks library successful", "PGSQL_CB_DEINIT_OK", "unloading PostgreSQL CB hooks library successful",
"PGSQL_CB_DELETE_ALL_CLIENT_CLASSES4", "delete all client classes", "PGSQL_CB_DELETE_ALL_CLIENT_CLASSES4", "delete all client classes",
"PGSQL_CB_DELETE_ALL_CLIENT_CLASSES4_RESULT", "deleted: %1 entries", "PGSQL_CB_DELETE_ALL_CLIENT_CLASSES4_RESULT", "deleted: %1 entries",
"PGSQL_CB_DELETE_ALL_CLIENT_CLASSES6", "delete all client classes", "PGSQL_CB_DELETE_ALL_CLIENT_CLASSES6", "delete all client classes",
@@ -383,7 +383,7 @@ const char* values[] = {
"PGSQL_CB_GET_SUBNET6_BY_SUBNET_ID", "retrieving subnet by subnet id: %1", "PGSQL_CB_GET_SUBNET6_BY_SUBNET_ID", "retrieving subnet by subnet id: %1",
"PGSQL_CB_GET_TYPE4", "get type", "PGSQL_CB_GET_TYPE4", "get type",
"PGSQL_CB_GET_TYPE6", "get type", "PGSQL_CB_GET_TYPE6", "get type",
"PGSQL_CB_INIT_OK", "loading Postgres CB hooks library successful", "PGSQL_CB_INIT_OK", "loading PostgreSQL CB hooks library successful",
"PGSQL_CB_NO_TLS_SUPPORT", "Attempt to configure TLS (unsupported for PostgreSQL): %1", "PGSQL_CB_NO_TLS_SUPPORT", "Attempt to configure TLS (unsupported for PostgreSQL): %1",
"PGSQL_CB_RECONNECT_ATTEMPT_FAILED4", "database reconnect failed: %1", "PGSQL_CB_RECONNECT_ATTEMPT_FAILED4", "database reconnect failed: %1",
"PGSQL_CB_RECONNECT_ATTEMPT_FAILED6", "database reconnect failed: %1", "PGSQL_CB_RECONNECT_ATTEMPT_FAILED6", "database reconnect failed: %1",

View File

@@ -88,8 +88,8 @@ Debug message issued when triggered an action to create or update subnet
Logged at debug log level 40. Logged at debug log level 40.
Debug message issued when triggered an action to create or update subnet Debug message issued when triggered an action to create or update subnet
% PGSQL_CB_DEINIT_OK unloading Postgres CB hooks library successful % PGSQL_CB_DEINIT_OK unloading PostgreSQL CB hooks library successful
This informational message indicates that the Postgres Configuration Backend hooks This informational message indicates that the PostgreSQL Configuration Backend hooks
library has been unloaded successfully. library has been unloaded successfully.
% PGSQL_CB_DELETE_ALL_CLIENT_CLASSES4 delete all client classes % PGSQL_CB_DELETE_ALL_CLIENT_CLASSES4 delete all client classes
@@ -720,8 +720,8 @@ Debug message issued when triggered an action to retrieve type
Logged at debug log level 40. Logged at debug log level 40.
Debug message issued when triggered an action to retrieve type Debug message issued when triggered an action to retrieve type
% PGSQL_CB_INIT_OK loading Postgres CB hooks library successful % PGSQL_CB_INIT_OK loading PostgreSQL CB hooks library successful
This informational message indicates that the Postgres Configuration Backend hooks This informational message indicates that the PostgreSQL Configuration Backend hooks
library has been loaded successfully. Enjoy! library has been loaded successfully. Enjoy!
% PGSQL_CB_NO_TLS_SUPPORT Attempt to configure TLS (unsupported for PostgreSQL): %1 % PGSQL_CB_NO_TLS_SUPPORT Attempt to configure TLS (unsupported for PostgreSQL): %1

View File

@@ -0,0 +1,2 @@
/pgsql_hb_messages.cc -diff merge=ours
/pgsql_hb_messages.h -diff merge=ours

View File

@@ -14,7 +14,11 @@ CLEANFILES = *.gcno *.gcda
# convenience archive # convenience archive
noinst_LTLIBRARIES = libpgsqlhb.la noinst_LTLIBRARIES = libpgsqlhb.la
libpgsqlhb_la_SOURCES = pgsql_host_data_source.cc pgsql_host_data_source.h libpgsqlhb_la_SOURCES = pgsql_hb_callouts.cc
libpgsqlhb_la_SOURCES += pgsql_hb_log.cc pgsql_hb_log.h
libpgsqlhb_la_SOURCES += pgsql_hb_messages.cc pgsql_hb_messages.h
libpgsqlhb_la_SOURCES += pgsql_host_data_source.cc pgsql_host_data_source.h
libpgsqlhb_la_SOURCES += version.cc
libpgsqlhb_la_CXXFLAGS = $(AM_CXXFLAGS) libpgsqlhb_la_CXXFLAGS = $(AM_CXXFLAGS)
libpgsqlhb_la_CPPFLAGS = $(AM_CPPFLAGS) libpgsqlhb_la_CPPFLAGS = $(AM_CPPFLAGS)

View File

@@ -0,0 +1 @@
hook_load_unittests

View File

@@ -0,0 +1,56 @@
SUBDIRS = .
AM_CPPFLAGS = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib
AM_CPPFLAGS += -I$(top_builddir)/src/hooks/dhcp/pgsql_hb -I$(top_srcdir)/src/hooks/dhcp/pgsql_hb
AM_CPPFLAGS += $(BOOST_INCLUDES)
AM_CPPFLAGS += -DLIBDHCP_PGSQL_HB_SO=\"$(abs_top_builddir)/src/hooks/dhcp/pgsql_hb/.libs/libdhcp_pgsql_hb.so\"
AM_CXXFLAGS = $(KEA_CXXFLAGS)
if USE_STATIC_LINK
AM_LDFLAGS = -static
endif
EXTRA_DIST =
CLEANFILES = *.gcno *.gcda
TESTS_ENVIRONMENT = \
$(LIBTOOL) --mode=execute $(VALGRIND_COMMAND)
if HAVE_GTEST
TESTS = hook_load_unittests
hook_load_unittests_SOURCES =
hook_load_unittests_SOURCES += load_unload_unittests.cc
hook_load_unittests_SOURCES += run_unittests.cc
hook_load_unittests_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES) $(LOG4CPLUS_INCLUDES)
hook_load_unittests_CXXFLAGS = $(AM_CXXFLAGS)
hook_load_unittests_LDFLAGS = $(AM_LDFLAGS) $(GTEST_LDFLAGS)
hook_load_unittests_LDADD = $(top_builddir)/src/lib/dhcpsrv/libkea-dhcpsrv.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/process/libkea-process.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/eval/libkea-eval.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/dhcp_ddns/libkea-dhcp_ddns.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/stats/libkea-stats.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/config/libkea-cfgclient.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/http/libkea-http.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/dhcp/libkea-dhcp++.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/hooks/libkea-hooks.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/pgsql/libkea-pgsql.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/database/libkea-database.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/cc/libkea-cc.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/asiolink/libkea-asiolink.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/dns/libkea-dns++.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/cryptolink/libkea-cryptolink.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/log/libkea-log.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/util/libkea-util.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/exceptions/libkea-exceptions.la
hook_load_unittests_LDADD += $(LOG4CPLUS_LIBS)
hook_load_unittests_LDADD += $(CRYPTO_LIBS)
hook_load_unittests_LDADD += $(BOOST_LIBS)
hook_load_unittests_LDADD += $(GTEST_LDADD)
noinst_PROGRAMS = $(TESTS)
endif

View File

@@ -0,0 +1,60 @@
// Copyright (C) 2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
/// @file This file contains tests which exercise the load and unload
/// functions in the ddns tuning hook library. In order to test the load
/// function, one must be able to pass it hook library parameters. The
/// the only way to populate these parameters is by actually loading the
/// library via HooksManager::loadLibraries().
#include <config.h>
#include <dhcpsrv/testutils/lib_load_test_fixture.h>
#include <testutils/gtest_utils.h>
#include <gtest/gtest.h>
#include <errno.h>
using namespace std;
using namespace isc;
using namespace isc::hooks;
using namespace isc::data;
using namespace isc::dhcp;
using namespace isc::process;
namespace {
/// @brief Test fixture for testing loading and unloading the PgSQL hb library
class PgSqlHbLibLoadTest : public isc::test::LibLoadTest {
public:
/// @brief Constructor
PgSqlHbLibLoadTest() : LibLoadTest(LIBDHCP_PGSQL_HB_SO) {
}
/// @brief Destructor
virtual ~PgSqlHbLibLoadTest() {
unloadLibraries();
}
};
// Simple V4 test that checks the library can be loaded and unloaded several times.
TEST_F(PgSqlHbLibLoadTest, validLoad4) {
validDaemonTest("kea-dhcp4");
}
// Simple V6 test that checks the library can be loaded and unloaded several times.
TEST_F(PgSqlHbLibLoadTest, validLoad6) {
validDaemonTest("kea-dhcp6", AF_INET6);
}
// Simple test that checks the library cannot by loaded by invalid daemons.
TEST_F(PgSqlHbLibLoadTest, invalidDaemonLoad) {
invalidDaemonTest("kea-ctrl-agent");
invalidDaemonTest("kea-dhcp-ddns");
invalidDaemonTest("bogus");
}
} // end of anonymous namespace

View File

@@ -0,0 +1,19 @@
// Copyright (C) 2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include <config.h>
#include <log/logger_support.h>
#include <gtest/gtest.h>
int
main(int argc, char* argv[]) {
::testing::InitGoogleTest(&argc, argv);
isc::log::initLogger();
int result = RUN_ALL_TESTS();
return (result);
}

View File

@@ -0,0 +1,82 @@
// Copyright (C) 2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
// Functions accessed by the hooks framework use C linkage to avoid the name
// mangling that accompanies use of the C++ compiler as well as to avoid
// issues related to namespaces.
#include <config.h>
#include <asiolink/io_service_mgr.h>
#include <dhcpsrv/base_host_data_source.h>
#include <dhcpsrv/cfgmgr.h>
#include <hooks/hooks.h>
#include <process/daemon.h>
#include <pgsql_hb_log.h>
#include <pgsql_host_data_source.h>
#include <sstream>
#include <string>
using namespace isc::asiolink;
using namespace isc::dhcp;
using namespace isc::hooks;
using namespace isc::log;
using namespace isc::process;
using namespace std;
extern "C" {
/// @brief This function is called when the library is loaded.
///
/// @param handle library handle
/// @return 0 when initialization is successful, 1 otherwise
int load(LibraryHandle& /* handle */) {
// Make the hook library not loadable by d2 or ca.
uint16_t family = CfgMgr::instance().getFamily();
const std::string& proc_name = Daemon::getProcName();
if (family == AF_INET) {
if (proc_name != "kea-dhcp4") {
isc_throw(isc::Unexpected, "Bad process name: " << proc_name
<< ", expected kea-dhcp4");
}
} else {
if (proc_name != "kea-dhcp6") {
isc_throw(isc::Unexpected, "Bad process name: " << proc_name
<< ", expected kea-dhcp6");
}
}
// Register PgSQL HB factories with Host Managers
isc::dhcp::HostDataSourceFactory::registerFactory("postgresql", PgSqlHostDataSource::factory, true);
LOG_INFO(pgsql_hb_logger, PGSQL_HB_INIT_OK);
return (0);
}
/// @brief This function is called when the library is unloaded.
///
/// @return 0 if deregistration was successful, 1 otherwise
int unload() {
// Unregister the factories and remove PgSQL backends
isc::dhcp::HostDataSourceFactory::deregisterFactory("postgresql", true);
LOG_INFO(pgsql_hb_logger, PGSQL_HB_DEINIT_OK);
return (0);
}
/// @brief This function is called to retrieve the multi-threading compatibility.
///
/// @note: the compatibility is based on the assumption this hook library
/// is always called from the main thread.
///
/// @return 1 which means compatible with multi-threading.
int multi_threading_compatible() {
return (1);
}
} // end extern "C"

View File

@@ -0,0 +1,17 @@
// Copyright (C) 2019-2022 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include <config.h>
#include <pgsql_hb_log.h>
namespace isc {
namespace dhcp {
isc::log::Logger pgsql_hb_logger("pgsql-hb-hooks");
} // namespace dhcp
} // namespace isc

View File

@@ -0,0 +1,22 @@
// Copyright (C) 2019-2022 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifndef PGSQL_HB_LOG_H
#define PGSQL_HB_LOG_H
#include <log/logger_support.h>
#include <log/macros.h>
#include <pgsql_hb_messages.h>
namespace isc {
namespace dhcp {
extern isc::log::Logger pgsql_hb_logger;
} // namespace dhcp
} // namespace isc
#endif

View File

@@ -0,0 +1,23 @@
// File created from ../../../../src/hooks/dhcp/pgsql_hb/pgsql_hb_messages.mes
#include <cstddef>
#include <log/message_types.h>
#include <log/message_initializer.h>
extern const isc::log::MessageID PGSQL_HB_DB = "PGSQL_HB_DB";
extern const isc::log::MessageID PGSQL_HB_DEINIT_OK = "PGSQL_HB_DEINIT_OK";
extern const isc::log::MessageID PGSQL_HB_INIT_OK = "PGSQL_HB_INIT_OK";
namespace {
const char* values[] = {
"PGSQL_HB_DB", "opening PostgreSQL hosts database: %1",
"PGSQL_HB_DEINIT_OK", "unloading PostgreSQL HB hooks library successful",
"PGSQL_HB_INIT_OK", "loading PostgreSQL HB hooks library successful",
NULL
};
const isc::log::MessageInitializer initializer(values);
} // Anonymous namespace

View File

@@ -0,0 +1,12 @@
// File created from ../../../../src/hooks/dhcp/pgsql_hb/pgsql_hb_messages.mes
#ifndef PGSQL_HB_MESSAGES_H
#define PGSQL_HB_MESSAGES_H
#include <log/message_types.h>
extern const isc::log::MessageID PGSQL_HB_DB;
extern const isc::log::MessageID PGSQL_HB_DEINIT_OK;
extern const isc::log::MessageID PGSQL_HB_INIT_OK;
#endif // PGSQL_HB_MESSAGES_H

View File

@@ -0,0 +1,14 @@
% PGSQL_HB_DB opening PostgreSQL hosts database: %1
Logged at debug log level 50.
This informational message is logged when a DHCP server (either V4 or
V6) is about to open a PostgreSQL hosts database. The parameters of the
connection including database name and username needed to access it
(but not the password if any) are logged.
% PGSQL_HB_DEINIT_OK unloading PostgreSQL HB hooks library successful
This informational message indicates that the PostgreSQL Host Backend hooks
library has been unloaded successfully.
% PGSQL_HB_INIT_OK loading PostgreSQL HB hooks library successful
This informational message indicates that the PostgreSQL Host Backend hooks
library has been loaded successfully. Enjoy!

View File

@@ -10,6 +10,7 @@
#include <database/database_connection.h> #include <database/database_connection.h>
#include <dhcpsrv/base_host_data_source.h> #include <dhcpsrv/base_host_data_source.h>
#include <dhcpsrv/host_data_source_factory.h> #include <dhcpsrv/host_data_source_factory.h>
#include <pgsql_hb_log.h>
#include <pgsql/pgsql_connection.h> #include <pgsql/pgsql_connection.h>
#include <pgsql/pgsql_exchange.h> #include <pgsql/pgsql_exchange.h>
@@ -582,27 +583,32 @@ public:
private: private:
/// @brief Pointer to the implementation of the @ref PgSqlHostDataSource. /// @brief Pointer to the implementation of the @ref PgSqlHostDataSource.
PgSqlHostDataSourceImplPtr impl_; PgSqlHostDataSourceImplPtr impl_;
public:
/// @brief Factory class method.
///
/// @param parameters A data structure relating keywords and values
/// concerned with the database.
///
/// @return The PostgreSQL Host Manager.
static HostDataSourcePtr
factory(const isc::db::DatabaseConnection::ParameterMap& parameters) {
LOG_INFO(pgsql_hb_logger, PGSQL_HB_DB)
.arg(isc::db::DatabaseConnection::redactedAccessString(parameters));
return (HostDataSourcePtr(new PgSqlHostDataSource(parameters)));
}
}; };
struct PgSqlHostDataSourceInit { struct PgSqlHostDataSourceInit {
// Constructor registers // Constructor registers
PgSqlHostDataSourceInit() { PgSqlHostDataSourceInit() {
isc::dhcp::HostDataSourceFactory::registerFactory("postgresql", factory, true); isc::dhcp::HostDataSourceFactory::registerFactory("postgresql", PgSqlHostDataSource::factory, true);
} }
// Destructor deregisters // Destructor deregisters
~PgSqlHostDataSourceInit() { ~PgSqlHostDataSourceInit() {
isc::dhcp::HostDataSourceFactory::deregisterFactory("postgresql", true); isc::dhcp::HostDataSourceFactory::deregisterFactory("postgresql", true);
} }
// Factory class method
static HostDataSourcePtr
factory(const isc::db::DatabaseConnection::ParameterMap& parameters) {
// TODO - fix messages
//LOG_INFO(hosts_logger, DHCPSRV_PGSQL_HOST_DB)
// .arg(DatabaseConnection::redactedAccessString(parameters));
return (HostDataSourcePtr(new PgSqlHostDataSource(parameters)));
}
}; };
} // namespace dhcp } // namespace dhcp

View File

@@ -0,0 +1,18 @@
// Copyright (C) 2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include <config.h>
#include <hooks/hooks.h>
extern "C" {
/// @brief returns Kea hooks version.
int version() {
return (KEA_HOOKS_VERSION);
}
}

View File

@@ -0,0 +1,2 @@
/pgsql_lb_messages.cc -diff merge=ours
/pgsql_lb_messages.h -diff merge=ours

View File

@@ -14,7 +14,11 @@ CLEANFILES = *.gcno *.gcda
# convenience archive # convenience archive
noinst_LTLIBRARIES = libpgsqllb.la noinst_LTLIBRARIES = libpgsqllb.la
libpgsqllb_la_SOURCES = pgsql_lease_mgr.cc pgsql_lease_mgr.h libpgsqllb_la_SOURCES = pgsql_lb_callouts.cc
libpgsqllb_la_SOURCES += pgsql_lb_log.cc pgsql_lb_log.h
libpgsqllb_la_SOURCES += pgsql_lb_messages.cc pgsql_lb_messages.h
libpgsqllb_la_SOURCES += pgsql_lease_mgr.cc pgsql_lease_mgr.h
libpgsqllb_la_SOURCES += version.cc
libpgsqllb_la_CXXFLAGS = $(AM_CXXFLAGS) libpgsqllb_la_CXXFLAGS = $(AM_CXXFLAGS)
libpgsqllb_la_CPPFLAGS = $(AM_CPPFLAGS) libpgsqllb_la_CPPFLAGS = $(AM_CPPFLAGS)

View File

@@ -0,0 +1 @@
hook_load_unittests

View File

@@ -0,0 +1,56 @@
SUBDIRS = .
AM_CPPFLAGS = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib
AM_CPPFLAGS += -I$(top_builddir)/src/hooks/dhcp/pgsql_lb -I$(top_srcdir)/src/hooks/dhcp/pgsql_lb
AM_CPPFLAGS += $(BOOST_INCLUDES)
AM_CPPFLAGS += -DLIBDHCP_PGSQL_LB_SO=\"$(abs_top_builddir)/src/hooks/dhcp/pgsql_lb/.libs/libdhcp_pgsql_lb.so\"
AM_CXXFLAGS = $(KEA_CXXFLAGS)
if USE_STATIC_LINK
AM_LDFLAGS = -static
endif
EXTRA_DIST =
CLEANFILES = *.gcno *.gcda
TESTS_ENVIRONMENT = \
$(LIBTOOL) --mode=execute $(VALGRIND_COMMAND)
if HAVE_GTEST
TESTS = hook_load_unittests
hook_load_unittests_SOURCES =
hook_load_unittests_SOURCES += load_unload_unittests.cc
hook_load_unittests_SOURCES += run_unittests.cc
hook_load_unittests_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES) $(LOG4CPLUS_INCLUDES)
hook_load_unittests_CXXFLAGS = $(AM_CXXFLAGS)
hook_load_unittests_LDFLAGS = $(AM_LDFLAGS) $(GTEST_LDFLAGS)
hook_load_unittests_LDADD = $(top_builddir)/src/lib/dhcpsrv/libkea-dhcpsrv.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/process/libkea-process.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/eval/libkea-eval.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/dhcp_ddns/libkea-dhcp_ddns.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/stats/libkea-stats.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/config/libkea-cfgclient.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/http/libkea-http.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/dhcp/libkea-dhcp++.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/hooks/libkea-hooks.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/pgsql/libkea-pgsql.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/database/libkea-database.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/cc/libkea-cc.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/asiolink/libkea-asiolink.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/dns/libkea-dns++.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/cryptolink/libkea-cryptolink.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/log/libkea-log.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/util/libkea-util.la
hook_load_unittests_LDADD += $(top_builddir)/src/lib/exceptions/libkea-exceptions.la
hook_load_unittests_LDADD += $(LOG4CPLUS_LIBS)
hook_load_unittests_LDADD += $(CRYPTO_LIBS)
hook_load_unittests_LDADD += $(BOOST_LIBS)
hook_load_unittests_LDADD += $(GTEST_LDADD)
noinst_PROGRAMS = $(TESTS)
endif

View File

@@ -0,0 +1,60 @@
// Copyright (C) 2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
/// @file This file contains tests which exercise the load and unload
/// functions in the ddns tuning hook library. In order to test the load
/// function, one must be able to pass it hook library parameters. The
/// the only way to populate these parameters is by actually loading the
/// library via HooksManager::loadLibraries().
#include <config.h>
#include <dhcpsrv/testutils/lib_load_test_fixture.h>
#include <testutils/gtest_utils.h>
#include <gtest/gtest.h>
#include <errno.h>
using namespace std;
using namespace isc;
using namespace isc::hooks;
using namespace isc::data;
using namespace isc::dhcp;
using namespace isc::process;
namespace {
/// @brief Test fixture for testing loading and unloading the PgSQL lb library
class PgSqlLbLibLoadTest : public isc::test::LibLoadTest {
public:
/// @brief Constructor
PgSqlLbLibLoadTest() : LibLoadTest(LIBDHCP_PGSQL_LB_SO) {
}
/// @brief Destructor
virtual ~PgSqlLbLibLoadTest() {
unloadLibraries();
}
};
// Simple V4 test that checks the library can be loaded and unloaded several times.
TEST_F(PgSqlLbLibLoadTest, validLoad4) {
validDaemonTest("kea-dhcp4");
}
// Simple V6 test that checks the library can be loaded and unloaded several times.
TEST_F(PgSqlLbLibLoadTest, validLoad6) {
validDaemonTest("kea-dhcp6", AF_INET6);
}
// Simple test that checks the library cannot by loaded by invalid daemons.
TEST_F(PgSqlLbLibLoadTest, invalidDaemonLoad) {
invalidDaemonTest("kea-ctrl-agent");
invalidDaemonTest("kea-dhcp-ddns");
invalidDaemonTest("bogus");
}
} // end of anonymous namespace

View File

@@ -0,0 +1,19 @@
// Copyright (C) 2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include <config.h>
#include <log/logger_support.h>
#include <gtest/gtest.h>
int
main(int argc, char* argv[]) {
::testing::InitGoogleTest(&argc, argv);
isc::log::initLogger();
int result = RUN_ALL_TESTS();
return (result);
}

View File

@@ -0,0 +1,82 @@
// Copyright (C) 2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
// Functions accessed by the hooks framework use C linkage to avoid the name
// mangling that accompanies use of the C++ compiler as well as to avoid
// issues related to namespaces.
#include <config.h>
#include <asiolink/io_service_mgr.h>
#include <dhcpsrv/cfgmgr.h>
#include <hooks/hooks.h>
#include <process/daemon.h>
#include <pgsql_lb_log.h>
#include <pgsql_lease_mgr.h>
#include <dhcpsrv/lease_mgr_factory.h>
#include <sstream>
#include <string>
using namespace isc::asiolink;
using namespace isc::dhcp;
using namespace isc::hooks;
using namespace isc::log;
using namespace isc::process;
using namespace std;
extern "C" {
/// @brief This function is called when the library is loaded.
///
/// @param handle library handle
/// @return 0 when initialization is successful, 1 otherwise
int load(LibraryHandle& /* handle */) {
// Make the hook library not loadable by d2 or ca.
uint16_t family = CfgMgr::instance().getFamily();
const std::string& proc_name = Daemon::getProcName();
if (family == AF_INET) {
if (proc_name != "kea-dhcp4") {
isc_throw(isc::Unexpected, "Bad process name: " << proc_name
<< ", expected kea-dhcp4");
}
} else {
if (proc_name != "kea-dhcp6") {
isc_throw(isc::Unexpected, "Bad process name: " << proc_name
<< ", expected kea-dhcp6");
}
}
// Register PgSQL LB factories with Lease Managers
LeaseMgrFactory::registerFactory("postgresql", PgSqlLeaseMgr::factory, true);
LOG_INFO(pgsql_lb_logger, PGSQL_LB_INIT_OK);
return (0);
}
/// @brief This function is called when the library is unloaded.
///
/// @return 0 if deregistration was successful, 1 otherwise
int unload() {
// Unregister the factories and remove PgSQL backends
LeaseMgrFactory::deregisterFactory("postgresql", true);
LOG_INFO(pgsql_lb_logger, PGSQL_LB_DEINIT_OK);
return (0);
}
/// @brief This function is called to retrieve the multi-threading compatibility.
///
/// @note: the compatibility is based on the assumption this hook library
/// is always called from the main thread.
///
/// @return 1 which means compatible with multi-threading.
int multi_threading_compatible() {
return (1);
}
} // end extern "C"

View File

@@ -0,0 +1,17 @@
// Copyright (C) 2019-2022 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include <config.h>
#include <pgsql_lb_log.h>
namespace isc {
namespace dhcp {
isc::log::Logger pgsql_lb_logger("pgsql-lb-hooks");
} // namespace dhcp
} // namespace isc

View File

@@ -0,0 +1,22 @@
// Copyright (C) 2019-2022 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifndef PGSQL_LB_LOG_H
#define PGSQL_LB_LOG_H
#include <log/logger_support.h>
#include <log/macros.h>
#include <pgsql_lb_messages.h>
namespace isc {
namespace dhcp {
extern isc::log::Logger pgsql_lb_logger;
} // namespace dhcp
} // namespace isc
#endif

View File

@@ -0,0 +1,23 @@
// File created from ../../../../src/hooks/dhcp/pgsql_lb/pgsql_lb_messages.mes
#include <cstddef>
#include <log/message_types.h>
#include <log/message_initializer.h>
extern const isc::log::MessageID PGSQL_LB_DB = "PGSQL_LB_DB";
extern const isc::log::MessageID PGSQL_LB_DEINIT_OK = "PGSQL_LB_DEINIT_OK";
extern const isc::log::MessageID PGSQL_LB_INIT_OK = "PGSQL_LB_INIT_OK";
namespace {
const char* values[] = {
"PGSQL_LB_DB", "opening PostgreSQL lease database: %1",
"PGSQL_LB_DEINIT_OK", "unloading PostgreSQL LB hooks library successful",
"PGSQL_LB_INIT_OK", "loading PostgreSQL LB hooks library successful",
NULL
};
const isc::log::MessageInitializer initializer(values);
} // Anonymous namespace

View File

@@ -0,0 +1,12 @@
// File created from ../../../../src/hooks/dhcp/pgsql_lb/pgsql_lb_messages.mes
#ifndef PGSQL_LB_MESSAGES_H
#define PGSQL_LB_MESSAGES_H
#include <log/message_types.h>
extern const isc::log::MessageID PGSQL_LB_DB;
extern const isc::log::MessageID PGSQL_LB_DEINIT_OK;
extern const isc::log::MessageID PGSQL_LB_INIT_OK;
#endif // PGSQL_LB_MESSAGES_H

View File

@@ -0,0 +1,13 @@
% PGSQL_LB_DB opening PostgreSQL lease database: %1
This informational message is logged when a DHCP server (either V4 or
V6) is about to open a PostgreSQL lease database. The parameters of the
connection including database name and username needed to access it
(but not the password if any) are logged.
% PGSQL_LB_DEINIT_OK unloading PostgreSQL LB hooks library successful
This informational message indicates that the PostgreSLQ Lease Backend hooks
library has been unloaded successfully.
% PGSQL_LB_INIT_OK loading PostgreSQL LB hooks library successful
This informational message indicates that the PostgreSQL Lease Backend hooks
library has been loaded successfully. Enjoy!

View File

@@ -8,10 +8,12 @@
#define PGSQL_LEASE_MGR_H #define PGSQL_LEASE_MGR_H
#include <asiolink/io_service.h> #include <asiolink/io_service.h>
#include <database/database_connection.h>
#include <dhcp/hwaddr.h> #include <dhcp/hwaddr.h>
#include <dhcpsrv/dhcpsrv_exceptions.h> #include <dhcpsrv/dhcpsrv_exceptions.h>
#include <dhcpsrv/lease_mgr.h> #include <dhcpsrv/lease_mgr_factory.h>
#include <dhcpsrv/tracking_lease_mgr.h> #include <dhcpsrv/tracking_lease_mgr.h>
#include <pgsql_lb_log.h>
#include <pgsql/pgsql_connection.h> #include <pgsql/pgsql_connection.h>
#include <pgsql/pgsql_exchange.h> #include <pgsql/pgsql_exchange.h>
@@ -1255,27 +1257,32 @@ private:
/// @brief Timer name used to register database reconnect timer. /// @brief Timer name used to register database reconnect timer.
std::string timer_name_; std::string timer_name_;
public:
/// @brief Factory class method.
///
/// @param parameters A data structure relating keywords and values
/// concerned with the database.
///
/// @return The PostgreSQL Lease Manager.
static TrackingLeaseMgrPtr
factory(const isc::db::DatabaseConnection::ParameterMap& parameters) {
LOG_INFO(pgsql_lb_logger, PGSQL_LB_DB)
.arg(isc::db::DatabaseConnection::redactedAccessString(parameters));
return (TrackingLeaseMgrPtr(new PgSqlLeaseMgr(parameters)));
}
}; };
struct PgSqlLeaseMgrInit { struct PgSqlLeaseMgrInit {
// Constructor registers // Constructor registers
PgSqlLeaseMgrInit() { PgSqlLeaseMgrInit() {
LeaseMgrFactory::registerFactory("postgresql", factory, true); LeaseMgrFactory::registerFactory("postgresql", PgSqlLeaseMgr::factory, true);
} }
// Destructor deregisters // Destructor deregisters
~PgSqlLeaseMgrInit() { ~PgSqlLeaseMgrInit() {
LeaseMgrFactory::deregisterFactory("postgresql", true); LeaseMgrFactory::deregisterFactory("postgresql", true);
} }
// Factory class method
static TrackingLeaseMgrPtr
factory(const isc::db::DatabaseConnection::ParameterMap& parameters) {
// TODO - fix messages
//LOG_INFO(dhcpsrv_logger, DHCPSRV_PGSQL_DB)
// .arg(DatabaseConnection::redactedAccessString(parameters));
return (TrackingLeaseMgrPtr(new PgSqlLeaseMgr(parameters)));
}
}; };
} // namespace dhcp } // namespace dhcp

View File

@@ -0,0 +1,18 @@
// Copyright (C) 2024 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include <config.h>
#include <hooks/hooks.h>
extern "C" {
/// @brief returns Kea hooks version.
int version() {
return (KEA_HOOKS_VERSION);
}
}

View File

@@ -143,7 +143,6 @@ extern const isc::log::MessageID DHCPSRV_MULTIPLE_RAW_SOCKETS_PER_IFACE = "DHCPS
extern const isc::log::MessageID DHCPSRV_MYSQL_ADD_ADDR4 = "DHCPSRV_MYSQL_ADD_ADDR4"; extern const isc::log::MessageID DHCPSRV_MYSQL_ADD_ADDR4 = "DHCPSRV_MYSQL_ADD_ADDR4";
extern const isc::log::MessageID DHCPSRV_MYSQL_ADD_ADDR6 = "DHCPSRV_MYSQL_ADD_ADDR6"; extern const isc::log::MessageID DHCPSRV_MYSQL_ADD_ADDR6 = "DHCPSRV_MYSQL_ADD_ADDR6";
extern const isc::log::MessageID DHCPSRV_MYSQL_COMMIT = "DHCPSRV_MYSQL_COMMIT"; extern const isc::log::MessageID DHCPSRV_MYSQL_COMMIT = "DHCPSRV_MYSQL_COMMIT";
extern const isc::log::MessageID DHCPSRV_MYSQL_DB = "DHCPSRV_MYSQL_DB";
extern const isc::log::MessageID DHCPSRV_MYSQL_DELETED_EXPIRED_RECLAIMED = "DHCPSRV_MYSQL_DELETED_EXPIRED_RECLAIMED"; extern const isc::log::MessageID DHCPSRV_MYSQL_DELETED_EXPIRED_RECLAIMED = "DHCPSRV_MYSQL_DELETED_EXPIRED_RECLAIMED";
extern const isc::log::MessageID DHCPSRV_MYSQL_DELETE_ADDR = "DHCPSRV_MYSQL_DELETE_ADDR"; extern const isc::log::MessageID DHCPSRV_MYSQL_DELETE_ADDR = "DHCPSRV_MYSQL_DELETE_ADDR";
extern const isc::log::MessageID DHCPSRV_MYSQL_DELETE_EXPIRED_RECLAIMED4 = "DHCPSRV_MYSQL_DELETE_EXPIRED_RECLAIMED4"; extern const isc::log::MessageID DHCPSRV_MYSQL_DELETE_EXPIRED_RECLAIMED4 = "DHCPSRV_MYSQL_DELETE_EXPIRED_RECLAIMED4";
@@ -173,7 +172,6 @@ extern const isc::log::MessageID DHCPSRV_MYSQL_GET_SUBID_CLIENTID = "DHCPSRV_MYS
extern const isc::log::MessageID DHCPSRV_MYSQL_GET_SUBID_HWADDR = "DHCPSRV_MYSQL_GET_SUBID_HWADDR"; extern const isc::log::MessageID DHCPSRV_MYSQL_GET_SUBID_HWADDR = "DHCPSRV_MYSQL_GET_SUBID_HWADDR";
extern const isc::log::MessageID DHCPSRV_MYSQL_GET_SUBID_PAGE6 = "DHCPSRV_MYSQL_GET_SUBID_PAGE6"; extern const isc::log::MessageID DHCPSRV_MYSQL_GET_SUBID_PAGE6 = "DHCPSRV_MYSQL_GET_SUBID_PAGE6";
extern const isc::log::MessageID DHCPSRV_MYSQL_GET_VERSION = "DHCPSRV_MYSQL_GET_VERSION"; extern const isc::log::MessageID DHCPSRV_MYSQL_GET_VERSION = "DHCPSRV_MYSQL_GET_VERSION";
extern const isc::log::MessageID DHCPSRV_MYSQL_HOST_DB = "DHCPSRV_MYSQL_HOST_DB";
extern const isc::log::MessageID DHCPSRV_MYSQL_HOST_DB_GET_VERSION = "DHCPSRV_MYSQL_HOST_DB_GET_VERSION"; extern const isc::log::MessageID DHCPSRV_MYSQL_HOST_DB_GET_VERSION = "DHCPSRV_MYSQL_HOST_DB_GET_VERSION";
extern const isc::log::MessageID DHCPSRV_MYSQL_HOST_DB_READONLY = "DHCPSRV_MYSQL_HOST_DB_READONLY"; extern const isc::log::MessageID DHCPSRV_MYSQL_HOST_DB_READONLY = "DHCPSRV_MYSQL_HOST_DB_READONLY";
extern const isc::log::MessageID DHCPSRV_MYSQL_HOST_DB_RECONNECT_ATTEMPT_FAILED = "DHCPSRV_MYSQL_HOST_DB_RECONNECT_ATTEMPT_FAILED"; extern const isc::log::MessageID DHCPSRV_MYSQL_HOST_DB_RECONNECT_ATTEMPT_FAILED = "DHCPSRV_MYSQL_HOST_DB_RECONNECT_ATTEMPT_FAILED";
@@ -200,7 +198,6 @@ extern const isc::log::MessageID DHCPSRV_OPEN_SOCKET_FAIL = "DHCPSRV_OPEN_SOCKET
extern const isc::log::MessageID DHCPSRV_PGSQL_ADD_ADDR4 = "DHCPSRV_PGSQL_ADD_ADDR4"; extern const isc::log::MessageID DHCPSRV_PGSQL_ADD_ADDR4 = "DHCPSRV_PGSQL_ADD_ADDR4";
extern const isc::log::MessageID DHCPSRV_PGSQL_ADD_ADDR6 = "DHCPSRV_PGSQL_ADD_ADDR6"; extern const isc::log::MessageID DHCPSRV_PGSQL_ADD_ADDR6 = "DHCPSRV_PGSQL_ADD_ADDR6";
extern const isc::log::MessageID DHCPSRV_PGSQL_COMMIT = "DHCPSRV_PGSQL_COMMIT"; extern const isc::log::MessageID DHCPSRV_PGSQL_COMMIT = "DHCPSRV_PGSQL_COMMIT";
extern const isc::log::MessageID DHCPSRV_PGSQL_DB = "DHCPSRV_PGSQL_DB";
extern const isc::log::MessageID DHCPSRV_PGSQL_DELETE_ADDR = "DHCPSRV_PGSQL_DELETE_ADDR"; extern const isc::log::MessageID DHCPSRV_PGSQL_DELETE_ADDR = "DHCPSRV_PGSQL_DELETE_ADDR";
extern const isc::log::MessageID DHCPSRV_PGSQL_DELETE_EXPIRED_RECLAIMED4 = "DHCPSRV_PGSQL_DELETE_EXPIRED_RECLAIMED4"; extern const isc::log::MessageID DHCPSRV_PGSQL_DELETE_EXPIRED_RECLAIMED4 = "DHCPSRV_PGSQL_DELETE_EXPIRED_RECLAIMED4";
extern const isc::log::MessageID DHCPSRV_PGSQL_DELETE_EXPIRED_RECLAIMED6 = "DHCPSRV_PGSQL_DELETE_EXPIRED_RECLAIMED6"; extern const isc::log::MessageID DHCPSRV_PGSQL_DELETE_EXPIRED_RECLAIMED6 = "DHCPSRV_PGSQL_DELETE_EXPIRED_RECLAIMED6";
@@ -229,7 +226,6 @@ extern const isc::log::MessageID DHCPSRV_PGSQL_GET_SUBID_CLIENTID = "DHCPSRV_PGS
extern const isc::log::MessageID DHCPSRV_PGSQL_GET_SUBID_HWADDR = "DHCPSRV_PGSQL_GET_SUBID_HWADDR"; extern const isc::log::MessageID DHCPSRV_PGSQL_GET_SUBID_HWADDR = "DHCPSRV_PGSQL_GET_SUBID_HWADDR";
extern const isc::log::MessageID DHCPSRV_PGSQL_GET_SUBID_PAGE6 = "DHCPSRV_PGSQL_GET_SUBID_PAGE6"; extern const isc::log::MessageID DHCPSRV_PGSQL_GET_SUBID_PAGE6 = "DHCPSRV_PGSQL_GET_SUBID_PAGE6";
extern const isc::log::MessageID DHCPSRV_PGSQL_GET_VERSION = "DHCPSRV_PGSQL_GET_VERSION"; extern const isc::log::MessageID DHCPSRV_PGSQL_GET_VERSION = "DHCPSRV_PGSQL_GET_VERSION";
extern const isc::log::MessageID DHCPSRV_PGSQL_HOST_DB = "DHCPSRV_PGSQL_HOST_DB";
extern const isc::log::MessageID DHCPSRV_PGSQL_HOST_DB_GET_VERSION = "DHCPSRV_PGSQL_HOST_DB_GET_VERSION"; extern const isc::log::MessageID DHCPSRV_PGSQL_HOST_DB_GET_VERSION = "DHCPSRV_PGSQL_HOST_DB_GET_VERSION";
extern const isc::log::MessageID DHCPSRV_PGSQL_HOST_DB_READONLY = "DHCPSRV_PGSQL_HOST_DB_READONLY"; extern const isc::log::MessageID DHCPSRV_PGSQL_HOST_DB_READONLY = "DHCPSRV_PGSQL_HOST_DB_READONLY";
extern const isc::log::MessageID DHCPSRV_PGSQL_HOST_DB_RECONNECT_ATTEMPT_FAILED = "DHCPSRV_PGSQL_HOST_DB_RECONNECT_ATTEMPT_FAILED"; extern const isc::log::MessageID DHCPSRV_PGSQL_HOST_DB_RECONNECT_ATTEMPT_FAILED = "DHCPSRV_PGSQL_HOST_DB_RECONNECT_ATTEMPT_FAILED";
@@ -416,7 +412,6 @@ const char* values[] = {
"DHCPSRV_MYSQL_ADD_ADDR4", "adding IPv4 lease with address %1", "DHCPSRV_MYSQL_ADD_ADDR4", "adding IPv4 lease with address %1",
"DHCPSRV_MYSQL_ADD_ADDR6", "adding IPv6 lease with address %1, lease type %2", "DHCPSRV_MYSQL_ADD_ADDR6", "adding IPv6 lease with address %1, lease type %2",
"DHCPSRV_MYSQL_COMMIT", "committing to MySQL database", "DHCPSRV_MYSQL_COMMIT", "committing to MySQL database",
"DHCPSRV_MYSQL_DB", "opening MySQL lease database: %1",
"DHCPSRV_MYSQL_DELETED_EXPIRED_RECLAIMED", "deleted %1 reclaimed leases from the database", "DHCPSRV_MYSQL_DELETED_EXPIRED_RECLAIMED", "deleted %1 reclaimed leases from the database",
"DHCPSRV_MYSQL_DELETE_ADDR", "deleting lease for address %1", "DHCPSRV_MYSQL_DELETE_ADDR", "deleting lease for address %1",
"DHCPSRV_MYSQL_DELETE_EXPIRED_RECLAIMED4", "deleting reclaimed IPv4 leases that expired more than %1 seconds ago", "DHCPSRV_MYSQL_DELETE_EXPIRED_RECLAIMED4", "deleting reclaimed IPv4 leases that expired more than %1 seconds ago",
@@ -446,7 +441,6 @@ const char* values[] = {
"DHCPSRV_MYSQL_GET_SUBID_HWADDR", "obtaining IPv4 lease for subnet ID %1 and hardware address %2", "DHCPSRV_MYSQL_GET_SUBID_HWADDR", "obtaining IPv4 lease for subnet ID %1 and hardware address %2",
"DHCPSRV_MYSQL_GET_SUBID_PAGE6", "obtaining at most %1 IPv6 leases starting from address %2 for subnet ID %3", "DHCPSRV_MYSQL_GET_SUBID_PAGE6", "obtaining at most %1 IPv6 leases starting from address %2 for subnet ID %3",
"DHCPSRV_MYSQL_GET_VERSION", "obtaining schema version information", "DHCPSRV_MYSQL_GET_VERSION", "obtaining schema version information",
"DHCPSRV_MYSQL_HOST_DB", "opening MySQL hosts database: %1",
"DHCPSRV_MYSQL_HOST_DB_GET_VERSION", "obtaining schema version information for the MySQL hosts database", "DHCPSRV_MYSQL_HOST_DB_GET_VERSION", "obtaining schema version information for the MySQL hosts database",
"DHCPSRV_MYSQL_HOST_DB_READONLY", "MySQL host database opened for read access only", "DHCPSRV_MYSQL_HOST_DB_READONLY", "MySQL host database opened for read access only",
"DHCPSRV_MYSQL_HOST_DB_RECONNECT_ATTEMPT_FAILED", "database reconnect failed: %1", "DHCPSRV_MYSQL_HOST_DB_RECONNECT_ATTEMPT_FAILED", "database reconnect failed: %1",
@@ -473,7 +467,6 @@ const char* values[] = {
"DHCPSRV_PGSQL_ADD_ADDR4", "adding IPv4 lease with address %1", "DHCPSRV_PGSQL_ADD_ADDR4", "adding IPv4 lease with address %1",
"DHCPSRV_PGSQL_ADD_ADDR6", "adding IPv6 lease with address %1, lease type %2", "DHCPSRV_PGSQL_ADD_ADDR6", "adding IPv6 lease with address %1, lease type %2",
"DHCPSRV_PGSQL_COMMIT", "committing to PostgreSQL database", "DHCPSRV_PGSQL_COMMIT", "committing to PostgreSQL database",
"DHCPSRV_PGSQL_DB", "opening PostgreSQL lease database: %1",
"DHCPSRV_PGSQL_DELETE_ADDR", "deleting lease for address %1", "DHCPSRV_PGSQL_DELETE_ADDR", "deleting lease for address %1",
"DHCPSRV_PGSQL_DELETE_EXPIRED_RECLAIMED4", "deleting reclaimed IPv4 leases that expired more than %1 seconds ago", "DHCPSRV_PGSQL_DELETE_EXPIRED_RECLAIMED4", "deleting reclaimed IPv4 leases that expired more than %1 seconds ago",
"DHCPSRV_PGSQL_DELETE_EXPIRED_RECLAIMED6", "deleting reclaimed IPv6 leases that expired more than %1 seconds ago", "DHCPSRV_PGSQL_DELETE_EXPIRED_RECLAIMED6", "deleting reclaimed IPv6 leases that expired more than %1 seconds ago",
@@ -502,7 +495,6 @@ const char* values[] = {
"DHCPSRV_PGSQL_GET_SUBID_HWADDR", "obtaining IPv4 lease for subnet ID %1 and hardware address %2", "DHCPSRV_PGSQL_GET_SUBID_HWADDR", "obtaining IPv4 lease for subnet ID %1 and hardware address %2",
"DHCPSRV_PGSQL_GET_SUBID_PAGE6", "obtaining at most %1 IPv6 leases starting from address %2 for subnet ID %3", "DHCPSRV_PGSQL_GET_SUBID_PAGE6", "obtaining at most %1 IPv6 leases starting from address %2 for subnet ID %3",
"DHCPSRV_PGSQL_GET_VERSION", "obtaining schema version information", "DHCPSRV_PGSQL_GET_VERSION", "obtaining schema version information",
"DHCPSRV_PGSQL_HOST_DB", "opening PostgreSQL hosts database: %1",
"DHCPSRV_PGSQL_HOST_DB_GET_VERSION", "obtaining schema version information for the PostgreSQL hosts database", "DHCPSRV_PGSQL_HOST_DB_GET_VERSION", "obtaining schema version information for the PostgreSQL hosts database",
"DHCPSRV_PGSQL_HOST_DB_READONLY", "PostgreSQL host database opened for read access only", "DHCPSRV_PGSQL_HOST_DB_READONLY", "PostgreSQL host database opened for read access only",
"DHCPSRV_PGSQL_HOST_DB_RECONNECT_ATTEMPT_FAILED", "database reconnect failed: %1", "DHCPSRV_PGSQL_HOST_DB_RECONNECT_ATTEMPT_FAILED", "database reconnect failed: %1",

View File

@@ -144,7 +144,6 @@ extern const isc::log::MessageID DHCPSRV_MULTIPLE_RAW_SOCKETS_PER_IFACE;
extern const isc::log::MessageID DHCPSRV_MYSQL_ADD_ADDR4; extern const isc::log::MessageID DHCPSRV_MYSQL_ADD_ADDR4;
extern const isc::log::MessageID DHCPSRV_MYSQL_ADD_ADDR6; extern const isc::log::MessageID DHCPSRV_MYSQL_ADD_ADDR6;
extern const isc::log::MessageID DHCPSRV_MYSQL_COMMIT; extern const isc::log::MessageID DHCPSRV_MYSQL_COMMIT;
extern const isc::log::MessageID DHCPSRV_MYSQL_DB;
extern const isc::log::MessageID DHCPSRV_MYSQL_DELETED_EXPIRED_RECLAIMED; extern const isc::log::MessageID DHCPSRV_MYSQL_DELETED_EXPIRED_RECLAIMED;
extern const isc::log::MessageID DHCPSRV_MYSQL_DELETE_ADDR; extern const isc::log::MessageID DHCPSRV_MYSQL_DELETE_ADDR;
extern const isc::log::MessageID DHCPSRV_MYSQL_DELETE_EXPIRED_RECLAIMED4; extern const isc::log::MessageID DHCPSRV_MYSQL_DELETE_EXPIRED_RECLAIMED4;
@@ -174,7 +173,6 @@ extern const isc::log::MessageID DHCPSRV_MYSQL_GET_SUBID_CLIENTID;
extern const isc::log::MessageID DHCPSRV_MYSQL_GET_SUBID_HWADDR; extern const isc::log::MessageID DHCPSRV_MYSQL_GET_SUBID_HWADDR;
extern const isc::log::MessageID DHCPSRV_MYSQL_GET_SUBID_PAGE6; extern const isc::log::MessageID DHCPSRV_MYSQL_GET_SUBID_PAGE6;
extern const isc::log::MessageID DHCPSRV_MYSQL_GET_VERSION; extern const isc::log::MessageID DHCPSRV_MYSQL_GET_VERSION;
extern const isc::log::MessageID DHCPSRV_MYSQL_HOST_DB;
extern const isc::log::MessageID DHCPSRV_MYSQL_HOST_DB_GET_VERSION; extern const isc::log::MessageID DHCPSRV_MYSQL_HOST_DB_GET_VERSION;
extern const isc::log::MessageID DHCPSRV_MYSQL_HOST_DB_READONLY; extern const isc::log::MessageID DHCPSRV_MYSQL_HOST_DB_READONLY;
extern const isc::log::MessageID DHCPSRV_MYSQL_HOST_DB_RECONNECT_ATTEMPT_FAILED; extern const isc::log::MessageID DHCPSRV_MYSQL_HOST_DB_RECONNECT_ATTEMPT_FAILED;
@@ -201,7 +199,6 @@ extern const isc::log::MessageID DHCPSRV_OPEN_SOCKET_FAIL;
extern const isc::log::MessageID DHCPSRV_PGSQL_ADD_ADDR4; extern const isc::log::MessageID DHCPSRV_PGSQL_ADD_ADDR4;
extern const isc::log::MessageID DHCPSRV_PGSQL_ADD_ADDR6; extern const isc::log::MessageID DHCPSRV_PGSQL_ADD_ADDR6;
extern const isc::log::MessageID DHCPSRV_PGSQL_COMMIT; extern const isc::log::MessageID DHCPSRV_PGSQL_COMMIT;
extern const isc::log::MessageID DHCPSRV_PGSQL_DB;
extern const isc::log::MessageID DHCPSRV_PGSQL_DELETE_ADDR; extern const isc::log::MessageID DHCPSRV_PGSQL_DELETE_ADDR;
extern const isc::log::MessageID DHCPSRV_PGSQL_DELETE_EXPIRED_RECLAIMED4; extern const isc::log::MessageID DHCPSRV_PGSQL_DELETE_EXPIRED_RECLAIMED4;
extern const isc::log::MessageID DHCPSRV_PGSQL_DELETE_EXPIRED_RECLAIMED6; extern const isc::log::MessageID DHCPSRV_PGSQL_DELETE_EXPIRED_RECLAIMED6;
@@ -230,7 +227,6 @@ extern const isc::log::MessageID DHCPSRV_PGSQL_GET_SUBID_CLIENTID;
extern const isc::log::MessageID DHCPSRV_PGSQL_GET_SUBID_HWADDR; extern const isc::log::MessageID DHCPSRV_PGSQL_GET_SUBID_HWADDR;
extern const isc::log::MessageID DHCPSRV_PGSQL_GET_SUBID_PAGE6; extern const isc::log::MessageID DHCPSRV_PGSQL_GET_SUBID_PAGE6;
extern const isc::log::MessageID DHCPSRV_PGSQL_GET_VERSION; extern const isc::log::MessageID DHCPSRV_PGSQL_GET_VERSION;
extern const isc::log::MessageID DHCPSRV_PGSQL_HOST_DB;
extern const isc::log::MessageID DHCPSRV_PGSQL_HOST_DB_GET_VERSION; extern const isc::log::MessageID DHCPSRV_PGSQL_HOST_DB_GET_VERSION;
extern const isc::log::MessageID DHCPSRV_PGSQL_HOST_DB_READONLY; extern const isc::log::MessageID DHCPSRV_PGSQL_HOST_DB_READONLY;
extern const isc::log::MessageID DHCPSRV_PGSQL_HOST_DB_RECONNECT_ATTEMPT_FAILED; extern const isc::log::MessageID DHCPSRV_PGSQL_HOST_DB_RECONNECT_ATTEMPT_FAILED;

View File

@@ -807,12 +807,6 @@ The code has issued a commit call. All outstanding transactions will be
committed to the database. Note that depending on the MySQL settings, committed to the database. Note that depending on the MySQL settings,
the commit may not include a write to disk. the commit may not include a write to disk.
% DHCPSRV_MYSQL_DB opening MySQL lease database: %1
This informational message is logged when a DHCP server (either V4 or
V6) is about to open a MySQL lease database. The parameters of the
connection including database name and username needed to access it
(but not the password if any) are logged.
% DHCPSRV_MYSQL_DELETED_EXPIRED_RECLAIMED deleted %1 reclaimed leases from the database % DHCPSRV_MYSQL_DELETED_EXPIRED_RECLAIMED deleted %1 reclaimed leases from the database
Logged at debug log level 50. Logged at debug log level 50.
A debug message issued when the server has removed a number of reclaimed A debug message issued when the server has removed a number of reclaimed
@@ -976,13 +970,6 @@ Logged at debug log level 50.
A debug message issued when the server is about to obtain schema version A debug message issued when the server is about to obtain schema version
information from the MySQL database. information from the MySQL database.
% DHCPSRV_MYSQL_HOST_DB opening MySQL hosts database: %1
Logged at debug log level 50.
This informational message is logged when a DHCP server (either V4 or
V6) is about to open a MySQL hosts database. The parameters of the
connection including database name and username needed to access it
(but not the password if any) are logged.
% DHCPSRV_MYSQL_HOST_DB_GET_VERSION obtaining schema version information for the MySQL hosts database % DHCPSRV_MYSQL_HOST_DB_GET_VERSION obtaining schema version information for the MySQL hosts database
Logged at debug log level 50. Logged at debug log level 50.
A debug message issued when the server is about to obtain schema version A debug message issued when the server is about to obtain schema version
@@ -1111,12 +1098,6 @@ The code has issued a commit call. All outstanding transactions will be
committed to the database. Note that depending on the PostgreSQL settings, committed to the database. Note that depending on the PostgreSQL settings,
the commit may not include a write to disk. the commit may not include a write to disk.
% DHCPSRV_PGSQL_DB opening PostgreSQL lease database: %1
This informational message is logged when a DHCP server (either V4 or
V6) is about to open a PostgreSQL lease database. The parameters of the
connection including database name and username needed to access it
(but not the password if any) are logged.
% DHCPSRV_PGSQL_DELETE_ADDR deleting lease for address %1 % DHCPSRV_PGSQL_DELETE_ADDR deleting lease for address %1
Logged at debug log level 50. Logged at debug log level 50.
A debug message issued when the server is attempting to delete a lease for A debug message issued when the server is attempting to delete a lease for
@@ -1274,13 +1255,6 @@ Logged at debug log level 50.
A debug message issued when the server is about to obtain schema version A debug message issued when the server is about to obtain schema version
information from the PostgreSQL database. information from the PostgreSQL database.
% DHCPSRV_PGSQL_HOST_DB opening PostgreSQL hosts database: %1
Logged at debug log level 50.
This informational message is logged when a DHCP server (either V4 or
V6) is about to open a PostgreSQL hosts database. The parameters of the
connection including database name and username needed to access it
(but not the password if any) are logged.
% DHCPSRV_PGSQL_HOST_DB_GET_VERSION obtaining schema version information for the PostgreSQL hosts database % DHCPSRV_PGSQL_HOST_DB_GET_VERSION obtaining schema version information for the PostgreSQL hosts database
Logged at debug log level 50. Logged at debug log level 50.
A debug message issued when the server is about to obtain schema version A debug message issued when the server is about to obtain schema version