diff -dur zabbix-3.2.0.orig/src/zabbix_server/actions.c zabbix-3.2.0/src/zabbix_server/actions.c --- zabbix-3.2.0.orig/src/zabbix_server/actions.c 2016-09-13 14:20:55.000000000 +0200 +++ zabbix-3.2.0/src/zabbix_server/actions.c 2016-10-04 09:49:31.000000000 +0200 @@ -40,9 +40,22 @@ ******************************************************************************/ static int check_condition_event_tag(const DB_EVENT *event, const DB_CONDITION *condition) { - int i, ret = FAIL; + int i, ret, final; - for (i = 0; i < event->tags.values_num && SUCCEED != ret; i++) + switch (condition->operator) + { + case CONDITION_OPERATOR_NOT_EQUAL: + case CONDITION_OPERATOR_NOT_LIKE: + ret = SUCCEED; + final = FAIL; + break; + default: + ret = FAIL; + final = SUCCEED; + break; + } + + for (i = 0; i < event->tags.values_num && final != ret; i++) { zbx_tag_t *tag = (zbx_tag_t *)event->tags.values[i]; @@ -66,9 +79,22 @@ ******************************************************************************/ static int check_condition_event_tag_value(const DB_EVENT *event, DB_CONDITION *condition) { - int i, ret = FAIL; + int i, ret, final; - for (i = 0; i < event->tags.values_num && SUCCEED != ret; i++) + switch (condition->operator) + { + case CONDITION_OPERATOR_NOT_EQUAL: + case CONDITION_OPERATOR_NOT_LIKE: + ret = SUCCEED; + final = FAIL; + break; + default: + ret = FAIL; + final = SUCCEED; + break; + } + + for (i = 0; i < event->tags.values_num && final != ret; i++) { zbx_tag_t *tag = (zbx_tag_t *)event->tags.values[i];