From 0d9d1266179999f69fc76397eb7abcd1afe84a6c Mon Sep 17 00:00:00 2001 From: Adam Debreceni Date: Tue, 13 Aug 2024 22:30:35 +0000 Subject: [PATCH] MINIFICPP-2434 - Check type of acquired controller service Closes #1848 Signed-off-by: Marton Szasz --- libminifi/include/core/json/JsonNode.h | 2 +- libminifi/src/c2/C2Agent.cpp | 8 +++++++- .../src/core/state/nodes/ResponseNodeLoader.cpp | 16 ++++++++++++++-- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/libminifi/include/core/json/JsonNode.h b/libminifi/include/core/json/JsonNode.h index c9724e94d2..0d874cd05a 100644 --- a/libminifi/include/core/json/JsonNode.h +++ b/libminifi/include/core/json/JsonNode.h @@ -98,7 +98,7 @@ class JsonNode : public flow::Node::NodeImpl { return std::to_string(node_->GetDouble()); } if (node_->IsBool()) { - return std::to_string(node_->GetDouble()); + return node_->GetBool() ? "true" : "false"; } return getString(); diff --git a/libminifi/src/c2/C2Agent.cpp b/libminifi/src/c2/C2Agent.cpp index 009c4293a6..5e0efabd35 100644 --- a/libminifi/src/c2/C2Agent.cpp +++ b/libminifi/src/c2/C2Agent.cpp @@ -87,7 +87,13 @@ void C2Agent::initialize(core::controller::ControllerServiceProvider *controller update_sink_ = update_sink; if (nullptr != controller_) { - update_service_ = std::static_pointer_cast(controller_->getControllerService(UPDATE_NAME)); + if (auto service = controller_->getControllerService(UPDATE_NAME)) { + if (auto update_service = std::dynamic_pointer_cast(service)) { + update_service_ = update_service; + } else { + logger_->log_warn("Found controller service with name '{}', but it is not an UpdatePolicyControllerService", c2::UPDATE_NAME); + } + } } if (update_service_ == nullptr) { diff --git a/libminifi/src/core/state/nodes/ResponseNodeLoader.cpp b/libminifi/src/core/state/nodes/ResponseNodeLoader.cpp index 8d9dc1845a..68b74da48d 100644 --- a/libminifi/src/core/state/nodes/ResponseNodeLoader.cpp +++ b/libminifi/src/core/state/nodes/ResponseNodeLoader.cpp @@ -167,7 +167,13 @@ void ResponseNodeLoader::initializeAgentMonitor(const SharedResponseNode& respon void ResponseNodeLoader::initializeAgentNode(const SharedResponseNode& response_node) const { auto agent_node = dynamic_cast(response_node.get()); if (agent_node != nullptr && controller_ != nullptr) { - agent_node->setUpdatePolicyController(std::static_pointer_cast(controller_->getControllerService(c2::UPDATE_NAME)).get()); + if (auto service = controller_->getControllerService(c2::UPDATE_NAME)) { + if (auto update_service = std::dynamic_pointer_cast(service)) { + agent_node->setUpdatePolicyController(update_service.get()); + } else { + logger_->log_warn("Found controller service with name '{}', but it is not an UpdatePolicyControllerService", c2::UPDATE_NAME); + } + } } if (agent_node != nullptr) { agent_node->setConfigurationReader([this](const std::string& key){ @@ -285,7 +291,13 @@ void ResponseNodeLoader::setStateMonitor(state::StateMonitor* update_sink) { state::response::NodeReporter::ReportedNode ResponseNodeLoader::getAgentManifest() const { state::response::AgentInformation agentInfo("agentInfo"); if (controller_) { - agentInfo.setUpdatePolicyController(std::static_pointer_cast(controller_->getControllerService(c2::UPDATE_NAME)).get()); + if (auto service = controller_->getControllerService(c2::UPDATE_NAME)) { + if (auto update_service = std::dynamic_pointer_cast(service)) { + agentInfo.setUpdatePolicyController(update_service.get()); + } else { + logger_->log_warn("Found controller service with name '{}', but it is not an UpdatePolicyControllerService", c2::UPDATE_NAME); + } + } } agentInfo.setAgentIdentificationProvider(configuration_); agentInfo.setConfigurationReader([this](const std::string& key){