diff -r -u ..\pre-zabbix-1.6/src/zabbix_agent/active.c ./src/zabbix_agent/active.c --- ..\pre-zabbix-1.6/src/zabbix_agent/active.c 2008-10-30 16:21:12.000000000 +0100 +++ ./src/zabbix_agent/active.c 2008-10-31 23:20:01.656250000 +0100 @@ -628,7 +628,10 @@ long lastlogsize; char params[MAX_STRING_LEN]; char filename[MAX_STRING_LEN]; - char pattern[MAX_STRING_LEN]; + char valuepattern[MAX_STRING_LEN]; + char sourcepattern[MAX_STRING_LEN]; + char severitypattern[MAX_STRING_LEN]; + char severitystring[6]; /* This must be large enough for an unsigned short */ AGENT_RESULT result; @@ -656,8 +659,8 @@ if (get_param(params, 1, filename, sizeof(filename)) != 0) break; - if (get_param(params, 2, pattern, sizeof(pattern)) != 0) - *pattern = '\0'; + if (get_param(params, 2, valuepattern, sizeof(valuepattern)) != 0) + *valuepattern = '\0'; s_count = 0; p_count = 0; @@ -666,7 +669,7 @@ if (!value) /* EOF */ break; - if ('\0' == *pattern || NULL != zbx_regexp_match(value, pattern, NULL)) { + if ('\0' == *valuepattern || NULL != zbx_regexp_match(value, valuepattern, NULL)) { send_err = process_value( server, port, @@ -724,14 +727,20 @@ if (parse_command(active_metrics[i].key, NULL, 0, params, MAX_STRING_LEN) != 2) break; - if (num_param(params) > 2) + if (num_param(params) > 4) break; if (get_param(params, 1, filename, sizeof(filename)) != 0) break; - if (get_param(params, 2, pattern, sizeof(pattern)) != 0) - *pattern = '\0'; + if (get_param(params, 2, valuepattern, sizeof(valuepattern)) != 0) + *valuepattern = '\0'; + + if (get_param(params, 3, sourcepattern, sizeof(sourcepattern)) != 0) + *sourcepattern = '\0'; + + if (get_param(params, 4, severitypattern, sizeof(severitypattern)) != 0) + *severitypattern = '\0'; s_count = 0; p_count = 0; @@ -742,7 +751,13 @@ if (!value) /* EOF */ break; - if (!pattern || NULL != zbx_regexp_match(value, pattern, NULL)) { + if ('\0' != *severitypattern) + zbx_snprintf(severitystring, sizeof(severitystring), "%hu", severity); + + if (('\0' == *severitypattern || NULL != zbx_regexp_match(severitystring, severitypattern, NULL)) && + ('\0' == *sourcepattern || NULL != zbx_regexp_match(source, sourcepattern, NULL)) && + ('\0' == *valuepattern || NULL != zbx_regexp_match(value, valuepattern, NULL))) + { send_err = process_value( server, port,