mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-08-29 13:07:50 +00:00
[#2799] set error if IOService is null in callouts
This commit is contained in:
parent
e101a5cb2c
commit
b885916e36
@ -20,6 +20,9 @@
|
|||||||
#include <hooks/hooks.h>
|
#include <hooks/hooks.h>
|
||||||
#include <process/daemon.h>
|
#include <process/daemon.h>
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
namespace isc {
|
namespace isc {
|
||||||
namespace ha {
|
namespace ha {
|
||||||
|
|
||||||
@ -34,6 +37,7 @@ using namespace isc::dhcp;
|
|||||||
using namespace isc::ha;
|
using namespace isc::ha;
|
||||||
using namespace isc::hooks;
|
using namespace isc::hooks;
|
||||||
using namespace isc::process;
|
using namespace isc::process;
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
@ -44,6 +48,13 @@ int dhcp4_srv_configured(CalloutHandle& handle) {
|
|||||||
try {
|
try {
|
||||||
isc::asiolink::IOServicePtr io_service;
|
isc::asiolink::IOServicePtr io_service;
|
||||||
handle.getArgument("io_context", io_service);
|
handle.getArgument("io_context", io_service);
|
||||||
|
if (!io_service) {
|
||||||
|
// Should not happen!
|
||||||
|
handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
|
||||||
|
const string error("Error: io_context is null");
|
||||||
|
handle.setArgument("error", error);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
isc::dhcp::NetworkStatePtr network_state;
|
isc::dhcp::NetworkStatePtr network_state;
|
||||||
handle.getArgument("network_state", network_state);
|
handle.getArgument("network_state", network_state);
|
||||||
impl->startService(io_service, network_state, HAServerType::DHCPv4);
|
impl->startService(io_service, network_state, HAServerType::DHCPv4);
|
||||||
@ -52,6 +63,10 @@ int dhcp4_srv_configured(CalloutHandle& handle) {
|
|||||||
LOG_ERROR(ha_logger, HA_DHCP4_START_SERVICE_FAILED)
|
LOG_ERROR(ha_logger, HA_DHCP4_START_SERVICE_FAILED)
|
||||||
.arg(ex.what());
|
.arg(ex.what());
|
||||||
handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
|
handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
|
||||||
|
ostringstream os;
|
||||||
|
os << "Error: " << ex.what();
|
||||||
|
string error(os.str());
|
||||||
|
handle.setArgument("error", error);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
return (0);
|
return (0);
|
||||||
@ -107,6 +122,13 @@ int dhcp6_srv_configured(CalloutHandle& handle) {
|
|||||||
try {
|
try {
|
||||||
isc::asiolink::IOServicePtr io_service;
|
isc::asiolink::IOServicePtr io_service;
|
||||||
handle.getArgument("io_context", io_service);
|
handle.getArgument("io_context", io_service);
|
||||||
|
if (!io_service) {
|
||||||
|
// Should not happen!
|
||||||
|
handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
|
||||||
|
const string error("Error: io_context is null");
|
||||||
|
handle.setArgument("error", error);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
isc::dhcp::NetworkStatePtr network_state;
|
isc::dhcp::NetworkStatePtr network_state;
|
||||||
handle.getArgument("network_state", network_state);
|
handle.getArgument("network_state", network_state);
|
||||||
impl->startService(io_service, network_state, HAServerType::DHCPv6);
|
impl->startService(io_service, network_state, HAServerType::DHCPv6);
|
||||||
@ -115,6 +137,10 @@ int dhcp6_srv_configured(CalloutHandle& handle) {
|
|||||||
LOG_ERROR(ha_logger, HA_DHCP6_START_SERVICE_FAILED)
|
LOG_ERROR(ha_logger, HA_DHCP6_START_SERVICE_FAILED)
|
||||||
.arg(ex.what());
|
.arg(ex.what());
|
||||||
handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
|
handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
|
||||||
|
ostringstream os;
|
||||||
|
os << "Error: " << ex.what();
|
||||||
|
string error(os.str());
|
||||||
|
handle.setArgument("error", error);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
return (0);
|
return (0);
|
||||||
|
@ -19,11 +19,15 @@
|
|||||||
#include <mysql_cb_dhcp6.h>
|
#include <mysql_cb_dhcp6.h>
|
||||||
#include <mysql_cb_log.h>
|
#include <mysql_cb_log.h>
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
using namespace isc::cb;
|
using namespace isc::cb;
|
||||||
using namespace isc::dhcp;
|
using namespace isc::dhcp;
|
||||||
using namespace isc::hooks;
|
using namespace isc::hooks;
|
||||||
using namespace isc::log;
|
using namespace isc::log;
|
||||||
using namespace isc::process;
|
using namespace isc::process;
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
@ -65,6 +69,12 @@ int load(LibraryHandle& /* handle */) {
|
|||||||
int dhcp4_srv_configured(CalloutHandle& handle) {
|
int dhcp4_srv_configured(CalloutHandle& handle) {
|
||||||
isc::asiolink::IOServicePtr io_service;
|
isc::asiolink::IOServicePtr io_service;
|
||||||
handle.getArgument("io_context", io_service);
|
handle.getArgument("io_context", io_service);
|
||||||
|
if (!io_service) {
|
||||||
|
const string error("Error: io_context is null");
|
||||||
|
handle.setArgument("error", error);
|
||||||
|
handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
isc::dhcp::MySqlConfigBackendImpl::setIOService(io_service);
|
isc::dhcp::MySqlConfigBackendImpl::setIOService(io_service);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
@ -78,6 +88,12 @@ int dhcp4_srv_configured(CalloutHandle& handle) {
|
|||||||
int dhcp6_srv_configured(CalloutHandle& handle) {
|
int dhcp6_srv_configured(CalloutHandle& handle) {
|
||||||
isc::asiolink::IOServicePtr io_service;
|
isc::asiolink::IOServicePtr io_service;
|
||||||
handle.getArgument("io_context", io_service);
|
handle.getArgument("io_context", io_service);
|
||||||
|
if (!io_service) {
|
||||||
|
const string error("Error: io_context is null");
|
||||||
|
handle.setArgument("error", error);
|
||||||
|
handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
isc::dhcp::MySqlConfigBackendImpl::setIOService(io_service);
|
isc::dhcp::MySqlConfigBackendImpl::setIOService(io_service);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -19,11 +19,15 @@
|
|||||||
#include <pgsql_cb_dhcp6.h>
|
#include <pgsql_cb_dhcp6.h>
|
||||||
#include <pgsql_cb_log.h>
|
#include <pgsql_cb_log.h>
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
using namespace isc::cb;
|
using namespace isc::cb;
|
||||||
using namespace isc::dhcp;
|
using namespace isc::dhcp;
|
||||||
using namespace isc::hooks;
|
using namespace isc::hooks;
|
||||||
using namespace isc::log;
|
using namespace isc::log;
|
||||||
using namespace isc::process;
|
using namespace isc::process;
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
@ -65,6 +69,12 @@ int load(LibraryHandle& /* handle */) {
|
|||||||
int dhcp4_srv_configured(CalloutHandle& handle) {
|
int dhcp4_srv_configured(CalloutHandle& handle) {
|
||||||
isc::asiolink::IOServicePtr io_service;
|
isc::asiolink::IOServicePtr io_service;
|
||||||
handle.getArgument("io_context", io_service);
|
handle.getArgument("io_context", io_service);
|
||||||
|
if (!io_service) {
|
||||||
|
const string error("Error: io_context is null");
|
||||||
|
handle.setArgument("error", error);
|
||||||
|
handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
isc::dhcp::PgSqlConfigBackendImpl::setIOService(io_service);
|
isc::dhcp::PgSqlConfigBackendImpl::setIOService(io_service);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
@ -78,6 +88,12 @@ int dhcp4_srv_configured(CalloutHandle& handle) {
|
|||||||
int dhcp6_srv_configured(CalloutHandle& handle) {
|
int dhcp6_srv_configured(CalloutHandle& handle) {
|
||||||
isc::asiolink::IOServicePtr io_service;
|
isc::asiolink::IOServicePtr io_service;
|
||||||
handle.getArgument("io_context", io_service);
|
handle.getArgument("io_context", io_service);
|
||||||
|
if (!io_service) {
|
||||||
|
const string error("Error: io_context is null");
|
||||||
|
handle.setArgument("error", error);
|
||||||
|
handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
isc::dhcp::PgSqlConfigBackendImpl::setIOService(io_service);
|
isc::dhcp::PgSqlConfigBackendImpl::setIOService(io_service);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
#include <dhcpsrv/subnet.h>
|
#include <dhcpsrv/subnet.h>
|
||||||
#include <process/daemon.h>
|
#include <process/daemon.h>
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
namespace isc {
|
namespace isc {
|
||||||
namespace run_script {
|
namespace run_script {
|
||||||
|
|
||||||
@ -34,6 +36,7 @@ using namespace isc::hooks;
|
|||||||
using namespace isc::process;
|
using namespace isc::process;
|
||||||
using namespace isc::run_script;
|
using namespace isc::run_script;
|
||||||
using namespace isc::util;
|
using namespace isc::util;
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
// Functions accessed by the hooks framework use C linkage to avoid the name
|
// 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
|
// mangling that accompanies use of the C++ compiler as well as to avoid
|
||||||
@ -48,7 +51,7 @@ int load(LibraryHandle& handle) {
|
|||||||
try {
|
try {
|
||||||
// Make the hook library not loadable by d2 or ca.
|
// Make the hook library not loadable by d2 or ca.
|
||||||
uint16_t family = CfgMgr::instance().getFamily();
|
uint16_t family = CfgMgr::instance().getFamily();
|
||||||
const std::string& proc_name = Daemon::getProcName();
|
const string& proc_name = Daemon::getProcName();
|
||||||
if (family == AF_INET) {
|
if (family == AF_INET) {
|
||||||
if (proc_name != "kea-dhcp4") {
|
if (proc_name != "kea-dhcp4") {
|
||||||
isc_throw(isc::Unexpected, "Bad process name: " << proc_name
|
isc_throw(isc::Unexpected, "Bad process name: " << proc_name
|
||||||
@ -63,7 +66,7 @@ int load(LibraryHandle& handle) {
|
|||||||
|
|
||||||
impl.reset(new RunScriptImpl());
|
impl.reset(new RunScriptImpl());
|
||||||
impl->configure(handle);
|
impl->configure(handle);
|
||||||
} catch (const std::exception& ex) {
|
} catch (const exception& ex) {
|
||||||
LOG_ERROR(run_script_logger, RUN_SCRIPT_LOAD_ERROR)
|
LOG_ERROR(run_script_logger, RUN_SCRIPT_LOAD_ERROR)
|
||||||
.arg(ex.what());
|
.arg(ex.what());
|
||||||
return (1);
|
return (1);
|
||||||
@ -90,9 +93,16 @@ int dhcp4_srv_configured(CalloutHandle& handle) {
|
|||||||
try {
|
try {
|
||||||
isc::asiolink::IOServicePtr io_service;
|
isc::asiolink::IOServicePtr io_service;
|
||||||
handle.getArgument("io_context", io_service);
|
handle.getArgument("io_context", io_service);
|
||||||
|
if (!io_service) {
|
||||||
|
// Should not happen!
|
||||||
|
handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
|
||||||
|
const string error("Error: io_context is null");
|
||||||
|
handle.setArgument("error", error);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
RunScriptImpl::setIOService(io_service);
|
RunScriptImpl::setIOService(io_service);
|
||||||
|
|
||||||
} catch (const std::exception& ex) {
|
} catch (const exception& ex) {
|
||||||
LOG_ERROR(run_script_logger, RUN_SCRIPT_LOAD_ERROR)
|
LOG_ERROR(run_script_logger, RUN_SCRIPT_LOAD_ERROR)
|
||||||
.arg(ex.what());
|
.arg(ex.what());
|
||||||
handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
|
handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
|
||||||
@ -108,9 +118,16 @@ int dhcp6_srv_configured(CalloutHandle& handle) {
|
|||||||
try {
|
try {
|
||||||
isc::asiolink::IOServicePtr io_service;
|
isc::asiolink::IOServicePtr io_service;
|
||||||
handle.getArgument("io_context", io_service);
|
handle.getArgument("io_context", io_service);
|
||||||
|
if (!io_service) {
|
||||||
|
// Should not happen!
|
||||||
|
handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
|
||||||
|
const string error("Error: io_context is null");
|
||||||
|
handle.setArgument("error", error);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
RunScriptImpl::setIOService(io_service);
|
RunScriptImpl::setIOService(io_service);
|
||||||
|
|
||||||
} catch (const std::exception& ex) {
|
} catch (const exception& ex) {
|
||||||
LOG_ERROR(run_script_logger, RUN_SCRIPT_LOAD_ERROR)
|
LOG_ERROR(run_script_logger, RUN_SCRIPT_LOAD_ERROR)
|
||||||
.arg(ex.what());
|
.arg(ex.what());
|
||||||
handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
|
handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user