From: Tomek Mrugalski Date: Wed, 26 Apr 2017 13:03:39 +0000 (+0200) Subject: [5253] Logging information is now written in config-write. X-Git-Tag: trac5212_base~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a1b5da4db6ebfa9635bbe411ec363cdcc4fd1d28;p=thirdparty%2Fkea.git [5253] Logging information is now written in config-write. --- diff --git a/src/lib/process/d_controller.cc b/src/lib/process/d_controller.cc index 478909d722..6f31a83fe8 100644 --- a/src/lib/process/d_controller.cc +++ b/src/lib/process/d_controller.cc @@ -449,7 +449,28 @@ DControllerBase::configWriteHandler(const std::string&, // Ok, it's time to write the file. size_t size = 0; - ConstElementPtr cfg = process_->getCfgMgr()->getContext()->toElement(); + ElementPtr cfg = process_->getCfgMgr()->getContext()->toElement(); + + // Logging storage is messed up in CA. During its configuration (see + // DControllerBase::configFromFile() it calls Daemon::configureLogger() + // that stores the logging info in isc::dhcp::CfgMgr::getStagingCfg(). + // This is later moved to getCurrentCfg() when the configuration is + // commited. All control-agent specific configuration is stored in + // a structure accessible by process_->getCfgMgr()->getContext(). Note + // logging information is not stored there. + // + // As a result, we need to extract the CA configuration from one + // place and logging from another. + ConstElementPtr loginfo = isc::dhcp::CfgMgr::instance().getCurrentCfg()->toElement(); + if (loginfo) { + // If there was a config stored in dhcp::CfgMgr, try to get Logging info from it. + loginfo = loginfo->get("Logging"); + } + if (loginfo) { + // If there is some logging information, add it to our config. + cfg->set("Logging", loginfo); + } + try { size = writeConfigFile(filename, cfg); } catch (const isc::Exception& ex) {