Skip to content

Commit

Permalink
Merge pull request #7164 from Icinga/bugfix/notification-times-validate
Browse files Browse the repository at this point in the history
Improve validation for times.{begin,end} in notification objects
  • Loading branch information
Michael Friedrich committed May 7, 2019
2 parents 296fc06 + 8ae206c commit 736e080
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
29 changes: 29 additions & 0 deletions lib/icinga/notification.cpp
Expand Up @@ -720,6 +720,35 @@ void Notification::ValidateTypes(const Lazy<Array::Ptr>& lvalue, const Validatio
BOOST_THROW_EXCEPTION(ValidationError(this, { "types" }, "Type filter is invalid."));
}

void Notification::ValidateTimes(const Lazy<Dictionary::Ptr>& lvalue, const ValidationUtils& utils)
{
ObjectImpl<Notification>::ValidateTimes(lvalue, utils);

Dictionary::Ptr times = lvalue();

if (!times)
return;

double begin;
double end;

try {
begin = Convert::ToDouble(times->Get("begin"));
} catch (const std::exception&) {
BOOST_THROW_EXCEPTION(ValidationError(this, { "times" }, "'begin' is invalid, must be duration or number." ));
}

try {
end = Convert::ToDouble(times->Get("end"));
} catch (const std::exception&) {
BOOST_THROW_EXCEPTION(ValidationError(this, { "times" }, "'end' is invalid, must be duration or number." ));
}

/* Also solve logical errors where begin > end. */
if (begin > 0 && end > 0 && begin > end)
BOOST_THROW_EXCEPTION(ValidationError(this, { "times" }, "'begin' must be smaller than 'end'."));
}

Endpoint::Ptr Notification::GetCommandEndpoint() const
{
return Endpoint::GetByName(GetCommandEndpointRaw());
Expand Down
1 change: 1 addition & 0 deletions lib/icinga/notification.hpp
Expand Up @@ -95,6 +95,7 @@ class Notification final : public ObjectImpl<Notification>

void ValidateStates(const Lazy<Array::Ptr>& lvalue, const ValidationUtils& utils) override;
void ValidateTypes(const Lazy<Array::Ptr>& lvalue, const ValidationUtils& utils) override;
void ValidateTimes(const Lazy<Dictionary::Ptr>& lvalue, const ValidationUtils& utils) override;

static void EvaluateApplyRules(const intrusive_ptr<Host>& host);
static void EvaluateApplyRules(const intrusive_ptr<Service>& service);
Expand Down

0 comments on commit 736e080

Please sign in to comment.