-/* @(#) $Id$ */
+/* @(#) $Id: ./src/os_maild/sendmail.c, 2011/09/08 dcid Exp $
+ */
/* Copyright (C) 2009 Trend Micro Inc.
* All rights reserved.
*
* This program is a free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public
- * License (version 2) as published by the FSF - Free Software
+ * License (version 2) as published by the FSF - Free Software
* Foundation
*/
#define TO "To: <%s>\r\n"
#define CC "Cc: <%s>\r\n"
#define SUBJECT "Subject: %s\r\n"
+#define ENDHEADER "\r\n"
#define ENDDATA "\r\n.\r\n"
#define QUITMSG "QUIT\r\n"
+#define XHEADER "X-IDS-OSSEC: %s\r\n"
/* Error messages - Can be translated */
char final_to[512];
- /* Connecting to the smtp server */
- socket = OS_ConnectTCP(SMTP_DEFAULT_PORT, mail->smtpserver);
+ /* Connecting to the smtp server */
+ socket = OS_ConnectTCP(SMTP_DEFAULT_PORT, mail->smtpserver, 0);
if(socket < 0)
{
return(socket);
if(msg)
free(msg);
close(socket);
- return(OS_INVALID);
+ return(OS_INVALID);
}
MAIL_DEBUG("DEBUG: Received banner: '%s' %s", msg, "");
free(msg);
if(msg)
free(msg);
close(socket);
- return(OS_INVALID);
+ return(OS_INVALID);
}
}
else
}
MAIL_DEBUG("DEBUG: Sent '%s', received: '%s'", HELOMSG, msg);
- free(msg);
+ free(msg);
/* Building "Mail from" msg */
if(msg)
free(msg);
close(socket);
- return(OS_INVALID);
+ return(OS_INVALID);
}
MAIL_DEBUG("DEBUG: Sent '%s', received: '%s'", snd_msg, msg);
- free(msg);
+ free(msg);
/* Additional RCPT to */
final_to[0] = '\0';
final_to_sz = sizeof(final_to) -2;
-
+
if(mail->gran_to)
{
i = 0;
snprintf(snd_msg,127, TO, mail->gran_to[i]);
strncat(final_to, snd_msg, final_to_sz);
final_to_sz -= strlen(snd_msg) +2;
-
+
i++;
continue;
}
if(msg)
free(msg);
close(socket);
- return(OS_INVALID);
+ return(OS_INVALID);
}
MAIL_DEBUG("DEBUG: Sent '%s', received: '%s'", DATAMSG, msg);
free(msg);
/* Sending date */
memset(snd_msg,'\0',128);
-
+
/* Solaris doesn't have the "%z", so we set the timezone to 0. */
#ifdef SOLARIS
#else
strftime(snd_msg, 127, "Date: %a, %d %b %Y %T %z\r\n",p);
#endif
-
+
OS_SendTCP(socket,snd_msg);
snprintf(snd_msg, 127, SUBJECT, sms_msg->subject);
OS_SendTCP(socket,snd_msg);
+ OS_SendTCP(socket,ENDHEADER);
/* Sending body */
/* Sending end of data \r\n.\r\n */
- OS_SendTCP(socket,ENDDATA);
+ OS_SendTCP(socket,ENDDATA);
msg = OS_RecvTCP(socket, OS_SIZE_1024);
if(mail->strict_checking && ((msg == NULL)||(!OS_Match(VALIDMAIL, msg))))
{
if(msg)
free(msg);
close(socket);
- return(OS_INVALID);
+ return(OS_INVALID);
}
/* Checking msg in here, since it may be null */
if(msg)
if(msg)
free(msg);
- memset(snd_msg,'\0',128);
+ memset(snd_msg,'\0',128);
/* Returning 0 (success) */
int socket,i=0;
char *msg;
char snd_msg[128];
- char additional_to[512];
MailNode *mailmsg;
- additional_to[0] = '\0';
-
- /* If there is no sms message, we attempt to get from the
+ /* If there is no sms message, we attempt to get from the
* email list.
*/
mailmsg = OS_PopLastMail();
{
merror("%s: No email to be sent. Inconsistent state.",ARGV0);
}
-
- /* Connecting to the smtp server */
- socket = OS_ConnectTCP(SMTP_DEFAULT_PORT, mail->smtpserver);
+
+ /* Connecting to the smtp server */
+ socket = OS_ConnectTCP(SMTP_DEFAULT_PORT, mail->smtpserver, 0);
if(socket < 0)
{
return(socket);
if(msg)
free(msg);
close(socket);
- return(OS_INVALID);
+ return(OS_INVALID);
}
MAIL_DEBUG("DEBUG: Received banner: '%s' %s", msg, "");
free(msg);
if(msg)
free(msg);
close(socket);
- return(OS_INVALID);
+ return(OS_INVALID);
}
}
else
}
MAIL_DEBUG("DEBUG: Sent '%s', received: '%s'", HELOMSG, msg);
- free(msg);
+ free(msg);
/* Building "Mail from" msg */
if(msg)
free(msg);
close(socket);
- return(OS_INVALID);
+ return(OS_INVALID);
}
MAIL_DEBUG("DEBUG: Sent '%s', received: '%s'", snd_msg, msg);
- free(msg);
+ free(msg);
/* Building "RCPT TO" msg */
if(msg)
free(msg);
close(socket);
- return(OS_INVALID);
+ return(OS_INVALID);
}
MAIL_DEBUG("DEBUG: Sent '%s', received: '%s'", snd_msg, msg);
free(msg);
free(msg);
i++;
- continue;
+ continue;
}
-
+
MAIL_DEBUG("DEBUG: Sent '%s', received: '%s'", snd_msg, msg);
free(msg);
i++;
if(msg)
free(msg);
close(socket);
- return(OS_INVALID);
+ return(OS_INVALID);
}
MAIL_DEBUG("DEBUG: Sent '%s', received: '%s'", DATAMSG, msg);
free(msg);
{
break;
}
-
+
memset(snd_msg,'\0',128);
snprintf(snd_msg,127, TO, mail->to[i]);
OS_SendTCP(socket,snd_msg);
#else
strftime(snd_msg, 127, "Date: %a, %d %b %Y %T %z\r\n",p);
#endif
-
+
OS_SendTCP(socket,snd_msg);
+ if(mail->idsname)
+ {
+ /* Sending server name header */
+ memset(snd_msg,'\0',128);
+ snprintf(snd_msg,127, XHEADER, mail->idsname);
+ OS_SendTCP(socket, snd_msg);
+ }
/* Sending subject */
memset(snd_msg,'\0',128);
/* Checking if global subject is available */
if((_g_subject_level != 0) && (_g_subject[0] != '\0'))
{
- snprintf(snd_msg, 127, SUBJECT, _g_subject);
+ snprintf(snd_msg, 127, SUBJECT, _g_subject);
/* Clearing global values */
_g_subject[0] = '\0';
}
OS_SendTCP(socket,snd_msg);
+ OS_SendTCP(socket,ENDHEADER);
/* Sending body */
/* Sending end of data \r\n.\r\n */
- OS_SendTCP(socket,ENDDATA);
+ OS_SendTCP(socket,ENDDATA);
msg = OS_RecvTCP(socket, OS_SIZE_1024);
if(mail->strict_checking && ((msg == NULL)||(!OS_Match(VALIDMAIL, msg))))
{
if(msg)
free(msg);
close(socket);
- return(OS_INVALID);
+ return(OS_INVALID);
}
/* Checking msg in here, since it may be null */
if(msg)
if(msg)
free(msg);
- memset(snd_msg,'\0',128);
+ memset(snd_msg,'\0',128);
/* Returning 0 (success) */