summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2002-07-18 18:17:14 +0000
committerhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2002-07-18 18:17:14 +0000
commit2bc8e9fcdad98cfc5edea775de1d8860ecebf48e (patch)
treed2ce5471d5c66dfbf551c8f7d30dd6fc16c018c1 /include
parent8475723684b40317ac8d43b26fb97d26d2787c15 (diff)
downloadzabbix-2bc8e9fcdad98cfc5edea775de1d8860ecebf48e.tar.gz
zabbix-2bc8e9fcdad98cfc5edea775de1d8860ecebf48e.tar.xz
zabbix-2bc8e9fcdad98cfc5edea775de1d8860ecebf48e.zip
- empty result for DBselect is always checked (Alexei)
git-svn-id: svn://svn.zabbix.com/trunk@435 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'include')
-rw-r--r--include/functions.c94
1 files changed, 70 insertions, 24 deletions
diff --git a/include/functions.c b/include/functions.c
index 8e60911e..4cc57a87 100644
--- a/include/functions.c
+++ b/include/functions.c
@@ -257,7 +257,8 @@ int send_mail(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,ch
struct sockaddr_in myaddr_in;
struct sockaddr_in servaddr_in;
- char *OK_250="250 OK";
+ char *OK_220="220";
+ char *OK_250="250";
zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL");
@@ -290,8 +291,25 @@ int send_mail(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,ch
return FAIL;
}
+ memset(c,0,MAX_STRING_LEN+1);
+ i=sizeof(struct sockaddr_in);
+ i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);
+ if(i == -1)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Error receiving initial infor from SMTP server.");
+ close(s);
+ return FAIL;
+ }
+ if(strncmp(OK_220,c,strlen(OK_220)) != 0)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "No welcome message 220* [%s]", c);
+ close(s);
+ return FAIL;
+ }
+
if(strlen(smtp_helo) != 0)
{
+ memset(c,0,MAX_STRING_LEN+1);
sprintf(c,"HELO %s\n",smtp_helo);
e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in));
if(e == -1)
@@ -301,6 +319,7 @@ int send_mail(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,ch
return FAIL;
}
+ memset(c,0,MAX_STRING_LEN+1);
i=sizeof(struct sockaddr_in);
i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);
if(i == -1)
@@ -311,12 +330,13 @@ int send_mail(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,ch
}
if(strncmp(OK_250,c,strlen(OK_250)) != 0)
{
- zabbix_log(LOG_LEVEL_ERR, "Wrong answer on HELO [%s]", c);
+ zabbix_log(LOG_LEVEL_ERR, "Wrong answer on HELO [%s]",c);
close(s);
return FAIL;
}
}
+ memset(c,0,MAX_STRING_LEN+1);
sprintf(c,"MAIL FROM: %s\n",smtp_email);
e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in));
if(e == -1)
@@ -325,6 +345,8 @@ int send_mail(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,ch
close(s);
return FAIL;
}
+
+ memset(c,0,MAX_STRING_LEN+1);
i=sizeof(struct sockaddr_in);
i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);
if(i == -1)
@@ -340,6 +362,7 @@ int send_mail(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,ch
return FAIL;
}
+ memset(c,0,MAX_STRING_LEN+1);
sprintf(c,"RCPT TO: <%s>\n",mailto);
e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in));
if(e == -1)
@@ -348,6 +371,7 @@ int send_mail(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,ch
close(s);
return FAIL;
}
+ memset(c,0,MAX_STRING_LEN+1);
i=sizeof(struct sockaddr_in);
i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);
if(i == -1)
@@ -363,6 +387,7 @@ int send_mail(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,ch
return FAIL;
}
+ memset(c,0,MAX_STRING_LEN+1);
sprintf(c,"DATA\n");
e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in));
if(e == -1)
@@ -371,6 +396,7 @@ int send_mail(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,ch
close(s);
return FAIL;
}
+ memset(c,0,MAX_STRING_LEN+1);
i=sizeof(struct sockaddr_in);
i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);
if(i == -1)
@@ -386,6 +412,7 @@ int send_mail(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,ch
return FAIL;
}
+ memset(c,0,MAX_STRING_LEN+1);
sprintf(c,"Subject: %s\n%s",mailsubject, mailbody);
e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in));
if(e == -1)
@@ -395,6 +422,7 @@ int send_mail(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,ch
return FAIL;
}
+ memset(c,0,MAX_STRING_LEN+1);
sprintf(c,"\n.\n");
e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in));
if(e == -1)
@@ -403,6 +431,7 @@ int send_mail(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,ch
close(s);
return FAIL;
}
+ memset(c,0,MAX_STRING_LEN+1);
i=sizeof(struct sockaddr_in);
i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);
if(i == -1)
@@ -418,6 +447,7 @@ int send_mail(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,ch
return FAIL;
}
+ memset(c,0,MAX_STRING_LEN+1);
sprintf(c,"\n");
e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in));
if(e ==- 1)
@@ -426,6 +456,7 @@ int send_mail(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,ch
close(s);
return FAIL;
}
+ memset(c,0,MAX_STRING_LEN+1);
i=sizeof(struct sockaddr_in);
i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);
if(i == -1)
@@ -435,6 +466,7 @@ int send_mail(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,ch
return FAIL;
}
+ memset(c,0,MAX_STRING_LEN+1);
sprintf(c,"QUIT\n");
e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in));
if(e == -1)
@@ -522,6 +554,13 @@ void apply_actions(int triggerid,int good)
sprintf(sql,"select actionid,userid,delay,subject,message from actions where triggerid=%d and good=%d and nextcheck<=%d",triggerid,good,now);
result = DBselect(sql);
+ if(DBis_empty(result) == SUCCEED)
+ {
+ zabbix_log( LOG_LEVEL_DEBUG, "No actions applied.");
+ DBfree_result(result);
+ return;
+ }
+
rows = DBnum_rows(result);
for(i=0;i<rows;i++)
@@ -561,41 +600,48 @@ void update_serv(int serviceid)
sprintf(sql,"select l.serviceupid,s.algorithm from services_links l,services s where s.serviceid=l.serviceupid and l.servicedownid=%d",serviceid);
result=DBselect(sql);
status=0;
- for(i=0;i<DBnum_rows(result);i++)
+ if(DBis_empty(result) != SUCCEED)
{
- serviceupid=atoi(DBget_field(result,i,0));
- algorithm=atoi(DBget_field(result,i,1));
- if(SERVICE_ALGORITHM_NONE == algorithm)
+ for(i=0;i<DBnum_rows(result);i++)
{
+ serviceupid=atoi(DBget_field(result,i,0));
+ algorithm=atoi(DBget_field(result,i,1));
+ if(SERVICE_ALGORITHM_NONE == algorithm)
+ {
/* Do nothing */
- }
- else if(SERVICE_ALGORITHM_MAX == algorithm)
- {
- sprintf(sql,"select status from services s,services_links l where l.serviceupid=%d and s.serviceid=l.servicedownid",serviceupid);
- result2=DBselect(sql);
- for(j=0;j<DBnum_rows(result2);j++)
+ }
+ else if(SERVICE_ALGORITHM_MAX == algorithm)
{
- if(atoi(DBget_field(result2,j,0))>status)
+ sprintf(sql,"select status from services s,services_links l where l.serviceupid=%d and s.serviceid=l.servicedownid",serviceupid);
+ result2=DBselect(sql);
+ for(j=0;j<DBnum_rows(result2);j++)
{
- status=atoi(DBget_field(result2,j,0));
+ if(atoi(DBget_field(result2,j,0))>status)
+ {
+ status=atoi(DBget_field(result2,j,0));
+ }
}
+ sprintf(sql,"update services set status=%d where serviceid=%d",status,atoi(DBget_field(result,i,0)));
+ DBexecute(sql);
+ DBfree_result(result2);
+ }
+ else
+ {
+ zabbix_log( LOG_LEVEL_ERR, "Unknown calculation algorithm of service status [%d]", algorithm);
}
- sprintf(sql,"update services set status=%d where serviceid=%d",status,atoi(DBget_field(result,i,0)));
- DBexecute(sql);
- DBfree_result(result2);
- }
- else
- {
- zabbix_log( LOG_LEVEL_ERR, "Unknown calculation algorithm of service status [%d]", algorithm);
}
- }
+ }
DBfree_result(result);
sprintf(sql,"select serviceupid from services_links where servicedownid=%d",serviceid);
result=DBselect(sql);
- for(i=0;i<DBnum_rows(result);i++)
+
+ if(DBis_empty(result) != SUCCEED)
{
- update_serv(atoi(DBget_field(result,i,0)));
+ for(i=0;i<DBnum_rows(result);i++)
+ {
+ update_serv(atoi(DBget_field(result,i,0)));
+ }
}
DBfree_result(result);
}