summaryrefslogtreecommitdiffstats
path: root/include/functions.c
diff options
context:
space:
mode:
authorhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2004-05-03 23:15:07 +0000
committerhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2004-05-03 23:15:07 +0000
commited42883f0730dd3d1d6ef76788fbfc5b830da499 (patch)
treeb115e17b51033c18926fef5783592703e2526757 /include/functions.c
parent48bfc04f65ffa259f4d84b4422880a5317cfb03b (diff)
downloadzabbix-ed42883f0730dd3d1d6ef76788fbfc5b830da499.tar.gz
zabbix-ed42883f0730dd3d1d6ef76788fbfc5b830da499.tar.xz
zabbix-ed42883f0730dd3d1d6ef76788fbfc5b830da499.zip
- email routines moved to email.c (Alexei)
git-svn-id: svn://svn.zabbix.com/trunk@1330 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'include/functions.c')
-rw-r--r--include/functions.c266
1 files changed, 1 insertions, 265 deletions
diff --git a/include/functions.c b/include/functions.c
index 3c02fe64..27605490 100644
--- a/include/functions.c
+++ b/include/functions.c
@@ -42,6 +42,7 @@
#include "functions.h"
#include "expression.h"
+#include "email.h"
/* Delete trailing zeroes */
/* 10.0100 -> 10.01, 10. -> 10 */
@@ -542,271 +543,6 @@ void update_functions(DB_ITEM *item)
DBfree_result(result);
}
-/*
- * Send email
- */
-int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,char *mailsubject,char *mailbody)
-{
- int s;
- int i,e;
- char c[MAX_STRING_LEN];
- struct hostent *hp;
-
- struct sockaddr_in myaddr_in;
- struct sockaddr_in servaddr_in;
-
- char *OK_220="220";
- char *OK_250="250";
- char *OK_251="251";
- char *OK_354="354";
-
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL");
-
- servaddr_in.sin_family=AF_INET;
- hp=gethostbyname(smtp_server);
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL2");
- 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);
-
- 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)
- {
- zabbix_log(LOG_LEVEL_ERR, "Cannot create socket");
- return FAIL;
- }
-
- myaddr_in.sin_family = AF_INET;
- myaddr_in.sin_port=0;
- myaddr_in.sin_addr.s_addr=INADDR_ANY;
-
- if( connect(s,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)) == -1 )
- {
- zabbix_log(LOG_LEVEL_ERR, "Cannot connect to SMTP server [%s]",smtp_server);
- close(s);
- return FAIL;
- }
- 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)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error receiving initial string 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);
- snprintf(c,sizeof(c)-1,"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)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error sending HELO to mailserver.");
- close(s);
- 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 MAIL8");
- if(i == -1)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error receiving answer on HELO request.");
- close(s);
- return FAIL;
- }
- if(strncmp(OK_250,c,strlen(OK_250)) != 0)
- {
- zabbix_log(LOG_LEVEL_ERR, "Wrong answer on HELO [%s]",c);
- close(s);
- return FAIL;
- }
- }
-
- memset(c,0,MAX_STRING_LEN);
-/* sprintf(c,"MAIL FROM: %s\r\n",smtp_email);*/
- snprintf(c,sizeof(c)-1,"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)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error sending MAIL FROM to mailserver.");
- close(s);
- 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 MAIL10");
- if(i == -1)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error receiving answer on MAIL FROM request.");
- close(s);
- return FAIL;
- }
- if(strncmp(OK_250,c,strlen(OK_250)) != 0)
- {
- zabbix_log(LOG_LEVEL_ERR, "Wrong answer on MAIL FROM [%s]", c);
- close(s);
- return FAIL;
- }
-
- memset(c,0,MAX_STRING_LEN);
- snprintf(c,sizeof(c)-1,"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)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error sending RCPT TO to mailserver.");
- close(s);
- 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)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error receiving answer on RCPT TO request.");
- close(s);
- return FAIL;
- }
- /* May return 251 as well: User not local; will forward to <forward-path>. See RFC825 */
- if( strncmp(OK_250,c,strlen(OK_250)) != 0 && strncmp(OK_251,c,strlen(OK_251)) != 0)
- {
- zabbix_log(LOG_LEVEL_ERR, "Wrong answer on RCPT TO [%s]", c);
- close(s);
- return FAIL;
- }
-
- memset(c,0,MAX_STRING_LEN);
- snprintf(c,sizeof(c)-1,"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)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error sending DATA to mailserver.");
- close(s);
- 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)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error receivng answer on DATA request.");
- close(s);
- return FAIL;
- }
- if(strncmp(OK_354,c,strlen(OK_354)) != 0)
- {
- zabbix_log(LOG_LEVEL_ERR, "Wrong answer on DATA [%s]", c);
- close(s);
- return FAIL;
- }
-
- memset(c,0,MAX_STRING_LEN);
-/* sprintf(c,"Subject: %s\r\n%s",mailsubject, mailbody);*/
- snprintf(c,sizeof(c)-1,"From:<%s>\r\nTo:<%s>\r\nSubject: %s\r\n\r\n%s",smtp_email,mailto,mailsubject, mailbody);
-/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
- e=write(s,c,strlen(c));
- if(e == -1)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error sending mail subject and body to mailserver.");
- close(s);
- return FAIL;
- }
-
- memset(c,0,MAX_STRING_LEN);
- snprintf(c,sizeof(c)-1,"\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)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error sending . to mailserver.");
- close(s);
- 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)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error receivng answer on . request.");
- close(s);
- return FAIL;
- }
- if(strncmp(OK_250,c,strlen(OK_250)) != 0)
- {
- zabbix_log(LOG_LEVEL_ERR, "Wrong answer on end of data [%s]", c);
- close(s);
- return FAIL;
- }
-
- memset(c,0,MAX_STRING_LEN);
- snprintf(c,sizeof(c)-1,"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)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error sending QUIT to mailserver.");
- close(s);
- return FAIL;
- }
-
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL19");
- close(s);
-
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL. END.");
-
- return SUCCEED;
-}
-
/* Cannot use action->userid as it may also represent groupd id*/
void send_to_user_medias(DB_TRIGGER *trigger,DB_ACTION *action, int userid)
{