]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1721] Dhcpv[46]Srv::redactConfig
authorAndrei Pavel <andrei@isc.org>
Thu, 8 Apr 2021 07:22:14 +0000 (10:22 +0300)
committerAndrei Pavel <andrei@isc.org>
Fri, 21 May 2021 13:22:00 +0000 (13:22 +0000)
14 files changed:
src/bin/agent/ca_cfg_mgr.cc
src/bin/d2/d2_cfg_mgr.cc
src/bin/dhcp4/ctrl_dhcp4_srv.cc
src/bin/dhcp4/dhcp4_srv.cc
src/bin/dhcp4/dhcp4_srv.h
src/bin/dhcp4/json_config_parser.cc
src/bin/dhcp6/ctrl_dhcp6_srv.cc
src/bin/dhcp6/dhcp6_srv.cc
src/bin/dhcp6/dhcp6_srv.h
src/bin/dhcp6/json_config_parser.cc
src/lib/process/d_cfg_mgr.cc
src/lib/process/daemon.cc
src/lib/process/daemon.h
src/lib/process/redact_config.cc

index 803793a68650f15eba059c43c53e30dc0a5f195d..5e873fd19fa99b7eadc19d82e6f337b7dfaf3e23 100644 (file)
@@ -141,11 +141,11 @@ CtrlAgentCfgMgr::parse(ConstElementPtr config_set, bool check_only) {
 
 std::list<std::list<std::string>>
 CtrlAgentCfgMgr::jsonPathsToRedact() const {
-    static std::list<std::list<std::string>> _({
+    static std::list<std::list<std::string>> const list({
         {"authentication", "clients"},
         {"hooks-libraries", "parameters"},
     });
-    return _;
+    return list;
 }
 
 data::ConstElementPtr
index fd8eaf5db8fcd087d6f872d22ca1dad498279446..91f7325332885663e674a325f18fccb8fa05a3f5 100644 (file)
@@ -311,10 +311,10 @@ D2CfgMgr::parse(isc::data::ConstElementPtr config_set, bool check_only) {
 
 std::list<std::list<std::string>>
 D2CfgMgr::jsonPathsToRedact() const {
-    static std::list<std::list<std::string>> _({
+    static std::list<std::list<std::string>> const list({
         {"tsig-keys"},
     });
-    return _;
+    return list;
 }
 
 }  // namespace d2
index d2f5bd24c6d427b838dcc2d220a4247a7633aad0..5c04ba0c7b16ebfc89c3b552b85b5cdf7c64f854 100644 (file)
@@ -850,10 +850,6 @@ ControlledDhcpv4Srv::processCommand(const string& command,
 
 isc::data::ConstElementPtr
 ControlledDhcpv4Srv::processConfig(isc::data::ConstElementPtr config) {
-
-    LOG_DEBUG(dhcp4_logger, DBG_DHCP4_COMMAND, DHCP4_CONFIG_RECEIVED)
-        .arg(Dhcpv4Srv::redactConfig(config)->str());
-
     ControlledDhcpv4Srv* srv = ControlledDhcpv4Srv::getInstance();
 
     // Single stream instance used in all error clauses
@@ -864,6 +860,9 @@ ControlledDhcpv4Srv::processConfig(isc::data::ConstElementPtr config) {
         return (isc::config::createAnswer(1, err.str()));
     }
 
+    LOG_DEBUG(dhcp4_logger, DBG_DHCP4_COMMAND, DHCP4_CONFIG_RECEIVED)
+        .arg(srv->redactConfig(config)->str());
+
     ConstElementPtr answer = configureDhcp4Server(*srv, config);
 
     // Check that configuration was successful. If not, do not reopen sockets
@@ -1030,7 +1029,7 @@ isc::data::ConstElementPtr
 ControlledDhcpv4Srv::checkConfig(isc::data::ConstElementPtr config) {
 
     LOG_DEBUG(dhcp4_logger, DBG_DHCP4_COMMAND, DHCP4_CONFIG_RECEIVED)
-        .arg(Dhcpv4Srv::redactConfig(config)->str());
+        .arg(redactConfig(config)->str());
 
     ControlledDhcpv4Srv* srv = ControlledDhcpv4Srv::getInstance();
 
index 041c3d03861191743aeed6dda33d172487cd1121..462b5958a5119c1ff6068113c4ea01f3032c1562 100644 (file)
@@ -4069,5 +4069,16 @@ void Dhcpv4Srv::discardPackets() {
     HooksManager::clearParkingLots();
 }
 
+std::list<std::list<std::string>> Dhcpv4Srv::jsonPathsToRedact() const {
+    static std::list<std::list<std::string>> const list({
+        {"config-control", "config-databases"},
+        {"hooks-libraries", "parameters"},
+        {"hosts-database"},
+        {"hosts-databases"},
+        {"lease-database"},
+    });
+    return list;
+}
+
 }  // namespace dhcp
 }  // namespace isc
index c8dafa1b9aa2e70ac672e1e456d8612f0e360bef..881a48f87d22f3acfc6296f7233c8b52fa1d51dc 100644 (file)
@@ -1161,6 +1161,13 @@ public:
     /// @brief Returns the index for "lease4_decline" hook point
     /// @return the index for "lease4_decline" hook point
     static int getHookIndexLease4Decline();
+
+    /// @brief Return a list of all paths that contain passwords or secrets for
+    /// kea-dhcp4.
+    ///
+    /// @return the list of lists of sequential JSON map keys needed to reach
+    /// the passwords and secrets.
+    std::list<std::list<std::string>> jsonPathsToRedact() const final override;
 };
 
 }  // namespace dhcp
index db23881228abef029db78ed94a6721b8e28453d5..be0a81005aacf7ab529eb72f5e3c148728152e27 100644 (file)
@@ -328,7 +328,7 @@ configureDhcp4Server(Dhcpv4Srv& server, isc::data::ConstElementPtr config_set,
     }
 
     LOG_DEBUG(dhcp4_logger, DBG_DHCP4_COMMAND, DHCP4_CONFIG_START)
-        .arg(Dhcpv4Srv::redactConfig(config_set)->str());
+        .arg(server.redactConfig(config_set)->str());
 
     // Before starting any subnet operations, let's reset the subnet-id counter,
     // so newly recreated configuration starts with first subnet-id equal 1.
index 6a1d46c5a39806d1dfa457096c162e5ccdba0be6..db9f05049f90e748c7a75eff24b5642430bc83aa 100644 (file)
@@ -854,9 +854,6 @@ ControlledDhcpv6Srv::processCommand(const string& command,
 isc::data::ConstElementPtr
 ControlledDhcpv6Srv::processConfig(isc::data::ConstElementPtr config) {
 
-    LOG_DEBUG(dhcp6_logger, DBG_DHCP6_COMMAND, DHCP6_CONFIG_RECEIVED)
-        .arg(Dhcpv6Srv::redactConfig(config)->str());
-
     ControlledDhcpv6Srv* srv = ControlledDhcpv6Srv::getInstance();
 
     // Single stream instance used in all error clauses
@@ -867,6 +864,9 @@ ControlledDhcpv6Srv::processConfig(isc::data::ConstElementPtr config) {
         return (isc::config::createAnswer(1, err.str()));
     }
 
+    LOG_DEBUG(dhcp6_logger, DBG_DHCP6_COMMAND, DHCP6_CONFIG_RECEIVED)
+        .arg(srv->redactConfig(config)->str());
+
     ConstElementPtr answer = configureDhcp6Server(*srv, config);
 
     // Check that configuration was successful. If not, do not reopen sockets
@@ -1051,7 +1051,7 @@ isc::data::ConstElementPtr
 ControlledDhcpv6Srv::checkConfig(isc::data::ConstElementPtr config) {
 
     LOG_DEBUG(dhcp6_logger, DBG_DHCP6_COMMAND, DHCP6_CONFIG_RECEIVED)
-        .arg(Dhcpv6Srv::redactConfig(config)->str());
+        .arg(redactConfig(config)->str());
 
     ControlledDhcpv6Srv* srv = ControlledDhcpv6Srv::getInstance();
 
index a5ede5680947ae0bd197ab184c936a7874ba8aa2..919a8d4234ae9b67ba1d1d18dcf4340e7db6a5e3 100644 (file)
@@ -4338,5 +4338,16 @@ Dhcpv6Srv::checkDynamicSubnetChange(const Pkt6Ptr& question, Pkt6Ptr& answer,
     }
 }
 
+std::list<std::list<std::string>> Dhcpv6Srv::jsonPathsToRedact()  const{
+    static std::list<std::list<std::string>> const list({
+        {"config-control", "config-databases"},
+        {"hooks-libraries", "parameters"},
+        {"hosts-database"},
+        {"hosts-databases"},
+        {"lease-database"},
+    });
+    return list;
+}
+
 }  // namespace dhcp
 }  // namespace isc
index f134827541045c4db96363703b138bbb2a5b5641..c5c2bf05f72cc76f0fba7968e8939b8ba456ad10 100644 (file)
@@ -1132,6 +1132,13 @@ public:
     void processPacketBufferSend(hooks::CalloutHandlePtr& callout_handle,
                                  Pkt6Ptr& rsp);
 
+    /// @brief Return a list of all paths that contain passwords or secrets for
+    /// kea-dhcp6.
+    ///
+    /// @return the list of lists of sequential JSON map keys needed to reach
+    /// the passwords and secrets.
+    std::list<std::list<std::string>> jsonPathsToRedact() const final override;
+
 protected:
 
     /// Server DUID (to be sent in server-identifier option)
index 90951d4847ba013111e275bde8313565db4196b0..90e084aa807aa8c6777a0da6aae49e5bdc35d96e 100644 (file)
@@ -431,7 +431,7 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set,
     }
 
     LOG_DEBUG(dhcp6_logger, DBG_DHCP6_COMMAND, DHCP6_CONFIG_START)
-        .arg(Dhcpv6Srv::redactConfig(config_set)->str());
+        .arg(server.redactConfig(config_set)->str());
 
     // Before starting any subnet operations, let's reset the subnet-id counter,
     // so newly recreated configuration starts with first subnet-id equal 1.
index 5a6a6b99d0b505c872ddc32ccbab33c696f12463..4a67183128d279580cc0ae88d0df7402dd75386f 100644 (file)
@@ -67,8 +67,8 @@ DCfgMgrBase::redactConfig(ConstElementPtr const& config) const {
 }
 
 list<list<string>> DCfgMgrBase::jsonPathsToRedact() const {
-    static list<list<string>> _({});
-    return _;
+    static list<list<string>> const list;
+    return list;
 }
 
 isc::data::ConstElementPtr
index b4d356e6b3d76a5e590cec261186702542d788c9..c2589c92a17d7bd2ab16df8f7c84fbd6811919a5 100644 (file)
@@ -247,16 +247,10 @@ Daemon::writeConfigFile(const std::string& config_file,
     return (bytes);
 }
 
-
-std::list<std::list<std::string>> Daemon::jsonPathsToRedact() {
-    static std::list<std::list<std::string>> _({
-        {"config-control", "config-databases"},
-        {"hooks-libraries", "parameters"},
-        {"hosts-database"},
-        {"hosts-databases"},
-        {"lease-database"},
-    });
-    return _;
+std::list<std::list<std::string>>
+Daemon::jsonPathsToRedact() const {
+    static std::list<std::list<std::string>> const list;
+    return list;
 }
 
 isc::data::ConstElementPtr
index aa66836d09c144587d73d63215199603294b2cb7..d64445a77c5a1a775e097fde2f136a30d1055276 100644 (file)
@@ -231,11 +231,12 @@ public:
     /// @brief Return a list of all paths that contain passwords or secrets.
     ///
     /// Used in @ref isc::process::Daemon::redactConfig to only make copies and
-    /// only redact configuration subtrees that contain passwords or secrets.
+    /// only redact configuration subtrees that contain passwords or secrets. To
+    /// be overridden by derived classes.
     ///
     /// @return the list of lists of sequential JSON map keys needed to reach
     /// the passwords and secrets.
-    static std::list<std::list<std::string>> jsonPathsToRedact();
+    virtual std::list<std::list<std::string>> jsonPathsToRedact() const;
 
     /// @brief Redact a configuration.
     ///
@@ -244,8 +245,7 @@ public:
     /// @param config the Element tree structure that describes the configuration.
     ///
     /// @return the redacted configuration
-    static isc::data::ConstElementPtr
-    redactConfig(isc::data::ConstElementPtr const& config);
+    isc::data::ConstElementPtr redactConfig(isc::data::ConstElementPtr const& config);
 
 protected:
 
index 9a8e49e37b7d1a4a010dc1c3c16a2f032ff401d0..8a8cf53aba7523b592559eff510d80644f81a3e7 100644 (file)
@@ -8,8 +8,6 @@
 
 #include <process/redact_config.h>
 
-#include <boost/make_shared.hpp>
-
 using namespace isc::data;
 using namespace std;
 
@@ -26,7 +24,7 @@ redactConfig(ConstElementPtr const& element,
     ElementPtr result;
     if (element->getType() == Element::list) {
         // Redact lists.
-        result = boost::make_shared<ListElement>();
+        result = Element::createList();
         for (ConstElementPtr const& item : element->listValue()) {
             // add wants an ElementPtr so use a shallow copy.
             // We could hypothetically filter lists through JSON paths, but we
@@ -36,7 +34,7 @@ redactConfig(ConstElementPtr const& element,
         }
     } else if (element->getType() == Element::map) {
         // Redact maps.
-        result = boost::make_shared<MapElement>();
+        result = Element::createMap();
         for (auto kv : element->mapValue()) {
             std::string const& key(kv.first);
             ConstElementPtr const& value(kv.second);