]> granicus.if.org Git - icinga2/commitdiff
Fix non-existing endpoint on ApiListener error
authorMichael Friedrich <michael.friedrich@netways.de>
Mon, 4 Aug 2014 12:03:37 +0000 (14:03 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Mon, 4 Aug 2014 15:23:41 +0000 (17:23 +0200)
refs #6724

lib/base/application.cpp
lib/icinga/apievents.cpp

index 03559c42166f50e33fabb027edb35f38829f2bc1..14ea9f6ffe57d473d4c07c7d0ba58e6fd9a3cd46 100644 (file)
@@ -282,7 +282,7 @@ mainloop:
 
                lastLoop = now;
        }
-               
+
        if (m_RequestRestart) {
                m_RequestRestart = false;         // we are now handling the request, once is enough
 
@@ -295,7 +295,7 @@ mainloop:
 
                goto mainloop;
        }
-       
+
        Log(LogInformation, "Application", "Shutting down Icinga...");
        DynamicObject::StopObjects();
        Application::GetInstance()->OnShutdown();
@@ -342,7 +342,7 @@ pid_t Application::StartReloadProcess(void)
        Process::Ptr process = make_shared<Process>(Process::PrepareCommand(args));
        process->SetTimeout(300);
        process->Run(&ReloadProcessCallback);
+
        return process->GetPID();
 }
 
@@ -1009,6 +1009,7 @@ void Application::MakeVariablesConstant(void)
        ScriptVariable::GetByName("PrefixDir")->SetConstant(true);
        ScriptVariable::GetByName("SysconfDir")->SetConstant(true);
        ScriptVariable::GetByName("LocalStateDir")->SetConstant(true);
+       ScriptVariable::GetByName("RunDir")->SetConstant(true);
        ScriptVariable::GetByName("PkgDataDir")->SetConstant(true);
        ScriptVariable::GetByName("StatePath")->SetConstant(false);
        ScriptVariable::GetByName("PidPath")->SetConstant(false);
index bc0bd0f03f6e6f13da37b43cbae828f18cfa2ee7..723f5ee80f5c00192f9ce503c88246f2f2458212 100644 (file)
@@ -898,6 +898,12 @@ void ApiEvents::RepositoryTimerHandler(void)
        }
 
        Endpoint::Ptr my_endpoint = Endpoint::GetLocalEndpoint();
+
+       if (!my_endpoint) {
+               Log(LogWarning, "ApiEvents", "No local endpoint defined. Bailing out.");
+               return;
+       }
+
        Zone::Ptr my_zone = my_endpoint->GetZone();
 
        Dictionary::Ptr params = make_shared<Dictionary>();
@@ -965,14 +971,26 @@ Value ApiEvents::UpdateRepositoryAPIHandler(const MessageOrigin& origin, const D
 String ApiEvents::GetVirtualHostName(const Host::Ptr& host)
 {
        String host_name = host->GetName();
-       if (host_name == "localhost")
-               host_name = Endpoint::GetLocalEndpoint()->GetName();
+       if (host_name == "localhost") {
+               Endpoint::Ptr local = Endpoint::GetLocalEndpoint();
+
+               if (!local)
+                       return Empty;
+
+               host_name = local->GetName();
+       }
+
        return host_name;
 }
 
 Host::Ptr ApiEvents::FindHostByVirtualName(const String& hostName)
 {
-       if (hostName == Endpoint::GetLocalEndpoint()->GetName())
+       Endpoint::Ptr local = Endpoint::GetLocalEndpoint();
+
+       if (!local)
+               return Host::Ptr();
+
+       if (hostName == local->GetName())
                return Host::GetByName("localhost");
        else
                return Host::GetByName(hostName);