bug in mail()

From: Date: Fri, 16 Jun 2000 17:05:32 +0000
Subject: bug in mail()
Groups: php.dev 
Request: Send a blank email to php-dev+get-21542@lists.php.net to get a copy of this message
Hi today i noticed that mail() does the wrong thing with the sendmail exit codes ... here is a patch for php 3.0.16 to fix that. same problem exists in php 4.0 yours, oliver teuber p.s. pleas cc me because i am not on this list *** basic_functions.c.orig Fri Jun 16 18:48:36 2000 --- basic_functions.c Fri Jun 16 18:48:04 2000 *************** *** 2020,2026 **** case 1: /*send an email*/ { #if HAVE_SENDMAIL ! if (!_php3_mail(opt,"PHP3 error_log message",message,headers)){ return FAILURE; } #else --- 2020,2027 ---- case 1: /*send an email*/ { #if HAVE_SENDMAIL ! int dummy; ! if (!_php3_mail(opt,"PHP3 error_log message",message,headers,&dummy)){ return FAILURE; } #else *** mail.c.orig Fri Jun 16 17:57:06 2000 --- mail.c Fri Jun 16 18:57:22 2000 *************** *** 24,29 **** --- 24,31 ---- | contact core@php.net. | +----------------------------------------------------------------------+ | Authors: | + | 06.2000: Fixed sendmail error reporting BUG! Oliver Teuber | + | ot@penguin-power.de | | | +----------------------------------------------------------------------+ */ *************** *** 34,39 **** --- 36,42 ---- #include <ctype.h> #include <stdio.h> #include "php.h" + #include <sysexits.h> #ifndef MSVC5 #include "build-defs.h" #endif *************** *** 71,77 **** { pval *argv[4]; char *to=NULL, *message=NULL, *headers=NULL, *subject=NULL; ! int argc; TLS_VARS; argc = ARG_COUNT(ht); --- 74,80 ---- { pval *argv[4]; char *to=NULL, *message=NULL, *headers=NULL, *subject=NULL; ! int argc, err; TLS_VARS; argc = ARG_COUNT(ht); *************** *** 111,125 **** headers = argv[3]->value.str.val; } ! if (_php3_mail(to, subject, message, headers)){ ! RETURN_TRUE; ! } else { RETURN_FALSE; } } /* }}} */ ! int _php3_mail(char *to, char *subject, char *message, char *headers) { #if MSVC5 int tsm_err; --- 114,189 ---- headers = argv[3]->value.str.val; } ! if(_php3_mail(to, subject, message, headers, &err)) ! { ! switch(err) ! { ! case EX_OK: ! RETURN_TRUE; ! break; ! ! #ifdef EX_NOUSER ! case EX_NOUSER: ! php3_error(E_WARNING, "User name not recognized."); ! RETURN_FALSE; ! break; ! #endif ! ! #ifdef EX_UNAVAILABLE ! case EX_UNAVAILABLE: ! php3_error(E_WARNING, "Necessary resources were not available."); ! RETURN_FALSE; ! break; ! #endif ! ! #ifdef EX_SYNTAX ! case EX_SYNTAX: ! php3_error(E_WARNING, "Syntax error in address."); ! RETURN_FALSE; ! break; ! #endif ! ! #ifdef EX_SOFTWARE ! case EX_SOFTWARE: ! php3_error(E_WARNING, "Internal sendmail error."); ! RETURN_FALSE; ! break; ! #endif ! ! #ifdef EX_OSERR ! case EX_OSERR: ! php3_error(E_WARNING, "Temporary operating system error."); ! RETURN_FALSE; ! break; ! #endif ! ! #ifdef EX_NOHOST ! case EX_NOHOST: ! php3_error(E_WARNING, "Host name not recognized."); ! RETURN_FALSE; ! break; ! #endif ! ! #ifdef EX_TEMPFAIL ! case EX_TEMPFAIL: ! php3_error(E_WARNING, "Message could not be sent immediately, but was queued."); ! RETURN_TRUE; ! break; ! #endif ! ! default: ! php3_error(E_WARNING, "Unkown sendmail error code %d.",err); ! RETURN_FALSE; ! } ! } ! else ! { RETURN_FALSE; } } /* }}} */ ! int _php3_mail(char *to, char *subject, char *message, char *headers, int *err) { #if MSVC5 int tsm_err; *************** *** 134,139 **** --- 198,204 ---- php3_error(E_WARNING, GetSMErrorText(tsm_err)); return 0; } + return 1; #else if (!php3_ini.sendmail_path) { return 0; *************** *** 147,164 **** fprintf(sendmail, "%s\n", headers); } fprintf(sendmail, "\n%s\n", message); ! ret = pclose(sendmail); ! if (ret == -1) { ! return 0; ! } else { return 1; } } else { php3_error(E_WARNING, "Could not execute mail delivery program"); return 0; } #endif - return 1; } void php3_info_mail(void) --- 212,248 ---- fprintf(sendmail, "%s\n", headers); } fprintf(sendmail, "\n%s\n", message); ! ! ret=pclose(sendmail); ! ! if(WIFEXITED(ret)) ! { ! *err=WEXITSTATUS(ret); return 1; } + else + if(WIFSIGNALED(ret)) + { + php3_error(E_WARNING, "Sendmail terminated by not cought signal %d!",WTERMSIG(ret)); + return 0; + } + else + if(WIFSTOPPED(ret)) + { + php3_error(E_WARNING, "Sendmail stopped by signal %d!",WSTOPSIG(ret)); + return 0; + } + + /* We should never reach this ... */ + php3_error(E_WARNING, "Unkown returncode from sendmail"); + return 0; + + } else { php3_error(E_WARNING, "Could not execute mail delivery program"); return 0; } #endif } void php3_info_mail(void) *** php3_mail.h.orig Fri Jun 16 18:45:44 2000 --- php3_mail.h Fri Jun 16 18:46:03 2000 *************** *** 38,44 **** extern void php3_mail(INTERNAL_FUNCTION_PARAMETERS); extern void php3_info_mail(void); ! extern int _php3_mail(char *to, char *subject, char *message, char *headers); #else #define mail_module_ptr NULL --- 38,44 ---- extern void php3_mail(INTERNAL_FUNCTION_PARAMETERS); extern void php3_info_mail(void); ! extern int _php3_mail(char *to, char *subject, char *message, char *headers, int *stat); #else #define mail_module_ptr NULL

« previous php.dev (#21542) next »