]> granicus.if.org Git - php/commitdiff
Prevent abrupt script execution when sendmail_path contains invalid
authorIlia Alshanetsky <iliaa@php.net>
Wed, 27 Aug 2003 23:53:15 +0000 (23:53 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Wed, 27 Aug 2003 23:53:15 +0000 (23:53 +0000)
executable.
Add more detail to the warnings regarding execution of sendmail binary.

ext/standard/mail.c

index b0412904e00f0aad5d2033a6c12f7f5047e5bfe1..9bdc8fce3252bac477a22bd8b0333fc381e98fd2 100644 (file)
@@ -198,6 +198,13 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char
 #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 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char
        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 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char
                        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;
        }