- Fix win32 sendmail bug with Cc: in custom header not terminated with \r\n

- Fix some obvious errors returned by the module, little cleanup.
This commit is contained in:
Markus Fischer 2002-05-14 13:52:18 +00:00
parent ce2b2b76a0
commit 87286cdb3f
2 changed files with 44 additions and 36 deletions

View File

@ -69,26 +69,27 @@ char *get_header(char *h, char *headers);
/* Error messages */ /* Error messages */
static char *ErrorMessages[] = static char *ErrorMessages[] =
{ {
{"Success"}, {"Success"}, /* 0 */
{"Bad arguments from form"}, {"Bad arguments from form"}, /* 1 */
{"Unable to open temporary mailfile for read"}, {"Unable to open temporary mailfile for read"},
{"Failed to Start Sockets"}, {"Failed to Start Sockets"},
{"Failed to Resolve Host"}, {"Failed to Resolve Host"},
{"Failed to obtain socket handle"}, {"Failed to obtain socket handle"}, /* 5 */
{"Failed to Connect"}, {"Failed to connect to mailserver, verify your \"SMTP\" setting in php.ini"},
{"Failed to Send"}, {"Failed to Send"},
{"Failed to Receive"}, {"Failed to Receive"},
{"Server Error"}, {"Server Error"},
{"Failed to resolve the host IP name"}, {"Failed to resolve the host IP name"}, /* 10 */
{"Out of memory"}, {"Out of memory"},
{"Unknown error"}, {"Unknown error"},
{"Bad Message Contents"}, {"Bad Message Contents"},
{"Bad Message Subject"}, {"Bad Message Subject"},
{"Bad Message destination"}, {"Bad Message destination"}, /* 15 */
{"Bad Message Return Path"}, {"Bad Message Return Path"},
{"Bad Mail Host"}, {"Bad Mail Host"},
{"Bad Message File"}, {"Bad Message File"},
{"PHP Internal error: php.ini sendmail from variable not set!"} {"\"sendmail_from\" NOT set in php.ini"},
{"Mailserver rejected our \"sendmail_from\" setting"} /* 20 */
}; };
@ -127,7 +128,8 @@ int TSendMail(char *host, int *error,
if (INI_STR("sendmail_from")){ if (INI_STR("sendmail_from")){
RPath = estrdup(INI_STR("sendmail_from")); RPath = estrdup(INI_STR("sendmail_from"));
} else { } else {
return 19; *error = W32_SM_SENDMAIL_FROM_NOT_SET;
return FAILURE;
} }
/* attempt to connect with mail host */ /* attempt to connect with mail host */
@ -179,10 +181,11 @@ void TSMClose()
char *GetSMErrorText(int index) char *GetSMErrorText(int index)
{ {
if ((index > MAX_ERROR_INDEX) || (index < MIN_ERROR_INDEX)) if (MIN_ERROR_INDEX <= index && index < MAX_ERROR_INDEX) {
return (ErrorMessages[UNKNOWN_ERROR]);
else
return (ErrorMessages[index]); return (ErrorMessages[index]);
} else {
return (ErrorMessages[UNKNOWN_ERROR]);
}
} }
@ -235,7 +238,7 @@ int SendText(char *RPath, char *Subject, char *mailTo, char *data, char *headers
if ((res = Post(Buffer)) != SUCCESS) if ((res = Post(Buffer)) != SUCCESS)
return (res); return (res);
if ((res = Ack()) != SUCCESS) if ((res = Ack()) != SUCCESS)
return (res); return W32_SM_SENDMAIL_FROM_MALFORMED;
tempMailTo = estrdup(mailTo); tempMailTo = estrdup(mailTo);
@ -255,8 +258,11 @@ int SendText(char *RPath, char *Subject, char *mailTo, char *data, char *headers
/* Send mail to all Cc rcpt's */ /* Send mail to all Cc rcpt's */
efree(tempMailTo); efree(tempMailTo);
if (headers && (pos1 = strstr(headers, "Cc:"))) { if (headers && (pos1 = strstr(headers, "Cc:"))) {
pos2 = strstr(pos1, "\r\n"); if (NULL == (pos2 = strstr(pos1, "\r\n"))) {
tempMailTo = estrndup(pos1, pos2-pos1); tempMailTo = estrndup(pos1, strlen(pos1));
} else {
tempMailTo = estrndup(pos1, pos2-pos1);
}
token = strtok(tempMailTo, ","); token = strtok(tempMailTo, ",");
while(token != NULL) while(token != NULL)

View File

@ -4,29 +4,31 @@
#define HOST_NAME_LEN 256 #define HOST_NAME_LEN 256
#define MAX_APPNAME_LENGHT 100 #define MAX_APPNAME_LENGHT 100
#define MAX_ERROR_INDEX 17 #define MAIL_BUFFER_SIZE (1024*4) /* 4k buffer */
#define MIN_ERROR_INDEX 0
#define MAIL_BUFFER_SIZE (1024*4) /* 4k buffer */
/* Return values */ /* Return values */
#define SUCCESS 0 #define MIN_ERROR_INDEX 0 /* Always 0 like SUCCESS */
#define FAILED_TO_PARSE_ARGUMENTS 1 #define SUCCESS 0
#define FAILED_TO_OPEN_MAILFILE 2 #define FAILED_TO_PARSE_ARGUMENTS 1
#define FAILED_TO_START_SOCKETS 3 #define FAILED_TO_OPEN_MAILFILE 2
#define FAILED_TO_RESOLVE_HOST 4 #define FAILED_TO_START_SOCKETS 3
#define FAILED_TO_OBTAIN_SOCKET_HANDLE 5 #define FAILED_TO_RESOLVE_HOST 4
#define FAILED_TO_CONNECT 6 #define FAILED_TO_OBTAIN_SOCKET_HANDLE 5
#define FAILED_TO_SEND 7 #define FAILED_TO_CONNECT 6
#define FAILED_TO_RECEIVE 8 #define FAILED_TO_SEND 7
#define SMTP_SERVER_ERROR 9 #define FAILED_TO_RECEIVE 8
#define FAILED_TO_GET_HOSTNAME 10 #define SMTP_SERVER_ERROR 9
#define OUT_OF_MEMORY 11 #define FAILED_TO_GET_HOSTNAME 10
#define UNKNOWN_ERROR 12 #define OUT_OF_MEMORY 11
#define BAD_MSG_CONTENTS 13 #define UNKNOWN_ERROR 12
#define BAD_MSG_SUBJECT 14 #define BAD_MSG_CONTENTS 13
#define BAD_MSG_DESTINATION 15 #define BAD_MSG_SUBJECT 14
#define BAD_MSG_RPATH 16 #define BAD_MSG_DESTINATION 15
#define BAD_MAIL_HOST 17 #define BAD_MSG_RPATH 16
#define BAD_MSG_FILE 18 #define BAD_MAIL_HOST 17
#define BAD_MSG_FILE 18
#define W32_SM_SENDMAIL_FROM_NOT_SET 19
#define W32_SM_SENDMAIL_FROM_MALFORMED 20
#define MAX_ERROR_INDEX 21 /* Always last error message + 1 */
int TSendMail(char *smtpaddr, int *returnerror, int TSendMail(char *smtpaddr, int *returnerror,