--- php-4.3.8/ext/standard/mail.c.orig Fri Jan 9 01:35:58 2004 +++ php-4.3.8/ext/standard/mail.c Mon Jul 19 12:14:50 2004 @@ -87,6 +87,7 @@ int to_len, message_len, headers_len; int subject_len, extra_cmd_len, i; char *to_r, *subject_r; + char *headers2=NULL; if (PG(safe_mode) && (ZEND_NUM_ARGS() == 5)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "SAFE MODE Restriction in effect. The fifth parameter is disabled in SAFE MODE."); @@ -147,6 +148,51 @@ if (extra_cmd) { extra_cmd = php_escape_shell_cmd(extra_cmd); } + + // add a header in the form + // X-PHP-Script: for [,] + while(1) { + zval **server, **remote_addr, **forwarded_for, **php_self, **server_name; + + if (zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void **) &server)==FAILURE) + break; + if (Z_TYPE_PP(server)!=IS_ARRAY) + break; + + if (zend_hash_find(Z_ARRVAL_PP(server), "REMOTE_ADDR", sizeof("REMOTE_ADDR"), (void **) &remote_addr) == FAILURE) + break; + + if (zend_hash_find(Z_ARRVAL_PP(server), "HTTP_X_FORWARDED_FOR", sizeof("HTTP_X_FORWARDED_FOR"), (void **) &forwarded_for) == FAILURE) + forwarded_for=NULL; + + if (zend_hash_find(Z_ARRVAL_PP(server), "PHP_SELF", sizeof("PHP_SELF"), (void **) &php_self) == FAILURE) + break; + + if (zend_hash_find(Z_ARRVAL_PP(server), "SERVER_NAME", sizeof("SERVER_NAME"), (void **) &server_name) == FAILURE) + break; + + headers2 = emalloc(32+Z_STRLEN_PP(server_name)+Z_STRLEN_PP(php_self) + +(forwarded_for?Z_STRLEN_PP(forwarded_for)+2:0) + +Z_STRLEN_PP(remote_addr)+headers_len); + + strcpy(headers2, "X-PHP-Script: "); + strcat(headers2, Z_STRVAL_PP(server_name)); + strcat(headers2, Z_STRVAL_PP(php_self)); + strcat(headers2, " for "); + if (forwarded_for) { + strcat(headers2, Z_STRVAL_PP(forwarded_for)); + strcat(headers2, ", "); + } + strcat(headers2, Z_STRVAL_PP(remote_addr)); + + if (headers_len) { + strcat (headers2, "\n"); + strcat (headers2, headers); + } + headers = headers2; + + break; + } if (php_mail(to_r, subject_r, message, headers, extra_cmd TSRMLS_CC)) { RETVAL_TRUE; @@ -163,6 +209,9 @@ if (subject_r != subject) { efree(subject_r); } + if (headers2) { + efree(headers2); + } } /* }}} */