diff --git a/lib/icinga/notification.cpp b/lib/icinga/notification.cpp index 81a48bada8..0a7cf4759d 100644 --- a/lib/icinga/notification.cpp +++ b/lib/icinga/notification.cpp @@ -428,9 +428,14 @@ void Notification::BeginExecuteNotification(NotificationType type, const CheckRe continue; } + // Verify if the 'Problem' filter is configured at both the User and Notification object levels. + bool foundProblemFilter = NotificationProblem & user->GetTypeFilter() && NotificationProblem & GetTypeFilter(); + /* on recovery, check if user was notified before */ if (type == NotificationRecovery) { - if (!notifiedProblemUsers->Contains(userName) && (NotificationProblem & user->GetTypeFilter())) { + // Do not send a recovery notification to the current user if he was not previously notified of the + // problem state, while containing the 'Problem' filter at both the user and notification object levels. + if (!notifiedProblemUsers->Contains(userName) && foundProblemFilter) { Log(LogNotice, "Notification") << "Notification object '" << notificationName << "': We did not notify user '" << userName << "' (Problem types enabled) for a problem before. Not sending Recovery notification."; @@ -440,7 +445,9 @@ void Notification::BeginExecuteNotification(NotificationType type, const CheckRe /* on acknowledgement, check if user was notified before */ if (type == NotificationAcknowledgement) { - if (!notifiedProblemUsers->Contains(userName) && (NotificationProblem & user->GetTypeFilter())) { + // Do not send an ACK notification to the current user if he wasn't previously notified of the problem + // state, while containing the 'Problem' filter at both the user and notification object levels. + if (!notifiedProblemUsers->Contains(userName) && foundProblemFilter) { Log(LogNotice, "Notification") << "Notification object '" << notificationName << "': We did not notify user '" << userName << "' (Problem types enabled) for a problem before. Not sending acknowledgement notification.";