dmitry Thu Sep 27 07:29:58 2007 UTC
Modified files:
/php-src/sapi/cgi cgi_main.c
Log:
ws
http://cvs.php.net/viewvc.cgi/php-src/sapi/cgi/cgi_main.c?r1=1.335&r2=1.336&diff_format=u
Index: php-src/sapi/cgi/cgi_main.c
diff -u php-src/sapi/cgi/cgi_main.c:1.335 php-src/sapi/cgi/cgi_main.c:1.336
--- php-src/sapi/cgi/cgi_main.c:1.335 Mon Sep 24 11:43:02 2007
+++ php-src/sapi/cgi/cgi_main.c Thu Sep 27 07:29:58 2007
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: cgi_main.c,v 1.335 2007/09/24 11:43:02 dmitry Exp $ */
+/* $Id: cgi_main.c,v 1.336 2007/09/27 07:29:58 dmitry Exp $ */
#include "php.h"
#include "php_globals.h"
@@ -148,8 +148,8 @@
zend_bool fix_pathinfo;
zend_bool force_redirect;
zend_bool discard_path;
- char *redirect_status_env;
zend_bool fcgi_logging;
+ char *redirect_status_env;
#ifdef PHP_WIN32
zend_bool impersonate;
#endif
@@ -283,7 +283,7 @@
fcgi_request *request = (fcgi_request*) server_context;
if (
#ifndef PHP_WIN32
- !parent &&
+ !parent &&
#endif
request && !fcgi_flush(request, 0)) {
php_handle_aborted_connection();
@@ -420,7 +420,7 @@
#if !HAVE_SETENV || !HAVE_UNSETENV
/* if cgi, or fastcgi and not found in fcgi env
- check the regular environment
+ check the regular environment
this leaks, but it's only cgi anyway, we'll fix
it for 5.0
*/
@@ -457,19 +457,19 @@
Z_TYPE_P(PG(http_globals)[TRACK_VARS_ENV]) == IS_ARRAY &&
zend_hash_num_elements(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_ENV])) > 0) {
zval_dtor(array_ptr);
- *array_ptr = *PG(http_globals)[TRACK_VARS_ENV];
- INIT_PZVAL(array_ptr);
- zval_copy_ctor(array_ptr);
- return;
+ *array_ptr = *PG(http_globals)[TRACK_VARS_ENV];
+ INIT_PZVAL(array_ptr);
+ zval_copy_ctor(array_ptr);
+ return;
} else if (PG(http_globals)[TRACK_VARS_SERVER] &&
- array_ptr != PG(http_globals)[TRACK_VARS_SERVER] &&
- Z_TYPE_P(PG(http_globals)[TRACK_VARS_SERVER]) == IS_ARRAY &&
-
zend_hash_num_elements(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER])) > 0) {
+ array_ptr != PG(http_globals)[TRACK_VARS_SERVER] &&
+ Z_TYPE_P(PG(http_globals)[TRACK_VARS_SERVER]) == IS_ARRAY &&
+
zend_hash_num_elements(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER])) > 0) {
zval_dtor(array_ptr);
- *array_ptr = *PG(http_globals)[TRACK_VARS_SERVER];
- INIT_PZVAL(array_ptr);
- zval_copy_ctor(array_ptr);
- return;
+ *array_ptr = *PG(http_globals)[TRACK_VARS_SERVER];
+ INIT_PZVAL(array_ptr);
+ zval_copy_ctor(array_ptr);
+ return;
}
/* call php's original import as a catch-all */
@@ -511,7 +511,7 @@
unsigned int script_name_len = script_name ?
strlen(script_name) : 0;
char *path_info = sapi_cgibin_getenv("PATH_INFO",
sizeof("PATH_INFO")-1 TSRMLS_CC);
unsigned int path_info_len = path_info ? strlen(path_info) : 0;
-
+
php_self_len = script_name_len + path_info_len;
php_self = emalloc(php_self_len + 1);
@@ -542,9 +542,9 @@
if (fcgi_is_fastcgi() && CGIG(fcgi_logging)) {
fcgi_request *request;
-
+
request = (fcgi_request*) SG(server_context);
- if (request) {
+ if (request) {
int len = strlen(message);
char *buf = malloc(len+2);
@@ -565,7 +565,7 @@
{
/* flush only when SAPI was started. The reasons are:
1. SAPI Deactivate is called from two places: module init and
request shutdown
- 2. When the first call occurs and the request is not set up,
flush fails on
+ 2. When the first call occurs and the request is not set up,
flush fails on
FastCGI.
*/
if (SG(sapi_started)) {
@@ -672,14 +672,14 @@
for:
PATH_INFO
- derived from the portion of the URI path following
+ derived from the portion of the URI path following
the script name but preceding any query data
may be empty
PATH_TRANSLATED
- derived by taking any path-info component of the
- request URI and performing any virtual-to-physical
- translation appropriate to map it onto the server's
+ derived by taking any path-info component of the
+ request URI and performing any virtual-to-physical
+ translation appropriate to map it onto the server's
document repository structure
empty if PATH_INFO is empty
@@ -696,7 +696,7 @@
uri section following the domain:port part of a URI
SCRIPT_FILENAME
- The virtual-to-physical translation of SCRIPT_NAME (as per
+ The virtual-to-physical translation of SCRIPT_NAME (as per
PATH_TRANSLATED)
These settings are documented at
@@ -704,29 +704,29 @@
Based on the following URL request:
-
- http://localhost/info.php/test?a=b
-
+
+ http://localhost/info.php/test?a=b
+
should produce, which btw is the same as if
we were running under mod_cgi on apache (ie. not
using ScriptAlias directives):
-
+
PATH_INFO=/test
PATH_TRANSLATED=/docroot/test
SCRIPT_NAME=/info.php
REQUEST_URI=/info.php/test?a=b
SCRIPT_FILENAME=/docroot/info.php
QUERY_STRING=a=b
-
+
but what we get is (cgi/mod_fastcgi under apache):
-
+
PATH_INFO=/info.php/test
PATH_TRANSLATED=/docroot/info.php/test
SCRIPT_NAME=/php/php-cgi (from the Action setting I suppose)
REQUEST_URI=/info.php/test?a=b
SCRIPT_FILENAME=/path/to/php/bin/php-cgi (Action setting translated)
QUERY_STRING=a=b
-
+
Comments in the code below refer to using the above URL in a request
*/
@@ -779,7 +779,7 @@
env_path_info = _sapi_cgibin_putenv("PATH_INFO",
env_path_info TSRMLS_CC);
}
- if (CGIG(fix_pathinfo)) {
+ if (CGIG(fix_pathinfo)) {
struct stat st;
char *real_path = NULL;
char *env_redirect_url =
sapi_cgibin_getenv("REDIRECT_URL", sizeof("REDIRECT_URL")-1 TSRMLS_CC);
@@ -797,7 +797,7 @@
}
if (env_path_translated != NULL && env_redirect_url !=
NULL) {
- /*
+ /*
pretty much apache specific. If we have a
redirect_url
then our script_filename and script_name
point to the
php executable
@@ -812,7 +812,7 @@
__riscosify_control |= __RISCOSIFY_DONT_CHECK_DIR;
script_path_translated =
__unixify(script_path_translated, 0, NULL, 1, 0);
#endif
-
+
/*
* if the file doesn't exist, try to extract PATH_INFO
out
* of it by stat'ing back through the '/'
@@ -885,7 +885,7 @@
int l =
strlen(env_document_root);
int path_translated_len
= 0;
char *path_translated =
NULL;
-
+
if (l &&
env_document_root[l - 1] == '/') {
--l;
}
@@ -908,7 +908,7 @@
}
env_path_translated =
_sapi_cgibin_putenv("PATH_TRANSLATED", path_translated TSRMLS_CC);
efree(path_translated);
- } else if (env_script_name &&
+ } else if (env_script_name &&
strstr(pt,
env_script_name)
) {
/* PATH_TRANSLATED =
PATH_TRANSLATED - SCRIPT_NAME + PATH_INFO */
@@ -1019,7 +1019,7 @@
SG(request_info).query_string =
sapi_cgibin_getenv("QUERY_STRING", sizeof("QUERY_STRING")-1 TSRMLS_CC);
SG(request_info).content_type = (content_type ? content_type :
"" );
SG(request_info).content_length = (content_length ?
atoi(content_length) : 0);
-
+
/* The CGI RFC allows servers to pass on unvalidated
Authorization data */
auth = sapi_cgibin_getenv("HTTP_AUTHORIZATION",
sizeof("HTTP_AUTHORIZATION")-1 TSRMLS_CC);
php_handle_auth_data(auth TSRMLS_CC);
@@ -1113,12 +1113,12 @@
static zend_module_entry cgi_module_entry = {
STANDARD_MODULE_HEADER,
"cgi-fcgi",
- NULL,
- PHP_MINIT(cgi),
- PHP_MSHUTDOWN(cgi),
- NULL,
- NULL,
- PHP_MINFO(cgi),
+ NULL,
+ PHP_MINIT(cgi),
+ PHP_MSHUTDOWN(cgi),
+ NULL,
+ NULL,
+ PHP_MINFO(cgi),
NO_VERSION_YET,
STANDARD_MODULE_PROPERTIES
};
@@ -1218,7 +1218,7 @@
/* if we're started on command line, check to see if
we are being started as an 'external' fastcgi
server by accepting a bindpath parameter. */
- case 'd': {
+ case 'd': {
/* define ini entries on command line */
int len = strlen(php_optarg);
char *val;
@@ -1277,23 +1277,22 @@
return FAILURE;
}
- if (cgi) {
- /* check force_cgi after startup, so we have proper output */
- if (CGIG(force_redirect)) {
- /* Apache will generate REDIRECT_STATUS,
- * Netscape and redirect.so will generate
HTTP_REDIRECT_STATUS.
- * redirect.so and installation instructions available
from
- * http://www.koehntopp.de/php.
- * -- [EMAIL PROTECTED]
- */
- if (!getenv("REDIRECT_STATUS")
- && !getenv ("HTTP_REDIRECT_STATUS")
- /* this is to allow a different env var to be
configured
- in case some server does something different
than above */
- && (!CGIG(redirect_status_env) ||
!getenv(CGIG(redirect_status_env)))
- ) {
- SG(sapi_headers).http_response_code = 400;
- PUTS("<b>Security Alert!</b> The PHP CGI cannot
be accessed directly.\n\n\
+ /* check force_cgi after startup, so we have proper output */
+ if (cgi && CGIG(force_redirect)) {
+ /* Apache will generate REDIRECT_STATUS,
+ * Netscape and redirect.so will generate HTTP_REDIRECT_STATUS.
+ * redirect.so and installation instructions available from
+ * http://www.koehntopp.de/php.
+ * -- [EMAIL PROTECTED]
+ */
+ if (!getenv("REDIRECT_STATUS")
+ && !getenv ("HTTP_REDIRECT_STATUS")
+ /* this is to allow a different env var to be configured
+ in case some server does something different than
above */
+ && (!CGIG(redirect_status_env) ||
!getenv(CGIG(redirect_status_env)))
+ ) {
+ SG(sapi_headers).http_response_code = 400;
+ PUTS("<b>Security Alert!</b> The PHP CGI cannot be
accessed directly.\n\n\
<p>This PHP CGI binary was compiled with force-cgi-redirect enabled. This\n\
means that a page will only be served up if the REDIRECT_STATUS CGI variable
is\n\
set, e.g. via an Apache Action directive.</p>\n\
@@ -1304,16 +1303,15 @@
<a href=\"http://php.net/install.windows\">the manual page</a>.</p>\n");
#if defined(ZTS) && !defined(PHP_DEBUG)
- /* XXX we're crashing here in msvc6 debug
builds at
- php_message_handler_for_zend:839 because
- SG(request_info).path_translated is an
invalid pointer.
- It still happens even though I set it to
null, so something
- weird is going on.
- */
- tsrm_shutdown();
+ /* XXX we're crashing here in msvc6 debug builds at
+ php_message_handler_for_zend:839 because
+ SG(request_info).path_translated is an invalid
pointer.
+ It still happens even though I set it to null, so
something
+ weird is going on.
+ */
+ tsrm_shutdown();
#endif
- return FAILURE;
- }
+ return FAILURE;
}
}
@@ -1470,7 +1468,7 @@
while ((c = php_getopt(argc, argv, OPTIONS,
&php_optarg, &php_optind, 0)) != -1) {
switch (c) {
- case 'a': /* interactive mode */
+ case 'a': /* interactive
mode */
printf("Interactive
mode enabled\n\n");
CG(interactive) = 1;
break;
@@ -1479,11 +1477,11 @@
SG(options) |=
SAPI_OPTION_NO_CHDIR;
break;
- case 'e': /* enable extended info
output */
+ case 'e': /* enable extended
info output */
CG(extended_info) = 1;
break;
- case 'f': /* parse file */
+ case 'f': /* parse file */
if (script_file) {
efree(script_file);
}
@@ -1509,7 +1507,7 @@
exit_status = 0;
goto out;
- case 'l': /* syntax check mode */
+ case 'l': /* syntax check mode
*/
no_headers = 1;
behavior =
PHP_MODE_LINT;
break;
@@ -1526,12 +1524,12 @@
goto out;
#if 0 /* not yet operational, see also below ... */
- case '': /* generate indented source
mode*/
+ case '': /* generate indented
source mode*/
behavior=PHP_MODE_INDENT;
break;
#endif
- case 'q': /* do not generate HTTP
headers */
+ case 'q': /* do not generate
HTTP headers */
no_headers = 1;
break;
@@ -1555,7 +1553,7 @@
exit_status = 0;
goto out;
- case 'w':
+ case 'w':
behavior =
PHP_MODE_STRIP;
break;
@@ -1621,10 +1619,10 @@
}
} /* end !cgi && !fastcgi */
- /*
+ /*
we never take stdin if we're (f)cgi, always
rely on the web server giving us the info
- we need in the environment.
+ we need in the environment.
*/
if (SG(request_info).path_translated || cgi || fastcgi)
{
file_handle.type = ZEND_HANDLE_FILENAME;
@@ -1654,7 +1652,7 @@
SG(request_info).no_headers = 1;
}
- /*
+ /*
at this point path_translated will be set if:
1. we are running from shell and got filename
was there
2. we are running as cgi or fastcgi
@@ -1665,7 +1663,7 @@
retval =
php_fopen_primary_script(&file_handle TSRMLS_CC);
}
}
- /*
+ /*
if we are unable to open path_translated and we
are not
running from shell (so fp == NULL), then fail.
*/
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php