]> granicus.if.org Git - icinga2/commitdiff
Make sure we don't include zones.d directories for zones which were removed
authorGunnar Beutner <gunnar.beutner@netways.de>
Tue, 20 Jan 2015 12:18:40 +0000 (13:18 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Tue, 20 Jan 2015 12:18:40 +0000 (13:18 +0100)
fixes #8256

lib/cli/daemoncommand.cpp
lib/remote/apilistener-sync.cpp
lib/remote/apilistener.hpp

index 55d147683ac7b6f65cf90f0bf26b7e5eb637ca9b..11401e8db7877607acea6c7967d810202c953d1c 100644 (file)
@@ -90,7 +90,7 @@ static void IncludeNonLocalZone(const String& zonePath)
 {
        String etcPath = Application::GetZonesDir() + "/" + Utility::BaseName(zonePath);
 
-       if (Utility::PathExists(etcPath))
+       if (Utility::PathExists(etcPath) || Utility::PathExists(zonePath + "/.authoritative"))
                return;
 
        IncludeZoneDirRecursive(zonePath);
index 8d019fc4a4e4106ad9a1014d587f7e3d86a73a16..aba5f48a7f8d3caeac12bccac7a9e8f54d9b7158 100644 (file)
@@ -58,7 +58,7 @@ Dictionary::Ptr ApiListener::LoadConfigDir(const String& dir)
        return config;
 }
 
-bool ApiListener::UpdateConfigDir(const Dictionary::Ptr& oldConfig, const Dictionary::Ptr& newConfig, const String& configDir)
+bool ApiListener::UpdateConfigDir(const Dictionary::Ptr& oldConfig, const Dictionary::Ptr& newConfig, const String& configDir, bool authoritative)
 {
        bool configChange = false;
 
@@ -103,6 +103,14 @@ bool ApiListener::UpdateConfigDir(const Dictionary::Ptr& oldConfig, const Dictio
                fp.close();
        }
 
+       if (authoritative) {
+               String authPath = configDir + "/.authoritative";
+               if (!Utility::PathExists(tsPath)) {
+                       std::ofstream fp(tsPath.CStr(), std::ofstream::out | std::ostream::trunc);
+                       fp.close();
+               }
+       }
+
        return configChange;
 }
 
@@ -127,7 +135,7 @@ void ApiListener::SyncZoneDir(const Zone::Ptr& zone) const
        Dictionary::Ptr newConfig = LoadConfigDir(newDir);
        Dictionary::Ptr oldConfig = LoadConfigDir(oldDir);
 
-       UpdateConfigDir(oldConfig, newConfig, oldDir);
+       UpdateConfigDir(oldConfig, newConfig, oldDir, true);
 }
 
 void ApiListener::SyncZoneDirs(void) const
@@ -239,7 +247,7 @@ Value ApiListener::ConfigUpdateHandler(const MessageOrigin& origin, const Dictio
                Dictionary::Ptr newConfig = kv.second;
                Dictionary::Ptr oldConfig = LoadConfigDir(oldDir);
 
-               if (UpdateConfigDir(oldConfig, newConfig, oldDir))
+               if (UpdateConfigDir(oldConfig, newConfig, oldDir, false))
                        configChange = true;
        }
 
index ed303cb538a7038934a35c617d61d644c67c444c..23561c354ac39ba0a5c3e9b0c887b7bcf78c5f16 100644 (file)
@@ -103,7 +103,7 @@ private:
        void ReplayLog(const ApiClient::Ptr& client);
 
        static Dictionary::Ptr LoadConfigDir(const String& dir);
-       static bool UpdateConfigDir(const Dictionary::Ptr& oldConfig, const Dictionary::Ptr& newConfig, const String& configDir);
+       static bool UpdateConfigDir(const Dictionary::Ptr& oldConfig, const Dictionary::Ptr& newConfig, const String& configDir, bool authoritative);
 
        void SyncZoneDirs(void) const;
        void SyncZoneDir(const Zone::Ptr& zone) const;