From 7b8dc1d97e9371e0e32c8551a260d02a497dee96 Mon Sep 17 00:00:00 2001 From: Michael Friedrich Date: Mon, 4 Aug 2014 14:03:37 +0200 Subject: [PATCH] Fix non-existing endpoint on ApiListener error refs #6724 --- lib/base/application.cpp | 7 ++++--- lib/icinga/apievents.cpp | 24 +++++++++++++++++++++--- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/lib/base/application.cpp b/lib/base/application.cpp index 03559c421..14ea9f6ff 100644 --- a/lib/base/application.cpp +++ b/lib/base/application.cpp @@ -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::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); diff --git a/lib/icinga/apievents.cpp b/lib/icinga/apievents.cpp index bc0bd0f03..723f5ee80 100644 --- a/lib/icinga/apievents.cpp +++ b/lib/icinga/apievents.cpp @@ -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(); @@ -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);