summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2007-02-12 12:39:13 +0000
committerosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2007-02-12 12:39:13 +0000
commit44c297403e8be585e6dd89ccfee7990dad1feadf (patch)
tree0b54dcfdff4ab1d02a9a239e7038487a3376758c
parent8db0715194e777206d508d8c354067b7ddef1645 (diff)
downloadzabbix-44c297403e8be585e6dd89ccfee7990dad1feadf.tar.gz
zabbix-44c297403e8be585e6dd89ccfee7990dad1feadf.tar.xz
zabbix-44c297403e8be585e6dd89ccfee7990dad1feadf.zip
- fixed large SQLs calling (Eugene)
- increased message size for alerts (Eugene) - fixed macros substitution for messages (Eugene) git-svn-id: svn://svn.zabbix.com/trunk@3821 97f52cf1-0a1b-0410-bd0e-c28be96e8082
-rw-r--r--ChangeLog3
-rwxr-xr-xdo2
-rw-r--r--frontends/php/css.css3
-rw-r--r--frontends/php/include/actions.inc.php25
-rw-r--r--include/common.h4
-rw-r--r--include/db.h17
-rw-r--r--include/sysinfo.h11
-rw-r--r--src/libs/zbxcommon/str.c80
-rw-r--r--src/libs/zbxcomms/comms.c10
-rw-r--r--src/libs/zbxdbhigh/Makefile.am2
-rw-r--r--src/libs/zbxdbhigh/action.c4
-rw-r--r--src/libs/zbxdbhigh/db.c307
-rw-r--r--src/libs/zbxemail/email.c38
-rw-r--r--src/libs/zbxlog/log.c8
-rw-r--r--src/libs/zbxsys/mutexs.c4
-rw-r--r--src/libs/zbxsysinfo/aix/proc.c12
-rw-r--r--src/zabbix_sender/zabbix_sender.c14
-rw-r--r--src/zabbix_server/actions.c41
-rw-r--r--src/zabbix_server/evalfunc.c2
-rw-r--r--src/zabbix_server/events.c38
-rw-r--r--src/zabbix_server/events.h2
-rw-r--r--src/zabbix_server/expression.c206
-rw-r--r--src/zabbix_server/expression.h6
-rw-r--r--src/zabbix_server/functions.c30
-rw-r--r--src/zabbix_server/nodewatcher/events.c2
-rw-r--r--src/zabbix_server/nodewatcher/history.c2
-rw-r--r--src/zabbix_server/nodewatcher/nodecomms.c2
-rw-r--r--src/zabbix_server/nodewatcher/nodesender.c2
-rw-r--r--src/zabbix_server/timer/timer.c3
-rw-r--r--src/zabbix_server/trapper/nodeevents.c2
-rw-r--r--src/zabbix_server/trapper/nodehistory.c2
-rw-r--r--src/zabbix_server/trapper/trapper.c2
-rw-r--r--src/zabbix_server/zlog.c2
33 files changed, 336 insertions, 552 deletions
diff --git a/ChangeLog b/ChangeLog
index 1cbc0762..63a211e4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,6 @@
Changes for 1.3.3:
+ - fixed large SQLs calling (Eugene)
- new templates Unix_t, Windows_t, Standalone_t (Alexei)
- added media_type.username, media_type.passwd (Alexei)
- added hosts.dns. Host name is for informational purposes only. (Alexei)
@@ -78,6 +79,8 @@ Integrated from 1.1.x
1.1.6
+ - increased message size for alerts (Eugene)
+ - fixed macros substitution for messages (Eugene)
- improved 'perf_counter[*]' for WinXX (Eugene)
- fixed stderr/stdout redirection during logrotation (Eugene)
- fixed graphs in Oracle system (Eugene)
diff --git a/do b/do
index bf9a4954..e2aff3a7 100755
--- a/do
+++ b/do
@@ -55,7 +55,7 @@ then
echo " $0 [commands] [options]"
echo
echo " Commands:"
- echo " [win2nix] - convers win EOL [\\r\\n] to nix EOL [\\r]"
+ echo " [win2nix] - convers win EOL [\\\\r\\\\n] to nix EOL [\\\\n]"
echo " [copy|cpy] - copy automake files"
echo " [premake|pre] - make configuration file"
echo " [configure|config|conf] - configure make files"
diff --git a/frontends/php/css.css b/frontends/php/css.css
index 4baa7992..8b831761 100644
--- a/frontends/php/css.css
+++ b/frontends/php/css.css
@@ -1,3 +1,5 @@
+.top { vertical-align: top; }
+
body
{
background-color:#e5e5e5;
@@ -1101,4 +1103,3 @@ ul.messages li.error
color:#AA0000;
list-style: url('images/general/error_small.gif') inside;
}
-
diff --git a/frontends/php/include/actions.inc.php b/frontends/php/include/actions.inc.php
index c8138d46..41d80ce2 100644
--- a/frontends/php/include/actions.inc.php
+++ b/frontends/php/include/actions.inc.php
@@ -295,7 +295,7 @@
10*$start+$num);
$table = new CTableInfo(S_NO_ACTIONS_FOUND);
- $table->SetHeader(array(S_TIME, S_TYPE, S_STATUS, S_RECIPIENTS, S_SUBJECT, S_MESSAGE, S_ERROR));
+ $table->SetHeader(array(S_TIME, S_TYPE, S_STATUS, S_RECIPIENTS, S_MESSAGE, S_ERROR));
$col=0;
$skip=$start;
while(($row=DBfetch($result))&&($col<$num))
@@ -309,15 +309,17 @@
if($row["status"] == 1)
{
- $status=new CCol(S_SENT,"off");
+ $status=new CSpan(S_SENT,"off");
}
else
{
- $status=new CCol(S_NOT_SENT,"on");
+ $status=new CSpan(S_NOT_SENT,"on");
}
$sendto=htmlspecialchars($row["sendto"]);
- $subject="<pre>".htmlspecialchars($row["subject"])."</pre>";
- $message="<pre>".htmlspecialchars($row["message"])."</pre>";
+
+ $subject = empty($row["subject"]) ? '' : "<pre>".bold(S_SUBJECT.': ').htmlspecialchars($row["subject"])."</pre>";
+ $message = array($subject,"<pre>".htmlspecialchars($row["message"])."</pre>");
+
if($row["error"] == "")
{
$error=new CSpan(SPACE,"off");
@@ -327,13 +329,12 @@
$error=new CSpan($row["error"],"on");
}
$table->AddRow(array(
- $time,
- $row["description"],
- $status,
- $sendto,
- $subject,
- $message,
- $error));
+ new CCol($time, 'top'),
+ new CCol($row["description"], 'top'),
+ new CCol($status, 'top'),
+ new CCol($sendto, 'top'),
+ new CCol($message, 'top'),
+ new CCol($error, 'top')));
$col++;
}
diff --git a/include/common.h b/include/common.h
index 750f0fd7..d20a2ff2 100644
--- a/include/common.h
+++ b/include/common.h
@@ -509,7 +509,9 @@ int set_result_type(AGENT_RESULT *result, int value_type, char *c);
size_t zbx_strlcpy(char *dst, const char *src, size_t siz);
size_t zbx_strlcat(char *dst, const char *src, size_t siz);
-char* zbx_dvsprintf(const char *f, va_list args);
+char* zbx_dvsprintf(char *dest, const char *f, va_list args);
+char* zbx_dsprintf(char *dest, const char *f, ...);
+char* zbx_strdcat(char *dest, const char *src);
int replace_param(const char *cmd, const char *param, char *out, int outlen);
diff --git a/include/db.h b/include/db.h
index ef7536e9..d106d298 100644
--- a/include/db.h
+++ b/include/db.h
@@ -61,6 +61,9 @@ extern char *CONFIG_DBPASSWORD;
extern char *CONFIG_DBSOCKET;
extern int CONFIG_DBPORT;
+extern int CONFIG_NODEID;
+extern int CONFIG_MASTER_NODEID;
+
#define DB_FULL_DELETE 0
#define DB_PART_DELETE 1
@@ -192,8 +195,8 @@ DB_EVENT
int acknowledged;
char trigger_description[TRIGGER_DESCRIPTION_LEN_MAX];
int trigger_priority;
- char trigger_url[TRIGGER_URL_LEN_MAX];
- char trigger_comments[TRIGGER_COMMENTS_LEN_MAX];
+ char *trigger_url;
+ char *trigger_comments;
};
DB_HOST
@@ -332,8 +335,8 @@ DB_TRIGGER
zbx_uint64_t triggerid;
char expression[TRIGGER_EXPRESSION_LEN_MAX];
char description[TRIGGER_DESCRIPTION_LEN_MAX];
- char url[TRIGGER_URL_LEN_MAX];
- char comments[TRIGGER_COMMENTS_LEN_MAX];
+ char *url;
+ char *comments;
int status;
int value;
// int prevvalue;
@@ -348,12 +351,12 @@ DB_ACTION
/* int delay;*/
int lastcheck;
int recipient;
- char subject[ACTION_SUBJECT_LEN_MAX]; /* don't use pointer, cose sizeof is used */
+ char *subject;
char *message;
int message_len;
int maxrepeats;
int repeatdelay;
- char scripts[MAX_STRING_LEN];
+ char *scripts;
};
DB_CONDITION
@@ -476,7 +479,7 @@ int DBget_trends_count(void);
int DBget_triggers_count(void);
int DBget_queue_count(void);
-void DBescape_string(char *from, char *to, int maxlen);
+void DBescape_string(const char *from, char *to, int maxlen);
void DBget_item_from_db(DB_ITEM *item,DB_ROW row);
zbx_uint64_t DBadd_host(char *server, int port, int status, int useip, char *ip, int disable_until, int available);
diff --git a/include/sysinfo.h b/include/sysinfo.h
index 3de8519b..bed63b99 100644
--- a/include/sysinfo.h
+++ b/include/sysinfo.h
@@ -131,4 +131,15 @@ int SERVICE_STATE(const char *cmd, const char *param, unsigned flags, AGENT_RESU
int PROC_INFO(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result);
#endif /* _WINDOWS */
+#ifndef HAVE_SYS_PROCFS_H
+int getprocs(
+ struct procsinfo *ProcessBuffer,
+ int ProcessSize,
+ struct fdsinfo *FileBuffer,
+ int FileSize,
+ pid_t *IndexPointer,
+ int Count
+ );
+#endif /* ndef HAVE_SYS_PROCFS_H */
+
#endif
diff --git a/src/libs/zbxcommon/str.c b/src/libs/zbxcommon/str.c
index 04577476..65886297 100644
--- a/src/libs/zbxcommon/str.c
+++ b/src/libs/zbxcommon/str.c
@@ -734,25 +734,99 @@ size_t zbx_strlcat(char *dst, const char *src, size_t siz)
* Comments: required free allocated string with function 'zbx_free' *
* *
******************************************************************************/
-char* zbx_dvsprintf(const char *f, va_list args)
+char* zbx_dvsprintf(char *dest, const char *f, va_list args)
{
char *string = NULL;
int n, size = MAX_STRING_LEN >> 1;
+ va_list curr;
+
while(1) {
string = zbx_malloc(size);
- n = vsnprintf(string, size, f, args);
+ va_copy(curr, args);
+ n = vsnprintf(string, size, f, curr);
+ va_end(curr);
if(n >= 0 && n < size)
break;
- if(n >= size) size = n + 3;
+ if(n >= size) size = n + 1;
else size = size * 3 / 2 + 1;
zbx_free(string);
}
+ if(dest) zbx_free(dest);
+
+ return string;
+}
+
+/******************************************************************************
+ * *
+ * Function: zbx_dsprintf *
+ * *
+ * Purpose: dinamical formatted output conversion *
+ * *
+ * Return value: formated string *
+ * *
+ * Author: Eugene Grigorjev *
+ * *
+ * Comments: required free allocated string with function 'zbx_free' *
+ * *
+ ******************************************************************************/
+char* zbx_dsprintf(char *dest, const char *f, ...)
+{
+ char *string = NULL;
+ va_list args;
+
+ va_start(args, f);
+
+ string = zbx_dvsprintf(dest, f, args);
+
+ va_end(args);
+
return string;
}
+/******************************************************************************
+ * *
+ * Function: zbx_strdcat *
+ * *
+ * Purpose: dinamical cating of strings *
+ * *
+ * Return value: new pointer of string *
+ * *
+ * Author: Eugene Grigorjev *
+ * *
+ * Comments: required free allocated string with function 'zbx_free' *
+ * *
+ ******************************************************************************/
+char* zbx_strdcat(char *dest, const char *src)
+{
+ register int new_len = 0;
+ char *new_dest = NULL;
+
+ if(!src || !src[0]) return dest;
+
+ if(dest) new_len += strlen(dest);
+
+ new_len += strlen(src);
+
+ new_dest = zbx_malloc(new_len + 1);
+
+ if(dest)
+ {
+ strcpy(new_dest, dest);
+ strcat(new_dest, src);
+ zbx_free(dest);
+ }
+ else
+ {
+ strcpy(new_dest, src);
+ }
+
+ new_dest[new_len] = '\0';
+
+ return new_dest;
+}
diff --git a/src/libs/zbxcomms/comms.c b/src/libs/zbxcomms/comms.c
index 08ac0019..3bd18b46 100644
--- a/src/libs/zbxcomms/comms.c
+++ b/src/libs/zbxcomms/comms.c
@@ -234,18 +234,18 @@ int zbx_tcp_recv(zbx_sock_t *s, char **data)
int allocated, offset;
zbx_uint64_t expected_len;
- memset(s->buf_stat,0,ZBX_STAT_BUF_LEN);
+ memset(s->buf_stat,0,sizeof(s->buf_stat));
+
s->buf_type = ZBX_BUF_TYPE_STAT;
nbytes=read(s->socket, s->buf_stat, 5);
if(nbytes==5 && strncmp(s->buf_stat,"ZBXD",4)==0 && s->buf_stat[4] == 1)
{
- nbytes=read(s->socket, (zbx_uint64_t *)&expected_len, sizeof(expected_len));
+ nbytes=read(s->socket, (void *)&expected_len, sizeof(zbx_uint64_t));
- read_max = ZBX_STAT_BUF_LEN -1;
/* The rest was already cleared */
memset(s->buf_stat,0,5);
- nbytes = read(s->socket, s->buf_stat, read_max);
+ nbytes = read(s->socket, s->buf_stat, sizeof(s->buf_stat) - 1 );
*data = s->buf_stat;
}
@@ -266,7 +266,7 @@ int zbx_tcp_recv(zbx_sock_t *s, char **data)
{
s->buf_type = ZBX_BUF_TYPE_DYN;
allocated = ZBX_BUF_LEN;
- s->buf_dyn=malloc(allocated);
+ s->buf_dyn=zbx_malloc(allocated);
memset(s->buf_dyn,0,ZBX_BUF_LEN);
strnscpy(s->buf_dyn, s->buf_stat, ZBX_BUF_LEN);
diff --git a/src/libs/zbxdbhigh/Makefile.am b/src/libs/zbxdbhigh/Makefile.am
index 77e90eab..399cc03b 100644
--- a/src/libs/zbxdbhigh/Makefile.am
+++ b/src/libs/zbxdbhigh/Makefile.am
@@ -10,4 +10,4 @@ libzbxdbhigh_a_SOURCES = \
host.c \
db.c
-libzbxdbhigh_a_CPPFLAGS = $(DB_CPPFLAGS)
+libzbxdbhigh_a_CPPFLAGS = -I@top_srcdir@/src/zabbix_server/ $(DB_CPPFLAGS)
diff --git a/src/libs/zbxdbhigh/action.c b/src/libs/zbxdbhigh/action.c
index 916ccb55..09116ee6 100644
--- a/src/libs/zbxdbhigh/action.c
+++ b/src/libs/zbxdbhigh/action.c
@@ -79,8 +79,8 @@ int DBget_action_by_actionid(zbx_uint64_t actionid,DB_ACTION *action)
action->actionid=actionid;
ZBX_STR2UINT64(action->userid, row[0]);
action->recipient=atoi(row[1]);
- strscpy(action->subject,row[2]);
- strscpy(action->message,row[3]);
+ action->subject=strdup(row[2]);
+ action->message=strdup(row[3]);
}
DBfree_result(result);
diff --git a/src/libs/zbxdbhigh/db.c b/src/libs/zbxdbhigh/db.c
index d174d23e..2b4fc625 100644
--- a/src/libs/zbxdbhigh/db.c
+++ b/src/libs/zbxdbhigh/db.c
@@ -32,6 +32,7 @@
#include "log.h"
#include "zlog.h"
#include "common.h"
+#include "actions.h"
#include "../../zabbix_server/events.h"
@@ -53,11 +54,6 @@
sqlo_db_handle_t oracle;
#endif
-extern void apply_actions(DB_TRIGGER *trigger,int trigger_value);
-extern void update_services(int triggerid, int status);
-extern int CONFIG_NODEID;
-extern int CONFIG_MASTER_NODEID;
-
void DBclose(void)
{
#ifdef HAVE_MYSQL
@@ -305,7 +301,7 @@ int DBexecute(const char *fmt, ...)
va_start(args, fmt);
- sql = zbx_dvsprintf(fmt, args);
+ sql = zbx_dvsprintf(sql, fmt, args);
va_end(args);
@@ -532,7 +528,7 @@ DB_RESULT DBselect(const char *fmt, ...)
va_start(args, fmt);
- sql = zbx_dvsprintf(fmt, args);
+ sql = zbx_dvsprintf(sql, fmt, args);
va_end(args);
@@ -641,34 +637,6 @@ DB_RESULT DBselectN(char *query, int n)
}
/*
- * Get value for given row and field. Must be called after DBselect.
- */
-/*
-char *DBget_field(DB_RESULT result, int rownum, int fieldnum)
-{
-#ifdef HAVE_MYSQL
- MYSQL_ROW row;
-
- mysql_data_seek(result, rownum);
- row=mysql_fetch_row(result);
- if(row == NULL)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error while mysql_fetch_row():Error [%s] Rownum [%d] Fieldnum [%d]", mysql_error(&mysql), rownum, fieldnum );
- zabbix_syslog("MYSQL: Error while mysql_fetch_row():Error [%s] Rownum [%d] Fieldnum [%d]", mysql_error(&mysql), rownum, fieldnum );
- exit(FAIL);
- }
- return row[fieldnum];
-#endif
-#ifdef HAVE_POSTGRESQL
- return PQgetvalue(result, rownum, fieldnum);
-#endif
-#ifdef HAVE_ORACLE
- return FAIL;
-#endif
-}
-*/
-
-/*
* Get value of autoincrement field for last insert or update statement
*/
zbx_uint64_t DBinsert_id(int exec_result, const char *table, const char *field)
@@ -718,7 +686,6 @@ zbx_uint64_t DBinsert_id(int exec_result, const char *table, const char *field)
row = DBfetch(result);
ZBX_STR2UINT64(id, row[0]);
-/* id = atoi(row[0]);*/
DBfree_result(result);
return id;
@@ -729,88 +696,6 @@ zbx_uint64_t DBinsert_id(int exec_result, const char *table, const char *field)
}
/*
- * Returs number of affected rows of last select, update, delete or replace
- */
-/*
-long DBaffected_rows()
-{
-#ifdef HAVE_MYSQL
- return (long)mysql_affected_rows(&mysql);
-#endif
-#ifdef HAVE_POSTGRESQL
- NOT IMPLEMENTED YET
-#endif
-#ifdef HAVE_ORACLE
- return FAIL;
-#endif
-}*/
-
-
-/*
- * Return SUCCEED if result conains no records
- */
-/*int DBis_empty(DB_RESULT *result)
-{
- zabbix_log(LOG_LEVEL_DEBUG, "In DBis_empty");
- if(result == NULL)
- {
- return SUCCEED;
- }
- if(DBnum_rows(result) == 0)
- {
- return SUCCEED;
- }
- if(DBget_field(result,0,0) == 0)
- {
- return SUCCEED;
- }
-
- return FAIL;
-}*/
-
-/*
- * Get number of selected records.
- */
-/*
-int DBnum_rows(DB_RESULT result)
-{
-#ifdef HAVE_MYSQL
- int rows;
-
- zabbix_log(LOG_LEVEL_DEBUG, "In DBnum_rows");
- if(result == NULL)
- {
- return 0;
- }
-// Order is important !
- rows = mysql_num_rows(result);
- if(rows == 0)
- {
- return 0;
- }
-
-// This is necessary to exclude situations like
-// atoi(DBget_field(result,0,0). This leads to coredump.
-//
-// This is required for empty results for count(*), etc
- if(DBget_field(result,0,0) == 0)
- {
- return 0;
- }
- zabbix_log(LOG_LEVEL_DEBUG, "Result of DBnum_rows [%d]", rows);
- return rows;
-#endif
-#ifdef HAVE_POSTGRESQL
- zabbix_log(LOG_LEVEL_DEBUG, "In DBnum_rows");
- return PQntuples(result);
-#endif
-#ifdef HAVE_ORACLE
- return sqlo_prows(result);
-#endif
-}
-*/
-
-/*
* Get function value.
*/
int DBget_function_result(double *result,char *functionid)
@@ -908,93 +793,6 @@ static void get_latest_event_status(zbx_uint64_t triggerid, int *prev_status, in
DBfree_result(result);
}
-/* Returns previous trigger value. If not value found, return TRIGGER_VALUE_FALSE */
-/*int DBget_prev_trigger_value(int triggerid)
-{
- int clock;
- int value;
-
- DB_RESULT result;
- DB_ROW row;
-
- zabbix_log(LOG_LEVEL_DEBUG,"In DBget_prev_trigger_value[%d]", triggerid);
-
- result = DBselect("select max(clock) from events where triggerid=%d",triggerid);
-
- row=DBfetch(result);
-
- if(!row || DBis_null(row[0])==SUCCEED)
- {
- zabbix_log(LOG_LEVEL_DEBUG, "Result for MAX is empty" );
- DBfree_result(result);
- return TRIGGER_VALUE_UNKNOWN;
- }
- clock=atoi(row[0]);
- DBfree_result(result);
-
- result=DBselect("select max(clock) from events where triggerid=%d and clock<%d",triggerid,clock);
- row=DBfetch(result);
-
- if(!row || DBis_null(row[0])==SUCCEED)
- {
- zabbix_log(LOG_LEVEL_DEBUG, "Result for MAX is empty" );
- DBfree_result(result);
- return TRIGGER_VALUE_FALSE;
- }
- clock=atoi(row[0]);
- DBfree_result(result);
-
- result = DBselect("select value from events where triggerid=%d and clock=%d",triggerid,clock);
- row=DBfetch(result);
-
- if(!row || DBis_null(row[0])==SUCCEED)
- {
- zabbix_log(LOG_LEVEL_DEBUG, "Result of SQL is empty");
- DBfree_result(result);
- return TRIGGER_VALUE_UNKNOWN;
- }
- value=atoi(row[0]);
- DBfree_result(result);
-
- return value;
-}*/
-
-/* SUCCEED if latest event with triggerid has this status */
-/* Rewrite required to simplify logic ?*/
-/*
-static int latest_event(int triggerid, int status)
-{
- char sql[MAX_STRING_LEN];
- DB_RESULT result;
- DB_ROW row;
- int ret = FAIL;
-
-
- zabbix_log(LOG_LEVEL_DEBUG,"In latest_event()");
-
- zbx_snprintf(sql,sizeof(sql),"select value from events where triggerid=%d order by clock desc",triggerid);
- zabbix_log(LOG_LEVEL_DEBUG,"SQL [%s]",sql);
- result = DBselectN(sql,1);
- row = DBfetch(result);
-
- if(!row || DBis_null(row[0])==SUCCEED)
- {
- zabbix_log(LOG_LEVEL_DEBUG, "Result for last is empty" );
- }
- else
- {
- if(atoi(row[0]) == status)
- {
- ret = SUCCEED;
- }
- }
-
- DBfree_result(result);
-
- return ret;
-}
-*/
-
/* SUCCEED if latest service alarm has this status */
/* Rewrite required to simplify logic ?*/
int latest_service_alarm(zbx_uint64_t serviceid, int status)
@@ -1036,36 +834,6 @@ int latest_service_alarm(zbx_uint64_t serviceid, int status)
return ret;
}
-/* Returns eventid or 0 */
-/*
-int add_event(int triggerid,int status,int clock,int *eventid)
-{
- *eventid=0;
-
- zabbix_log(LOG_LEVEL_DEBUG,"In add_event(%d,%d,%d)",triggerid, status, *eventid);
-
- if(latest_event(triggerid,status) == SUCCEED)
- {
- zabbix_log(LOG_LEVEL_DEBUG,"Alarm for triggerid [%d] status [%d] already exists",triggerid,status);
- return FAIL;
- }
-
-
- *eventid = DBinsert_id(
- DBexecute("insert into events(triggerid,clock,value) values(%d,%d,%d)", triggerid, clock, status),
- "events", "eventid");
-
- if(status == TRIGGER_VALUE_FALSE || status == TRIGGER_VALUE_TRUE)
- {
- DBexecute("update events set retries=3,error='Trigger changed its status. WIll not send repeats.' where triggerid=%d and repeats>0 and status=%d", triggerid, ALERT_STATUS_NOT_SENT);
- }
-
- zabbix_log(LOG_LEVEL_DEBUG,"End of add_event()");
-
- return SUCCEED;
-}
-*/
-
int DBadd_service_alarm(zbx_uint64_t serviceid,int status,int clock)
{
zabbix_log(LOG_LEVEL_DEBUG,"In add_service_alarm()");
@@ -1172,15 +940,18 @@ void update_triggers_status_to_unknown(zbx_uint64_t hostid,int clock,char *reaso
zabbix_log(LOG_LEVEL_DEBUG,"In update_triggers_status_to_unknown()");
-/* zbx_snprintf(sql,sizeof(sql),"select distinct t.triggerid from hosts h,items i,triggers t,functions f where f.triggerid=t.triggerid and f.itemid=i.itemid and h.hostid=i.hostid and h.hostid=%d and i.key_<>'%s'",hostid,SERVER_STATUS_KEY);*/
- result = DBselect("select distinct t.triggerid,t.value,t.comments from hosts h,items i,triggers t,functions f where f.triggerid=t.triggerid and f.itemid=i.itemid and h.hostid=i.hostid and h.hostid=" ZBX_FS_UI64 " and i.key_ not in ('%s','%s','%s')",hostid,SERVER_STATUS_KEY, SERVER_ICMPPING_KEY, SERVER_ICMPPINGSEC_KEY);
+ result = DBselect("select distinct t.triggerid,t.expression,t.description,t.status,t.priority,t.value,t.url,t.comments from hosts h,items i,triggers t,functions f where f.triggerid=t.triggerid and f.itemid=i.itemid and h.hostid=i.hostid and h.hostid=" ZBX_FS_UI64 " and i.key_ not in ('%s','%s','%s')",hostid,SERVER_STATUS_KEY, SERVER_ICMPPING_KEY, SERVER_ICMPPINGSEC_KEY);
while((row=DBfetch(result)))
{
ZBX_STR2UINT64(trigger.triggerid,row[0]);
-/* trigger.triggerid=atoi(row[0]);*/
- trigger.value=atoi(row[1]);
- strscpy(trigger.comments, row[2]);
+ strscpy(trigger.expression,row[1]);
+ strscpy(trigger.description,row[2]);
+ trigger.status = atoi(row[3]);
+ trigger.priority = atoi(row[4]);
+ trigger.value = atoi(row[5]);
+ trigger.url = row[6];
+ trigger.comments = row[7];
DBupdate_trigger_value(&trigger,TRIGGER_VALUE_UNKNOWN,clock,reason);
}
@@ -1337,13 +1108,18 @@ void DBupdate_triggers_status_after_restart(void)
now=time(NULL);
- result = DBselect("select distinct t.triggerid,t.value from hosts h,items i,triggers t,functions f where f.triggerid=t.triggerid and f.itemid=i.itemid and h.hostid=i.hostid and i.nextcheck+i.delay<%d and i.key_<>'%s' and h.status not in (%d,%d)",now,SERVER_STATUS_KEY, HOST_STATUS_DELETED, HOST_STATUS_TEMPLATE);
+ result = DBselect("select distinct t.triggerid,t.expression,t.description,t.status,t.priority,t.value,t.url,t.comments from hosts h,items i,triggers t,functions f where f.triggerid=t.triggerid and f.itemid=i.itemid and h.hostid=i.hostid and i.nextcheck+i.delay<%d and i.key_<>'%s' and h.status not in (%d,%d)",now,SERVER_STATUS_KEY, HOST_STATUS_DELETED, HOST_STATUS_TEMPLATE);
while((row=DBfetch(result)))
{
ZBX_STR2UINT64(trigger.triggerid,row[0]);
-/* trigger.triggerid=atoi(row[0]);*/
- trigger.value=atoi(row[1]);
+ strscpy(trigger.expression,row[1]);
+ strscpy(trigger.description,row[2]);
+ trigger.status = atoi(row[3]);
+ trigger.priority = atoi(row[4]);
+ trigger.value = atoi(row[5]);
+ trigger.url = row[6];
+ trigger.comments = row[7];
result2 = DBselect("select min(i.nextcheck+i.delay) from hosts h,items i,triggers t,functions f where f.triggerid=t.triggerid and f.itemid=i.itemid and h.hostid=i.hostid and i.nextcheck<>0 and t.triggerid=%d and i.type<>%d",trigger.triggerid,ITEM_TYPE_TRAPPER);
row2=DBfetch(result2);
@@ -1896,19 +1672,20 @@ int DBadd_alert(zbx_uint64_t actionid, zbx_uint64_t userid, zbx_uint64_t trigger
zabbix_log(LOG_LEVEL_DEBUG,"In add_alert(triggerid[%d])",triggerid);
now = time(NULL);
-/* Does not work on PostgreSQL */
-/* zbx_snprintf(sql,sizeof(sql),"insert into alerts (alertid,actionid,clock,mediatypeid,sendto,subject,message,status,retries) values (NULL,%d,%d,%d,'%s','%s','%s',0,0)",actionid,now,mediatypeid,sendto,subject,message);*/
size = strlen(sendto) * 3 / 2 + 1;
sendto_esc = zbx_malloc(size);
+ memset(sendto_esc, 0, size);
DBescape_string(sendto, sendto_esc, size);
size = strlen(subject) * 3 / 2 + 1;
subject_esc = zbx_malloc(size);
+ memset(subject_esc, 0, size);
DBescape_string(subject,subject_esc,size);
size = strlen(message) * 3 / 2 + 1;
message_esc = zbx_malloc(size);
+ memset(message_esc, 0, size);
DBescape_string(message,message_esc,size);
DBexecute("insert into alerts (alertid, actionid,triggerid,userid,clock,mediatypeid,sendto,subject,message,status,retries,maxrepeats,delay)"
@@ -1950,47 +1727,17 @@ void DBvacuum(void)
#endif
}
-/* Broken:
-void DBescape_string(char *from, char *to, int maxlen)
-{
- int i,ptr;
- char *f;
-
- ptr=0;
- f=(char *)strdup(from);
- for(i=0;f[i]!=0;i++)
- {
- if( (f[i]=='\'') || (f[i]=='\\'))
- {
- if(ptr>maxlen-1) break;
- to[ptr]='\\';
- if(ptr+1>maxlen-1) break;
- to[ptr+1]=f[i];
- ptr+=2;
- }
- else
- {
- if(ptr>maxlen-1) break;
- to[ptr]=f[i];
- ptr++;
- }
- }
- free(f);
-
- to[ptr]=0;
- to[maxlen-1]=0;
-}
-*/
-
-void DBescape_string(char *from, char *to, int maxlen)
+void DBescape_string(const char *from, char *to, int maxlen)
{
- int i,ptr;
+ register int i,ptr;
assert(to);
maxlen--;
for(i=0, ptr=0; from && from[i] && ptr < maxlen; i++)
{
+ if( from[i] == '\r' ) continue;
+
#ifdef HAVE_ORACLE
if( (from[i] == '\''))
{
@@ -2004,7 +1751,7 @@ void DBescape_string(char *from, char *to, int maxlen)
}
to[ptr++] = from[i];
}
- to[ptr]=0;
+ to[ptr] = '\0';
}
void DBget_item_from_db(DB_ITEM *item,DB_ROW row)
diff --git a/src/libs/zbxemail/email.c b/src/libs/zbxemail/email.c
index 4d745bdd..044903ce 100644
--- a/src/libs/zbxemail/email.c
+++ b/src/libs/zbxemail/email.c
@@ -48,7 +48,7 @@ int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,c
{
int s;
int i,e;
- char c[MAX_STRING_LEN];
+ char c[MAX_STRING_LEN], *cp = NULL;
struct hostent *hp;
char str_time[MAX_STRING_LEN];
@@ -81,15 +81,6 @@ int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,c
zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL3");
-/* if(hp==NULL)
- {
- zabbix_log(LOG_LEVEL_ERR, "Cannot get IP for mailserver [%s]",smtp_server);
- return FAIL;
- }
-
- servaddr_in.sin_addr.s_addr=((struct in_addr *)(hp->h_addr))->s_addr;
- servaddr_in.sin_port=htons(25);*/
-
s=socket(AF_INET,SOCK_STREAM,0);
zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL4");
if(s == -1)
@@ -115,8 +106,6 @@ int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,c
zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL5");
memset(c,0,MAX_STRING_LEN);
-/* i=sizeof(struct sockaddr_in);
- i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
i=read(s,c,MAX_STRING_LEN);
zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL6");
if(i == -1)
@@ -140,7 +129,6 @@ int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,c
{
memset(c,0,MAX_STRING_LEN);
zbx_snprintf(c,sizeof(c),"HELO %s\r\n",smtp_helo);
-/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
e=write(s,c,strlen(c));
zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL7");
if(e == -1)
@@ -153,8 +141,6 @@ int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,c
}
memset(c,0,MAX_STRING_LEN);
-/* i=sizeof(struct sockaddr_in);
- i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
i=read(s,c,MAX_STRING_LEN);
zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL8");
if(i == -1)
@@ -177,10 +163,8 @@ int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,c
memset(c,0,MAX_STRING_LEN);
- /* zbx_snprintf(c,sizeof(c),"MAIL FROM: %s\r\n",smtp_email); */
zbx_snprintf(c,sizeof(c),"MAIL FROM: <%s>\r\n",smtp_email);
-/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
e=write(s,c,strlen(c));
zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL9");
if(e == -1)
@@ -193,8 +177,6 @@ int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,c
}
memset(c,0,MAX_STRING_LEN);
-/* i=sizeof(struct sockaddr_in);
- i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
i=read(s,c,MAX_STRING_LEN);
zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL10");
if(i == -1)
@@ -216,7 +198,6 @@ int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,c
memset(c,0,MAX_STRING_LEN);
zbx_snprintf(c,sizeof(c),"RCPT TO: <%s>\r\n",mailto);
-/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
e=write(s,c,strlen(c));
zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL11");
if(e == -1)
@@ -228,8 +209,6 @@ int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,c
return FAIL;
}
memset(c,0,MAX_STRING_LEN);
-/* i=sizeof(struct sockaddr_in);
- i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
i=read(s,c,MAX_STRING_LEN);
zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL12");
if(i == -1)
@@ -252,7 +231,6 @@ int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,c
memset(c,0,MAX_STRING_LEN);
zbx_snprintf(c,sizeof(c),"DATA\r\n");
-/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
e=write(s,c,strlen(c));
zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL13");
if(e == -1)
@@ -264,8 +242,6 @@ int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,c
return FAIL;
}
memset(c,0,MAX_STRING_LEN);
-/* i=sizeof(struct sockaddr_in);
- i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
i=read(s,c,MAX_STRING_LEN);
zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL14");
if(i == -1)
@@ -289,11 +265,9 @@ int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,c
time(&email_time);
local_time = localtime(&email_time);
strftime( str_time, MAX_STRING_LEN, "%a, %d %b %Y %H:%M:%S %z", local_time );
-/* zbx_snprintf(c,sizeof(c),"Subject: %s\r\n%s",mailsubject, mailbody);*/
-/* zbx_snprintf(c,sizeof(c),"From:<%s>\r\nTo:<%s>\r\nSubject: %s\r\n\r\n%s",smtp_email,mailto,mailsubject, mailbody);*/
- zbx_snprintf(c,sizeof(c),"From:<%s>\r\nTo:<%s>\r\nDate: %s\r\nSubject: %s\r\n\r\n%s",smtp_email,mailto,str_time,mailsubject, mailbody);
-/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
- e=write(s,c,strlen(c));
+ cp = zbx_dsprintf(cp,"From:<%s>\r\nTo:<%s>\r\nDate: %s\r\nSubject: %s\r\n\r\n%s",smtp_email,mailto,str_time,mailsubject, mailbody);
+ e=write(s,cp,strlen(cp));
+ zbx_free(cp);
if(e == -1)
{
zabbix_log(LOG_LEVEL_DEBUG, "Error sending mail subject and body to mailserver [%s]", strerror(errno));
@@ -305,7 +279,6 @@ int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,c
memset(c,0,MAX_STRING_LEN);
zbx_snprintf(c,sizeof(c),"\r\n.\r\n");
-/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
e=write(s,c,strlen(c));
zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL15");
if(e == -1)
@@ -317,8 +290,6 @@ int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,c
return FAIL;
}
memset(c,0,MAX_STRING_LEN);
-/* i=sizeof(struct sockaddr_in);
- i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
i=read(s,c,MAX_STRING_LEN);
zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL16");
if(i == -1)
@@ -340,7 +311,6 @@ int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,c
memset(c,0,MAX_STRING_LEN);
zbx_snprintf(c,sizeof(c),"QUIT\r\n");
-/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
e=write(s,c,strlen(c));
zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL18");
if(e == -1)
diff --git a/src/libs/zbxlog/log.c b/src/libs/zbxlog/log.c
index 0453355d..0be91741 100644
--- a/src/libs/zbxlog/log.c
+++ b/src/libs/zbxlog/log.c
@@ -195,6 +195,8 @@ void zabbix_log(int level, const char *fmt, ...)
struct stat buf;
+ static size_t old_size = 0;
+
char filename_old[MAX_STRING_LEN];
#if defined(_WINDOWS)
@@ -252,8 +254,14 @@ void zabbix_log(int level, const char *fmt, ...)
{
zbx_error("Can't rename log file [%s] to [%s] [%s]", log_filename, filename_old, strerror(errno));
}
+ }
+
+ if(old_size > buf.st_size)
+ {
redirect_std(log_filename);
}
+
+ old_size = buf.st_size;
}
}
diff --git a/src/libs/zbxsys/mutexs.c b/src/libs/zbxsys/mutexs.c
index c6c518ee..c392e38d 100644
--- a/src/libs/zbxsys/mutexs.c
+++ b/src/libs/zbxsys/mutexs.c
@@ -173,6 +173,8 @@ int zbx_mutex_lock(ZBX_MUTEX *mutex)
struct sembuf sem_lock = { *mutex, -1, 0 };
+ if(!*mutex) return ZBX_MUTEX_OK;
+
if (-1 == (semop(ZBX_SEM_LIST_ID, &sem_lock, 1)))
{
zbx_error("Lock failed [%s]", strerror(errno));
@@ -216,6 +218,8 @@ int zbx_mutex_unlock(ZBX_MUTEX *mutex)
struct sembuf sem_unlock = { *mutex, 1, 0};
+ if(!*mutex) return ZBX_MUTEX_OK;
+
if ((semop(ZBX_SEM_LIST_ID, &sem_unlock, 1)) == -1)
{
zbx_error("Unlock failed [%s]", strerror(errno));
diff --git a/src/libs/zbxsysinfo/aix/proc.c b/src/libs/zbxsysinfo/aix/proc.c
index 55bd280f..eadf19c2 100644
--- a/src/libs/zbxsysinfo/aix/proc.c
+++ b/src/libs/zbxsysinfo/aix/proc.c
@@ -27,18 +27,6 @@
#define DO_MIN 2
#define DO_AVG 3
-
-#ifndef HAVE_SYS_PROCFS_H
- extern int getprocs(
- struct procsinfo *ProcessBuffer,
- int ProcessSize,
- struct fdsinfo *FileBuffer,
- int FileSize,
- pid_t *IndexPointer,
- int Count
- );
-#endif /* ndef HAVE_SYS_PROCFS_H */
-
int PROC_MEMORY(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{ /* usage: <function name>[ <process name>, <user name>, <mode>, <command> ] */
diff --git a/src/zabbix_sender/zabbix_sender.c b/src/zabbix_sender/zabbix_sender.c
index fb5dd918..e0dd611e 100644
--- a/src/zabbix_sender/zabbix_sender.c
+++ b/src/zabbix_sender/zabbix_sender.c
@@ -43,7 +43,7 @@
char *progname = NULL;
char title_message[] = "ZABBIX send";
-char usage_message[] = "[-vh] [-z <zabbix_server>] [-p <port>] [-s <host>] [-k <metric>] [-o <value>] [-i <input_file>]";
+char usage_message[] = "[-vh] {-zpsko | -i}";
#ifdef HAVE_GETOPT_LONG
char *help_message[] = {
@@ -88,11 +88,11 @@ struct zbx_option longopts[] =
{0,0,0,0}
};
-void signal_handler( int sig )
+static void zbx_sender_signal_handler( int sig )
{
if( SIGALRM == sig )
{
- signal( SIGALRM, signal_handler );
+ signal( SIGALRM, zbx_sender_signal_handler );
fprintf(stderr,"Timeout while executing operation.\n");
}
@@ -158,10 +158,10 @@ int main(int argc, char **argv)
progname = argv[0];
- signal( SIGINT, signal_handler );
- signal( SIGQUIT, signal_handler );
- signal( SIGTERM, signal_handler );
- signal( SIGALRM, signal_handler );
+ signal( SIGINT, zbx_sender_signal_handler );
+ signal( SIGQUIT, zbx_sender_signal_handler );
+ signal( SIGTERM, zbx_sender_signal_handler );
+ signal( SIGALRM, zbx_sender_signal_handler );
while ((ch = zbx_getopt_long(argc, argv, "z:p:s:k:o:i:hv", longopts, NULL)) != EOF)
{
diff --git a/src/zabbix_server/actions.c b/src/zabbix_server/actions.c
index 189ebf25..1e9758c4 100644
--- a/src/zabbix_server/actions.c
+++ b/src/zabbix_server/actions.c
@@ -80,10 +80,11 @@ static void send_to_user_medias(DB_EVENT *event,DB_ACTION *action, zbx_uint64_t
while((row=DBfetch(result)))
{
ZBX_STR2UINT64(media.mediatypeid, row[0]);
- media.sendto=row[1];
- media.active=atoi(row[2]);
- media.severity=atoi(row[3]);
- media.period=row[4];
+
+ media.sendto = row[1];
+ media.active = atoi(row[2]);
+ media.severity = atoi(row[3]);
+ media.period = row[4];
zabbix_log( LOG_LEVEL_DEBUG, "Trigger severity [%d] Media severity [%d] Period [%s]",event->trigger_priority, media.severity, media.period);
if(((1<<event->trigger_priority)&media.severity)==0)
@@ -370,8 +371,8 @@ static int check_action_condition(DB_EVENT *event, DB_CONDITION *condition)
zbx_uint64_t hostid;
zbx_uint64_t condition_value;
- char tmp_str[MAX_STRING_LEN];
-
+ char *tmp_str = NULL;
+
int ret = FAIL;
zabbix_log( LOG_LEVEL_DEBUG, "In check_action_condition [actionid:" ZBX_FS_UI64 ",conditionid:" ZBX_FS_UI64 ",cond.value:%s]", condition->actionid, condition->conditionid, condition->value);
@@ -472,9 +473,9 @@ static int check_action_condition(DB_EVENT *event, DB_CONDITION *condition)
}
else if(condition->conditiontype == CONDITION_TYPE_TRIGGER_NAME)
{
- zbx_snprintf(tmp_str, sizeof(tmp_str), "%s",event->trigger_description);
+ tmp_str = zbx_dsprintf(tmp_str, "%s", event->trigger_description);
- substitute_simple_macros(event, NULL, tmp_str, sizeof(tmp_str), MACRO_TYPE_TRIGGER_DESCRIPTION);
+ substitute_simple_macros(event, NULL, &tmp_str, MACRO_TYPE_TRIGGER_DESCRIPTION);
if(condition->operator == CONDITION_OPERATOR_LIKE)
{
@@ -495,6 +496,7 @@ static int check_action_condition(DB_EVENT *event, DB_CONDITION *condition)
zabbix_log( LOG_LEVEL_ERR, "Unsupported operator [%d] for condition id [" ZBX_FS_UI64 "]",
condition->operator, condition->conditionid);
}
+ zbx_free(tmp_str);
}
else if(condition->conditiontype == CONDITION_TYPE_TRIGGER_SEVERITY)
{
@@ -711,36 +713,29 @@ void apply_actions(DB_EVENT *event)
if(check_action_conditions(event, action.actionid) == SUCCEED)
{
zabbix_log( LOG_LEVEL_WARNING, "Conditions match our trigger. Do apply actions.");
+
ZBX_STR2UINT64(action.userid, row[1]);
- strscpy(action.subject,row[2]);
-
- action.message_len = strlen(row[3]) * 3 / 2 + 1;
- action.message = zbx_malloc(action.message_len);
+ action.subject = strdup(row[2]);
+ action.message = strdup(row[3]);
+ action.scripts = strdup(row[7]);
- strnscpy(action.message,row[3], action.message_len);
-
action.recipient = atoi(row[4]);
action.maxrepeats = atoi(row[5]);
action.repeatdelay = atoi(row[6]);
- strscpy(action.scripts,row[7]);
action.actiontype = atoi(row[8]);
- substitute_macros(event, &action, action.message, action.message_len);
- substitute_macros(event, &action, action.subject, sizeof(action.subject));
+ substitute_macros(event, &action, &action.message);
+ substitute_macros(event, &action, &action.subject);
-zabbix_log(LOG_LEVEL_CRIT,"Original [%d]: %s", strlen(row[3]), row[3]); // TMP!!!
-zabbix_log(LOG_LEVEL_CRIT,"Substituted [%d,%d]: %s", strlen(action.message), action.message_len, action.message); // TMP!!!
-
if(action.actiontype == ACTION_TYPE_MESSAGE)
send_to_user(event,&action);
else
run_commands(event,&action);
-/* zbx_snprintf(sql,sizeof(sql),"update actions set nextcheck=%d where actionid=%d",now+action.delay,action.actionid);
- DBexecute(sql);*/
-
zbx_free(action.message);
+ zbx_free(action.subject);
+ zbx_free(action.scripts);
}
else
{
diff --git a/src/zabbix_server/evalfunc.c b/src/zabbix_server/evalfunc.c
index 98cf0339..7e4226bb 100644
--- a/src/zabbix_server/evalfunc.c
+++ b/src/zabbix_server/evalfunc.c
@@ -1349,7 +1349,7 @@ int replace_value_by_map(char *value, zbx_uint64_t valuemapid)
zbx_snprintf(value, MAX_STRING_LEN, "%s (%s)", new_value, or_value);
- zabbix_log(LOG_LEVEL_DEBUG, "Value: $s", value);
+ zabbix_log(LOG_LEVEL_DEBUG, "Value: %s", value);
return SUCCEED;
}
diff --git a/src/zabbix_server/events.c b/src/zabbix_server/events.c
index c42c23c3..08a1ed5d 100644
--- a/src/zabbix_server/events.c
+++ b/src/zabbix_server/events.c
@@ -59,7 +59,7 @@
* *
* Author: Alexei Vladishev *
* *
- * Comments: *
+ * Comments: use 'free_trigger_info' function to clear allocated memory *
* *
******************************************************************************/
static void add_trigger_info(DB_EVENT *event)
@@ -69,20 +69,18 @@ static void add_trigger_info(DB_EVENT *event)
if(event->triggerid == 0) return;
- result = DBselect("select description,priority,comments,url from triggers where triggerid=" ZBX_FS_UI64,
- event->triggerid);
+ result = DBselect("select description,priority,comments,url from triggers where triggerid=" ZBX_FS_UI64,event->triggerid);
row = DBfetch(result);
-
event->trigger_description[0]=0;
- event->trigger_comments[0]=0;
- event->trigger_url[0]=0;
+ zbx_free(event->trigger_comments);
+ zbx_free(event->trigger_url);
if(row)
{
strscpy(event->trigger_description, row[0]);
event->trigger_priority = atoi(row[1]);
- strscpy(event->trigger_comments, row[2]);
- strscpy(event->trigger_url, row[3]);
+ event->trigger_comments = strdup(row[2]);
+ event->trigger_url = strdup(row[3]);
}
DBfree_result(result);
@@ -90,6 +88,27 @@ static void add_trigger_info(DB_EVENT *event)
/******************************************************************************
* *
+ * Function: free_trigger_info *
+ * *
+ * Purpose: clean allocated memory by function 'add_trigger_info' *
+ * *
+ * Parameters: event - event data (event.triggerid) *
+ * *
+ * Return value: *
+ * *
+ * Author: Eugene Grigorjev *
+ * *
+ * Comments: *
+ * *
+ ******************************************************************************/
+static void free_trigger_info(DB_EVENT *event)
+{
+ zbx_free(event->trigger_url);
+ zbx_free(event->trigger_comments);
+}
+
+/******************************************************************************
+ * *
* Function: process_event *
* *
* Purpose: process new event *
@@ -128,7 +147,6 @@ int process_event(DB_EVENT *event)
if(event->value == TRIGGER_VALUE_TRUE)
{
-// update_services(trigger->triggerid, trigger->priority);
update_services(event->triggerid, event->trigger_priority);
}
else
@@ -136,6 +154,8 @@ int process_event(DB_EVENT *event)
update_services(event->triggerid, 0);
}
+ free_trigger_info(event);
+
zabbix_log(LOG_LEVEL_DEBUG,"End of add_event()");
return SUCCEED;
diff --git a/src/zabbix_server/events.h b/src/zabbix_server/events.h
index 6c1afafb..b56d9f77 100644
--- a/src/zabbix_server/events.h
+++ b/src/zabbix_server/events.h
@@ -24,8 +24,6 @@
#include "common.h"
#include "db.h"
-extern int CONFIG_NODEID;
-
int process_event(DB_EVENT *event);
#endif
diff --git a/src/zabbix_server/expression.c b/src/zabbix_server/expression.c
index 9036ee4a..c52aeedc 100644
--- a/src/zabbix_server/expression.c
+++ b/src/zabbix_server/expression.c
@@ -549,7 +549,6 @@ int evaluate(int *result,char *exp, char *error, int maxerrlen)
* Parameters: trigger - trigger structure *
* action - action structure (NULL if uncnown) *
* data - data string *
- * data_max_len - max length of data string,include '\0' *
* *
* Return value: *
* *
@@ -588,7 +587,7 @@ int evaluate(int *result,char *exp, char *error, int maxerrlen)
#define STR_UNKNOWN_VARIABLE "*UNKNOWN*"
-void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, int data_max_len, int macro_type)
+void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char **data, int macro_type)
{
char
@@ -596,11 +595,8 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
*pr = NULL,
*str_out = NULL,
*replace_to = NULL;
- int
- replace_to_len,
- str_out_len,
- str_out_fill,
- var_len;
+
+ int var_len;
time_t now;
struct tm *tm;
@@ -608,24 +604,20 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
DB_RESULT result;
DB_ROW row;
- zabbix_log(LOG_LEVEL_DEBUG, "In substitute_simple_macros [%s]",data);
+ if(!data || !*data) return;
+
+ zabbix_log(LOG_LEVEL_DEBUG, "In substitute_simple_macros [%s]",*data);
- replace_to_len = strlen(data);
- replace_to = zbx_malloc(replace_to_len);
+ if('\0' == *data[0]) return;
- str_out_fill = 0;
- str_out_len = strlen(data) * 3 / 2 + 1;
- str_out = zbx_malloc(str_out_len + 1);
- *str_out = '\0';
-
- pl = data;
- while((pr = strchr(pl, '{')) && str_out_fill < str_out_len)
+ pl = *data;
+ while((pr = strchr(pl, '{')))
{
pr[0] = '\0';
- str_out_fill = zbx_strlcat(str_out, pl, str_out_len);
+ str_out = zbx_strdcat(str_out, pl);
pr[0] = '{';
- zbx_snprintf(replace_to, replace_to_len, "{");
+ replace_to = zbx_dsprintf(replace_to, "{");
var_len = 1;
if(macro_type & (MACRO_TYPE_MESSAGE_SUBJECT | MACRO_TYPE_MESSAGE_BODY) &&
@@ -633,15 +625,16 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
{
var_len = strlen(MVAR_TRIGGER_NAME);
- zbx_snprintf(replace_to, replace_to_len, "%s", event->trigger_description);
- substitute_simple_macros(event, action, replace_to, replace_to_len, MACRO_TYPE_TRIGGER_DESCRIPTION);
+ replace_to = zbx_dsprintf(replace_to, "%s", event->trigger_description);
+
+ substitute_simple_macros(event, action, &replace_to, MACRO_TYPE_TRIGGER_DESCRIPTION);
}
else if(macro_type & (MACRO_TYPE_MESSAGE_SUBJECT | MACRO_TYPE_MESSAGE_BODY) &&
strncmp(pr, MVAR_TRIGGER_COMMENT, strlen(MVAR_TRIGGER_COMMENT)) == 0)
{
var_len = strlen(MVAR_TRIGGER_COMMENT);
- zbx_snprintf(replace_to, replace_to_len, "%s", event->trigger_comments);
+ replace_to = zbx_dsprintf(replace_to, "%s", event->trigger_comments);
}
else if(macro_type & (MACRO_TYPE_MESSAGE_SUBJECT | MACRO_TYPE_MESSAGE_BODY) &&
strncmp(pr, MVAR_PROFILE_DEVICETYPE, strlen(MVAR_PROFILE_DEVICETYPE)) == 0)
@@ -659,11 +652,11 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
zabbix_log( LOG_LEVEL_ERR, "No PROFILE.DEVECETYPE in substitute_simple_macros. Triggerid [%d]", event->triggerid);
zabbix_syslog("No PROFILE.DEVECETYPE in substitute_simple_macros. Triggerid [%d]", event->triggerid);
- zbx_snprintf(replace_to, replace_to_len, "%s", STR_UNKNOWN_VARIABLE);
+ replace_to = zbx_dsprintf(replace_to, "%s", STR_UNKNOWN_VARIABLE);
}
else
{
- zbx_snprintf(replace_to, replace_to_len, "%s", row[0]);
+ replace_to = zbx_dsprintf(replace_to, "%s", row[0]);
}
DBfree_result(result);
}
@@ -683,11 +676,11 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
zabbix_log( LOG_LEVEL_ERR, "No PROFILE.NAME in substitute_simple_macros. Triggerid [%d]", event->triggerid);
zabbix_syslog("No PROFILE.NAME in substitute_simple_macros. Triggerid [%d]", event->triggerid);
- zbx_snprintf(replace_to, replace_to_len, "%s", STR_UNKNOWN_VARIABLE);
+ replace_to = zbx_dsprintf(replace_to, "%s", STR_UNKNOWN_VARIABLE);
}
else
{
- zbx_snprintf(replace_to, replace_to_len, "%s", row[0]);
+ replace_to = zbx_dsprintf(replace_to, "%s", row[0]);
}
DBfree_result(result);
}
@@ -707,11 +700,11 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
zabbix_log( LOG_LEVEL_ERR, "No PROFILE.OS in substitute_simple_macros. Triggerid [%d]", event->triggerid);
zabbix_syslog("No PROFILE.OS in substitute_simple_macros. Triggerid [%d]", event->triggerid);
- zbx_snprintf(replace_to, replace_to_len, "%s", STR_UNKNOWN_VARIABLE);
+ replace_to = zbx_dsprintf(replace_to, "%s", STR_UNKNOWN_VARIABLE);
}
else
{
- zbx_snprintf(replace_to, replace_to_len, "%s", row[0]);
+ replace_to = zbx_dsprintf(replace_to, "%s", row[0]);
}
DBfree_result(result);
}
@@ -731,11 +724,11 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
zabbix_log( LOG_LEVEL_ERR, "No PROFILE.SERIALNO in substitute_simple_macros. Triggerid [%d]", event->triggerid);
zabbix_syslog("No PROFILE.SERIALNO in substitute_simple_macros. Triggerid [%d]", event->triggerid);
- zbx_snprintf(replace_to, replace_to_len, "%s", STR_UNKNOWN_VARIABLE);
+ replace_to = zbx_dsprintf(replace_to, "%s", STR_UNKNOWN_VARIABLE);
}
else
{
- zbx_snprintf(replace_to, replace_to_len, "%s", row[0]);
+ replace_to = zbx_dsprintf(replace_to, "%s", row[0]);
}
DBfree_result(result);
}
@@ -755,11 +748,11 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
zabbix_log( LOG_LEVEL_ERR, "No PROFILE.TAG in substitute_simple_macros. Triggerid [%d]", event->triggerid);
zabbix_syslog("No PROFILE.TAG in substitute_simple_macros. Triggerid [%d]", event->triggerid);
- zbx_snprintf(replace_to, replace_to_len, "%s", STR_UNKNOWN_VARIABLE);
+ replace_to = zbx_dsprintf(replace_to, "%s", STR_UNKNOWN_VARIABLE);
}
else
{
- zbx_snprintf(replace_to, replace_to_len, "%s", row[0]);
+ replace_to = zbx_dsprintf(replace_to, "%s", row[0]);
}
DBfree_result(result);
}
@@ -779,11 +772,11 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
zabbix_log( LOG_LEVEL_ERR, "No PROFILE.MACADDRESS in substitute_simple_macros. Triggerid [%d]", event->triggerid);
zabbix_syslog("No PROFILE.MACADDRESS in substitute_simple_macros. Triggerid [%d]", event->triggerid);
- zbx_snprintf(replace_to, replace_to_len, "%s", STR_UNKNOWN_VARIABLE);
+ replace_to = zbx_dsprintf(replace_to, "%s", STR_UNKNOWN_VARIABLE);
}
else
{
- zbx_snprintf(replace_to, replace_to_len, "%s", row[0]);
+ replace_to = zbx_dsprintf(replace_to, "%s", row[0]);
}
DBfree_result(result);
}
@@ -803,11 +796,11 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
zabbix_log( LOG_LEVEL_ERR, "No PROFILE.HARDWARE in substitute_simple_macros. Triggerid [%d]", event->triggerid);
zabbix_syslog("No PROFILE.HARDWARE in substitute_simple_macros. Triggerid [%d]", event->triggerid);
- zbx_snprintf(replace_to, replace_to_len, "%s", STR_UNKNOWN_VARIABLE);
+ replace_to = zbx_dsprintf(replace_to, "%s", STR_UNKNOWN_VARIABLE);
}
else
{
- zbx_snprintf(replace_to, replace_to_len, "%s", row[0]);
+ replace_to = zbx_dsprintf(replace_to, "%s", row[0]);
}
DBfree_result(result);
}
@@ -827,11 +820,11 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
zabbix_log( LOG_LEVEL_ERR, "No PROFILE.SOFTWARE in substitute_simple_macros. Triggerid [%d]", event->triggerid);
zabbix_syslog("No PROFILE.SOFTWARE in substitute_simple_macros. Triggerid [%d]", event->triggerid);
- zbx_snprintf(replace_to, replace_to_len, "%s", STR_UNKNOWN_VARIABLE);
+ replace_to = zbx_dsprintf(replace_to, "%s", STR_UNKNOWN_VARIABLE);
}
else
{
- zbx_snprintf(replace_to, replace_to_len, "%s", row[0]);
+ replace_to = zbx_dsprintf(replace_to, "%s", row[0]);
}
DBfree_result(result);
}
@@ -851,11 +844,11 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
zabbix_log( LOG_LEVEL_ERR, "No PROFILE.CONTACT in substitute_simple_macros. Triggerid [%d]", event->triggerid);
zabbix_syslog("No PROFILE.CONTACT in substitute_simple_macros. Triggerid [%d]", event->triggerid);
- zbx_snprintf(replace_to, replace_to_len, "%s", STR_UNKNOWN_VARIABLE);
+ replace_to = zbx_dsprintf(replace_to, "%s", STR_UNKNOWN_VARIABLE);
}
else
{
- zbx_snprintf(replace_to, replace_to_len, "%s", row[0]);
+ replace_to = zbx_dsprintf(replace_to, "%s", row[0]);
}
DBfree_result(result);
}
@@ -875,11 +868,11 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
zabbix_log( LOG_LEVEL_ERR, "No PROFILE.LOCATION in substitute_simple_macros. Triggerid [%d]", event->triggerid);
zabbix_syslog("No PROFILE.LOCATION in substitute_simple_macros. Triggerid [%d]", event->triggerid);
- zbx_snprintf(replace_to, replace_to_len, "%s", STR_UNKNOWN_VARIABLE);
+ replace_to = zbx_dsprintf(replace_to, "%s", STR_UNKNOWN_VARIABLE);
}
else
{
- zbx_snprintf(replace_to, replace_to_len, "%s", row[0]);
+ replace_to = zbx_dsprintf(replace_to, "%s", row[0]);
}
DBfree_result(result);
}
@@ -899,11 +892,11 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
zabbix_log( LOG_LEVEL_ERR, "No PROFILE.NOTES in substitute_simple_macros. Triggerid [%d]", event->triggerid);
zabbix_syslog("No PROFILE.NOTES in substitute_simple_macros. Triggerid [%d]", event->triggerid);
- zbx_snprintf(replace_to, replace_to_len, "%s", STR_UNKNOWN_VARIABLE);
+ replace_to = zbx_dsprintf(replace_to, "%s", STR_UNKNOWN_VARIABLE);
}
else
{
- zbx_snprintf(replace_to, replace_to_len, "%s", row[0]);
+ replace_to = zbx_dsprintf(replace_to, "%s", row[0]);
}
DBfree_result(result);
}
@@ -925,11 +918,11 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
zabbix_syslog("No hostname in substitute_simple_macros. Triggerid [" ZBX_FS_UI64 "]",
event->triggerid);
- zbx_snprintf(replace_to, replace_to_len, "%s", STR_UNKNOWN_VARIABLE);
+ replace_to = zbx_dsprintf(replace_to, "%s", STR_UNKNOWN_VARIABLE);
}
else
{
- zbx_snprintf(replace_to, replace_to_len, "%s", row[0]);
+ replace_to = zbx_dsprintf(replace_to, "%s", row[0]);
}
DBfree_result(result);
}
@@ -950,12 +943,12 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
event->triggerid);
zabbix_syslog("No ITEM.NAME in substitute_simple_macros. Triggerid [" ZBX_FS_UI64 "]",
event->triggerid);
- /* remove variable */
- *replace_to = '\0';
+
+ replace_to = zbx_dsprintf(replace_to, STR_UNKNOWN_VARIABLE);
}
else
{
- zbx_snprintf(replace_to, replace_to_len, "%s", row[0]);
+ replace_to = zbx_dsprintf(replace_to, "%s", row[0]);
}
DBfree_result(result);
@@ -977,12 +970,12 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
event->triggerid);
zabbix_syslog("No TRIGGER.KEY in substitute_simple_macros. Triggerid [" ZBX_FS_UI64 "]",
event->triggerid);
- /* remove variable */
- *replace_to = '\0';
+
+ replace_to = zbx_dsprintf(replace_to, STR_UNKNOWN_VARIABLE);
}
else
{
- zbx_snprintf(replace_to, replace_to_len, "%s", row[0]);
+ replace_to = zbx_dsprintf(replace_to, "%s", row[0]);
}
DBfree_result(result);
@@ -1005,11 +998,11 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
zabbix_syslog("No hostname in substitute_simple_macros. Triggerid [" ZBX_FS_UI64 "]",
event->triggerid);
- zbx_snprintf(replace_to, replace_to_len, "%s", STR_UNKNOWN_VARIABLE);
+ replace_to = zbx_dsprintf(replace_to, "%s", STR_UNKNOWN_VARIABLE);
}
else
{
- zbx_snprintf(replace_to, replace_to_len, "%s", row[0]);
+ replace_to = zbx_dsprintf(replace_to, "%s", row[0]);
}
DBfree_result(result);
}
@@ -1020,7 +1013,7 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
now = time(NULL);
tm = localtime(&now);
- zbx_snprintf(replace_to, replace_to_len-1, "%.4d.%.2d.%.2d", tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday);
+ replace_to = zbx_dsprintf(replace_to, "%.4d.%.2d.%.2d", tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday);
}
else if(macro_type & (MACRO_TYPE_MESSAGE_SUBJECT | MACRO_TYPE_MESSAGE_BODY)&&
strncmp(pr, MVAR_TIME, strlen(MVAR_TIME)) == 0)
@@ -1029,7 +1022,7 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
now = time(NULL);
tm = localtime(&now);
- zbx_snprintf(replace_to, replace_to_len, "%.2d:%.2d:%.2d",tm->tm_hour,tm->tm_min,tm->tm_sec);
+ replace_to = zbx_dsprintf(replace_to, "%.2d:%.2d:%.2d",tm->tm_hour,tm->tm_min,tm->tm_sec);
}
else if(macro_type & (MACRO_TYPE_MESSAGE_SUBJECT | MACRO_TYPE_MESSAGE_BODY) &&
@@ -1038,10 +1031,8 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
/* NOTE: if you make changes for this bloc, don't forgot MVAR_TRIGGER_STATUS_OLD block */
var_len = strlen(MVAR_TRIGGER_STATUS);
- if(event->value == TRIGGER_VALUE_TRUE)
- zbx_snprintf(replace_to, replace_to_len, "OFF");
- else
- zbx_snprintf(replace_to, replace_to_len, "ON");
+ replace_to = zbx_dsprintf(replace_to, "%s",
+ event->value == TRIGGER_VALUE_TRUE ? "OFF" : "ON");
}
else if(macro_type & (MACRO_TYPE_MESSAGE_SUBJECT | MACRO_TYPE_MESSAGE_BODY) &&
strncmp(pr, MVAR_TRIGGER_STATUS_OLD, strlen(MVAR_TRIGGER_STATUS_OLD)) == 0)
@@ -1049,10 +1040,8 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
/* NOTE: if you make changes for this bloc, don't forgot MVAR_TRIGGER_STATUS block */
var_len = strlen(MVAR_TRIGGER_STATUS_OLD);
- if(event->value == TRIGGER_VALUE_TRUE)
- zbx_snprintf(replace_to, replace_to_len, "OFF");
- else
- zbx_snprintf(replace_to, replace_to_len, "ON");
+ replace_to = zbx_dsprintf(replace_to, "%s",
+ event->value == TRIGGER_VALUE_TRUE ? "OFF" : "ON");
}
else if(macro_type & (MACRO_TYPE_MESSAGE_SUBJECT | MACRO_TYPE_MESSAGE_BODY) &&
strncmp(pr, MVAR_TRIGGER_ID, strlen(MVAR_TRIGGER_ID)) == 0)
@@ -1060,7 +1049,7 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
/* NOTE: if you make changes for this bloc, don't forgot MVAR_TRIGGER_STATUS block */
var_len = strlen(MVAR_TRIGGER_ID);
- zbx_snprintf(replace_to, replace_to_len, ZBX_FS_UI64, event->triggerid);
+ replace_to = zbx_dsprintf(replace_to, ZBX_FS_UI64, event->triggerid);
}
else if(macro_type & (MACRO_TYPE_MESSAGE_SUBJECT | MACRO_TYPE_MESSAGE_BODY) &&
strncmp(pr, MVAR_TRIGGER_URL, strlen(MVAR_TRIGGER_URL)) == 0)
@@ -1068,7 +1057,7 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
/* NOTE: if you make changes for this bloc, don't forgot MVAR_TRIGGER_STATUS block */
var_len = strlen(MVAR_TRIGGER_URL);
- zbx_snprintf(replace_to, replace_to_len, "%s", event->trigger_url);
+ replace_to = zbx_dsprintf(replace_to, "%s", event->trigger_url);
}
else if(macro_type & (MACRO_TYPE_MESSAGE_SUBJECT | MACRO_TYPE_MESSAGE_BODY) &&
strncmp(pr, MVAR_EVENT_ID, strlen(MVAR_EVENT_ID)) == 0)
@@ -1076,33 +1065,34 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
/* NOTE: if you make changes for this bloc, don't forgot MVAR_TRIGGER_STATUS block */
var_len = strlen(MVAR_EVENT_ID);
- zbx_snprintf(replace_to, replace_to_len, ZBX_FS_UI64, event->eventid);
+ replace_to = zbx_dsprintf(replace_to, ZBX_FS_UI64, event->eventid);
}
else if(macro_type & (MACRO_TYPE_MESSAGE_SUBJECT | MACRO_TYPE_MESSAGE_BODY) &&
strncmp(pr, MVAR_TRIGGER_SEVERITY, strlen(MVAR_TRIGGER_SEVERITY)) == 0)
{
var_len = strlen(MVAR_TRIGGER_SEVERITY);
- if(event->trigger_priority == 0) zbx_snprintf(replace_to, replace_to_len, "Not classified");
- else if(event->trigger_priority == 1) zbx_snprintf(replace_to, replace_to_len, "Information");
- else if(event->trigger_priority == 2) zbx_snprintf(replace_to, replace_to_len, "Warning");
- else if(event->trigger_priority == 3) zbx_snprintf(replace_to, replace_to_len, "Average");
- else if(event->trigger_priority == 4) zbx_snprintf(replace_to, replace_to_len, "High");
- else if(event->trigger_priority == 5) zbx_snprintf(replace_to, replace_to_len, "Disaster");
- else zbx_snprintf(replace_to, replace_to_len, "Unknown");
+ if(event->trigger_priority == 0) replace_to = zbx_dsprintf(replace_to, "Not classified");
+ else if(event->trigger_priority == 1) replace_to = zbx_dsprintf(replace_to, "Information");
+ else if(event->trigger_priority == 2) replace_to = zbx_dsprintf(replace_to, "Warning");
+ else if(event->trigger_priority == 3) replace_to = zbx_dsprintf(replace_to, "Average");
+ else if(event->trigger_priority == 4) replace_to = zbx_dsprintf(replace_to, "High");
+ else if(event->trigger_priority == 5) replace_to = zbx_dsprintf(replace_to, "Disaster");
+ else replace_to = zbx_dsprintf(replace_to, "Unknown");
}
- str_out_fill = zbx_strlcat(str_out, replace_to, str_out_len);
+ str_out = zbx_strdcat(str_out, replace_to);
pl = pr + var_len;
+
+ zbx_free(replace_to);
}
- str_out_fill = zbx_strlcat(str_out, pl, str_out_len);
+ str_out = zbx_strdcat(str_out, pl);
- zbx_snprintf(data, data_max_len, "%s", str_out);
+ zbx_free(*data);
- zbx_free(str_out);
- zbx_free(replace_to);
+ *data = str_out;
- zabbix_log( LOG_LEVEL_DEBUG, "Result expression [%s]", data );
+ zabbix_log( LOG_LEVEL_DEBUG, "Result expression [%s]", *data );
}
/******************************************************************************
@@ -1113,7 +1103,6 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
* *
* Parameters: trigger - trigger structure *
* action - action structure *
- * data_max_len - max length of data string,include '\0' *
* data - data string *
* *
* Return value: *
@@ -1123,7 +1112,7 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in
* Comments: example: "{127.0.0.1:system[procload].last(0)}" to "1.34" *
* *
******************************************************************************/
-void substitute_macros(DB_EVENT *event, DB_ACTION *action, char *data, int data_max_len)
+void substitute_macros(DB_EVENT *event, DB_ACTION *action, char **data)
{
char
*str_out = NULL,
@@ -1139,26 +1128,16 @@ void substitute_macros(DB_EVENT *event, DB_ACTION *action, char *data, int data_
function[MAX_STRING_LEN],
parameter[MAX_STRING_LEN];
- int
- replace_to_len,
- str_out_len,
- str_out_fill,
- var_len;
+ if(!data || !*data) return;
- zabbix_log(LOG_LEVEL_DEBUG, "In substitute_macros([%s])",data);
-
- substitute_simple_macros(event, action, data, data_max_len, MACRO_TYPE_MESSAGE_SUBJECT | MACRO_TYPE_MESSAGE_BODY);
-
- replace_to_len = strlen(data);
- replace_to = zbx_malloc(replace_to_len);
-
- str_out_fill = 0;
- str_out_len = strlen(data) * 3 / 2 + 1;
- str_out = zbx_malloc(str_out_len + 1);
- *str_out = '\0';
+ zabbix_log(LOG_LEVEL_DEBUG, "In substitute_macros([%s])",*data);
+
+ if('\0' == *data[0]) return;
- pl = data;
- while((pr = strchr(pl, '{')) && str_out_fill < str_out_len)
+ substitute_simple_macros(event, action, data, MACRO_TYPE_MESSAGE_SUBJECT | MACRO_TYPE_MESSAGE_BODY);
+
+ pl = *data;
+ while((pr = strchr(pl, '{')))
{
if((pme = strchr(pr, '}')) == NULL)
break;
@@ -1169,15 +1148,15 @@ void substitute_macros(DB_EVENT *event, DB_ACTION *action, char *data, int data_
/* copy left side */
pr[0] = '\0';
- str_out_fill = zbx_strlcat(str_out, pl, str_out_len);
+ str_out = zbx_strdcat(str_out, pl);
pr[0] = '{';
/* copy original name of variable */
- zbx_snprintf(replace_to, replace_to_len, "%s}", pr); /* in format used '}' */
+ replace_to = zbx_dsprintf(replace_to, "%s}", pr); /* in format used '}' */
/* cose in 'pr' string symbol '}' is changed to '\0' by 'pme'*/
- var_len = strlen(replace_to);
-
+ pl = pr + strlen(replace_to);
+
pms = pr + 1;
if(NULL != (p = strchr(pms, ':')))
@@ -1205,8 +1184,12 @@ void substitute_macros(DB_EVENT *event, DB_ACTION *action, char *data, int data_
*p = ')';
pms = p + 1;
+ /* function 'evaluate_FUNCTION2' require 'replace_to' with size 'MAX_STRING_LEN' */
+ zbx_free(replace_to);
+ replace_to = zbx_malloc(MAX_STRING_LEN);
+
if(evaluate_FUNCTION2(replace_to,host,key,function,parameter) != SUCCEED)
- zbx_snprintf(replace_to, replace_to_len, "%s", STR_UNKNOWN_VARIABLE);
+ zbx_snprintf(replace_to, MAX_STRING_LEN, "%s", STR_UNKNOWN_VARIABLE);
}
}
}
@@ -1214,17 +1197,16 @@ void substitute_macros(DB_EVENT *event, DB_ACTION *action, char *data, int data_
}
pme[0] = '}';
- str_out_fill = zbx_strlcat(str_out, replace_to, str_out_len);
- pl = pr + var_len;
+ str_out = zbx_strdcat(str_out, replace_to);
+ zbx_free(replace_to);
}
- str_out_fill = zbx_strlcat(str_out, pl, str_out_len);
+ str_out = zbx_strdcat(str_out, pl);
- zbx_snprintf(data, data_max_len, "%s", str_out);
+ zbx_free(*data);
- zbx_free(str_out);
- zbx_free(replace_to);
+ *data = str_out;
- zabbix_log( LOG_LEVEL_DEBUG, "Result expression:%s", data );
+ zabbix_log( LOG_LEVEL_DEBUG, "Result expression:%s", *data );
}
/******************************************************************************
diff --git a/src/zabbix_server/expression.h b/src/zabbix_server/expression.h
index 5c187f26..921b5ad6 100644
--- a/src/zabbix_server/expression.h
+++ b/src/zabbix_server/expression.h
@@ -27,8 +27,7 @@
int cmp_double(double a,double b);
int find_char(char *str,char c);
int evaluate_expression(int *result,char *expression, char *error, int maxerrlen);
-//void substitute_macros(DB_TRIGGER *trigger, DB_ACTION *action, char *data, int dala_max_len);
-void substitute_macros(DB_EVENT *event, DB_ACTION *action, char *data, int dala_max_len);
+void substitute_macros(DB_EVENT *event, DB_ACTION *action, char **data);
int evaluate_expression (int *result,char *expression,char *error,int maxerrlen);
void delete_reol(char *c);
@@ -36,7 +35,6 @@ void delete_reol(char *c);
#define MACRO_TYPE_MESSAGE_SUBJECT 2
#define MACRO_TYPE_MESSAGE_BODY 4
-//void substitute_simple_macros(DB_TRIGGER *trigger, DB_ACTION *action, char *data, int dala_max_len, int macro_type);
-void substitute_simple_macros(DB_EVENT *trigger, DB_ACTION *action, char *data, int dala_max_len, int macro_type);
+void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char **data, int macro_type);
#endif
diff --git a/src/zabbix_server/functions.c b/src/zabbix_server/functions.c
index 8d3c0186..df5014c9 100644
--- a/src/zabbix_server/functions.c
+++ b/src/zabbix_server/functions.c
@@ -50,8 +50,6 @@
#include "functions.h"
#include "expression.h"
-extern int autoregister(char *server);
-
/******************************************************************************
* *
* Function: update_functions *
@@ -280,7 +278,6 @@ void update_triggers(zbx_uint64_t itemid)
char exp[MAX_STRING_LEN];
char error[MAX_STRING_LEN];
int exp_value;
- time_t now;
DB_TRIGGER trigger;
DB_RESULT result;
DB_ROW row;
@@ -292,26 +289,27 @@ void update_triggers(zbx_uint64_t itemid)
while((row=DBfetch(result)))
{
ZBX_STR2UINT64(trigger.triggerid,row[0]);
-// trigger.triggerid=atoi(row[0]);
strscpy(trigger.expression,row[1]);
- trigger.status=atoi(row[2]);
- trigger.priority=atoi(row[4]);
- trigger.value=atoi(row[5]);
strscpy(trigger.description,row[6]);
-
- strscpy(exp, trigger.expression);
+ trigger.status = atoi(row[2]);
+ trigger.priority = atoi(row[4]);
+ trigger.value = atoi(row[5]);
+ trigger.url = row[6];
+ trigger.comments = row[7];
+
+ /* NOTE: function 'evaluate_expression' require 'exp' with 'MAX_STRING_LEN' length*/
+ memset(exp, 0, MAX_STRING_LEN);
+ zbx_strlcpy(exp, trigger.expression, MAX_STRING_LEN-1);
if( evaluate_expression(&exp_value, exp, error, sizeof(error)) != 0 )
{
zabbix_log( LOG_LEVEL_WARNING, "Expression [%s] cannot be evaluated [%s]",trigger.expression, error);
zabbix_syslog("Expression [%s] cannot be evaluated [%s]",trigger.expression, error);
-/* We shouldn't update triggervalue if expressions failed */
-/* now = time(NULL);
- DBupdate_trigger_value(&trigger, exp_value, now, error);*/
- continue;
+/* DBupdate_trigger_value(&trigger, exp_value, time(NULL), error);*//* We shouldn't update triggervalue if expressions failed */
+ }
+ else
+ {
+ DBupdate_trigger_value(&trigger, exp_value, time(NULL), NULL);
}
-
- now = time(NULL);
- DBupdate_trigger_value(&trigger, exp_value, now, NULL);
}
DBfree_result(result);
zabbix_log( LOG_LEVEL_DEBUG, "End of update_triggers [%d]", itemid);
diff --git a/src/zabbix_server/nodewatcher/events.c b/src/zabbix_server/nodewatcher/events.c
index c83782f3..50590909 100644
--- a/src/zabbix_server/nodewatcher/events.c
+++ b/src/zabbix_server/nodewatcher/events.c
@@ -56,8 +56,6 @@
#define ZBX_NODE_MASTER 0
#define ZBX_NODE_SLAVE 1
-extern int CONFIG_NODEID;
-
/******************************************************************************
* *
* Function: process_node *
diff --git a/src/zabbix_server/nodewatcher/history.c b/src/zabbix_server/nodewatcher/history.c
index 5076cb56..ab541781 100644
--- a/src/zabbix_server/nodewatcher/history.c
+++ b/src/zabbix_server/nodewatcher/history.c
@@ -53,8 +53,6 @@
#include "nodesender.h"
#include "history.h"
-extern int CONFIG_NODEID;
-
/******************************************************************************
* *
* Function: process_node_history_str *
diff --git a/src/zabbix_server/nodewatcher/nodecomms.c b/src/zabbix_server/nodewatcher/nodecomms.c
index 1162339e..6d2e3d40 100644
--- a/src/zabbix_server/nodewatcher/nodecomms.c
+++ b/src/zabbix_server/nodewatcher/nodecomms.c
@@ -52,8 +52,6 @@
#include "nodecomms.h"
-extern int CONFIG_NODEID;
-
/******************************************************************************
* *
* Function: send_to_node *
diff --git a/src/zabbix_server/nodewatcher/nodesender.c b/src/zabbix_server/nodewatcher/nodesender.c
index b852275d..a0ad4f10 100644
--- a/src/zabbix_server/nodewatcher/nodesender.c
+++ b/src/zabbix_server/nodewatcher/nodesender.c
@@ -56,8 +56,6 @@
#define ZBX_NODE_MASTER 0
#define ZBX_NODE_SLAVE 1
-extern int CONFIG_NODEID;
-
/******************************************************************************
* *
* Function: send_config_data *
diff --git a/src/zabbix_server/timer/timer.c b/src/zabbix_server/timer/timer.c
index b2847a9b..e4d53563 100644
--- a/src/zabbix_server/timer/timer.c
+++ b/src/zabbix_server/timer/timer.c
@@ -44,9 +44,6 @@
#include "common.h"
#include "timer.h"
-extern void update_triggers(int itemid);
-extern void update_functions(DB_ITEM *item);
-
/******************************************************************************
* *
* Function: main_timer_loop *
diff --git a/src/zabbix_server/trapper/nodeevents.c b/src/zabbix_server/trapper/nodeevents.c
index f8610f34..7f81914e 100644
--- a/src/zabbix_server/trapper/nodeevents.c
+++ b/src/zabbix_server/trapper/nodeevents.c
@@ -43,8 +43,6 @@
#include "nodeevents.h"
-extern int process_event(DB_EVENT *event);
-
/******************************************************************************
* *
* Function: process_record *
diff --git a/src/zabbix_server/trapper/nodehistory.c b/src/zabbix_server/trapper/nodehistory.c
index 239d3367..9d2e85f8 100644
--- a/src/zabbix_server/trapper/nodehistory.c
+++ b/src/zabbix_server/trapper/nodehistory.c
@@ -43,8 +43,6 @@
#include "nodeevents.h"
-extern int process_event(DB_EVENT *event);
-
/******************************************************************************
* *
* Function: process_record *
diff --git a/src/zabbix_server/trapper/trapper.c b/src/zabbix_server/trapper/trapper.c
index 9a1648a4..ccbe6f33 100644
--- a/src/zabbix_server/trapper/trapper.c
+++ b/src/zabbix_server/trapper/trapper.c
@@ -58,8 +58,6 @@
#include "daemon.h"
-extern int send_list_of_active_checks(zbx_sock_t *sock, char *host);
-
int process_trap(zbx_sock_t *sock,char *s, int max_len)
{
char *p,*line,*host;
diff --git a/src/zabbix_server/zlog.c b/src/zabbix_server/zlog.c
index 84579e8f..ed228ed4 100644
--- a/src/zabbix_server/zlog.c
+++ b/src/zabbix_server/zlog.c
@@ -34,8 +34,6 @@
#include "log.h"
#include "zlog.h"
-extern int CONFIG_NODEID;
-
/******************************************************************************
* *
* Function: zabbix_syslog *