iliaa           Wed Aug 27 19:53:16 2003 EDT

  Modified files:              
    /php-src/ext/standard       mail.c 
  Log:
  Prevent abrupt script execution when sendmail_path contains invalid 
  executable.
  Add more detail to the warnings regarding execution of sendmail binary.
  
  
Index: php-src/ext/standard/mail.c
diff -u php-src/ext/standard/mail.c:1.73 php-src/ext/standard/mail.c:1.74
--- php-src/ext/standard/mail.c:1.73    Tue Jun 10 16:03:38 2003
+++ php-src/ext/standard/mail.c Wed Aug 27 19:53:15 2003
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mail.c,v 1.73 2003/06/10 20:03:38 imajes Exp $ */
+/* $Id: mail.c,v 1.74 2003/08/27 23:53:15 iliaa Exp $ */
 
 #include <stdlib.h>
 #include <ctype.h>
@@ -198,6 +198,13 @@
 #ifdef PHP_WIN32
        sendmail = popen(sendmail_cmd, "wb");
 #else
+       /* make sure that sendmail_path contains a valid executable, failure to do
+        * would make PHP abruptly exit without a useful error message. */
+       if (access(sendmail_path, X_OK)) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Permission denied: unable 
to execute shell to run mail delivery binary '%s'", sendmail_path);
+               return 0;
+       }
+
        /* Since popen() doesn't indicate if the internal fork() doesn't work
         * (e.g. the shell can't be executed) we explicitely set it to 0 to be
         * sure we don't catch any older errno value. */
@@ -210,7 +217,7 @@
        if (sendmail) {
 #ifndef PHP_WIN32
                if (EACCES == errno) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Permission 
denied: unable to execute shell to run mail delivery binary");
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Permission 
denied: unable to execute shell to run mail delivery binary '%s'", sendmail_path);
                        pclose(sendmail);
                        return 0;
                }
@@ -239,7 +246,7 @@
                        return 1;
                }
        } else {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not execute mail 
delivery program");
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not execute mail 
delivery program '%s'", sendmail_path);
                return 0;
        }
 



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to