From: Michael Friedrich Date: Mon, 17 Mar 2014 17:52:23 +0000 (+0100) Subject: Empty command string on CHANGE_{HOST,SERVICE}_EVENTHANDLER should disable event handlers. X-Git-Tag: v0.0.9~80 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ac35eadc8d3a8bf974f758dc38fd810333b79934;p=icinga2 Empty command string on CHANGE_{HOST,SERVICE}_EVENTHANDLER should disable event handlers. Fixes #5670 --- diff --git a/lib/icinga/externalcommandprocessor.cpp b/lib/icinga/externalcommandprocessor.cpp index 09ab3a850..fd24a041c 100644 --- a/lib/icinga/externalcommandprocessor.cpp +++ b/lib/icinga/externalcommandprocessor.cpp @@ -2123,17 +2123,22 @@ void ExternalCommandProcessor::ChangeHostEventHandler(double time, const std::ve if (!hc) BOOST_THROW_EXCEPTION(std::invalid_argument("Cannot change event handler for host '" + arguments[0] + "' which has no check service.")); - EventCommand::Ptr command = EventCommand::GetByName(arguments[1]); + /* empty command string implicitely disables event handler */ + if (arguments[1].IsEmpty()) { + hc->SetEnableEventHandler(false); + } else { + EventCommand::Ptr command = EventCommand::GetByName(arguments[1]); - if (!command) - BOOST_THROW_EXCEPTION(std::invalid_argument("Event command '" + arguments[1] + "' does not exist.")); + if (!command) + BOOST_THROW_EXCEPTION(std::invalid_argument("Event command '" + arguments[1] + "' does not exist.")); - Log(LogInformation, "icinga", "Changing event handler for host '" + arguments[0] + "' to '" + arguments[1] + "'"); + Log(LogInformation, "icinga", "Changing event handler for host '" + arguments[0] + "' to '" + arguments[1] + "'"); - { - ObjectLock olock(hc); + { + ObjectLock olock(hc); - hc->SetEventCommand(command); + hc->SetEventCommand(command); + } } } @@ -2147,17 +2152,22 @@ void ExternalCommandProcessor::ChangeSvcEventHandler(double time, const std::vec if (!service) BOOST_THROW_EXCEPTION(std::invalid_argument("Cannot change event handler for non-existent service '" + arguments[1] + "' on host '" + arguments[0] + "'")); - EventCommand::Ptr command = EventCommand::GetByName(arguments[2]); + /* empty command string implicitely disables event handler */ + if (arguments[2].IsEmpty()) { + service->SetEnableEventHandler(false); + } else { + EventCommand::Ptr command = EventCommand::GetByName(arguments[2]); - if (!command) - BOOST_THROW_EXCEPTION(std::invalid_argument("Event command '" + arguments[2] + "' does not exist.")); + if (!command) + BOOST_THROW_EXCEPTION(std::invalid_argument("Event command '" + arguments[2] + "' does not exist.")); - Log(LogInformation, "icinga", "Changing event handler for service '" + arguments[1] + "' to '" + arguments[2] + "'"); + Log(LogInformation, "icinga", "Changing event handler for service '" + arguments[1] + "' to '" + arguments[2] + "'"); - { - ObjectLock olock(service); + { + ObjectLock olock(service); - service->SetEventCommand(command); + service->SetEventCommand(command); + } } }