From: Zeev Suraski Date: Thu, 10 Feb 2000 20:03:17 +0000 (+0000) Subject: request_info.c is giving up X-Git-Tag: BEFORE_SAPI_POST_PATCH_17_FEB_2000~96 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6723bdd9202964ff163fe22883e382cda6f547ba;p=php request_info.c is giving up --- diff --git a/main/SAPI.h b/main/SAPI.h index e9e17589a8..8b773e7e03 100644 --- a/main/SAPI.h +++ b/main/SAPI.h @@ -76,6 +76,9 @@ typedef struct { /* for HTTP authentication */ char *auth_user; char *auth_password; + + /* this is necessary for the CGI SAPI module */ + char *argv0; } sapi_request_info; diff --git a/main/main.c b/main/main.c index 089fe367bf..558bae1e3a 100644 --- a/main/main.c +++ b/main/main.c @@ -831,6 +831,7 @@ int php_module_startup(sapi_module_struct *sf) PG(header_is_being_sent) = 0; SG(request_info).headers_only = 0; + SG(request_info).argv0 = NULL; PG(connection_status) = PHP_CONNECTION_NORMAL; #if HAVE_SETLOCALE diff --git a/request_info.c b/request_info.c index 03d5c70329..24e43453d4 100644 --- a/request_info.c +++ b/request_info.c @@ -19,79 +19,13 @@ #include "php.h" #include "SAPI.h" -#ifndef THREAD_SAFE PHPAPI php_request_info request_info; -#endif - -#if CGI_BINARY -int php_init_request_info(void *conf) -{ - request_info.script_name = getenv("SCRIPT_NAME"); - request_info.script_filename = getenv("SCRIPT_FILENAME"); - /* Hack for annoying servers that do not set SCRIPT_FILENAME for us */ - if (!request_info.script_filename) { - request_info.script_filename = request_info.php_argv0; - } -#if PHP_WIN32 - /* FIXME WHEN APACHE NT IS FIXED */ - /* a hack for apache nt because it does not appear to set argv[1] and sets - script filename to php.exe thus makes us parse php.exe instead of file.php - requires we get the info from path translated. This can be removed at - such a time taht apache nt is fixed */ - else { - request_info.script_filename = getenv("PATH_TRANSLATED"); - } -#endif - - /* doc_root configuration variable is currently ignored, - as it is with every other access method currently also. */ - - /* We always need to emalloc() filename, since it gets placed into - the include file hash table, and gets freed with that table. - Notice that this means that we don't need to efree() it in - php_destroy_request_info()! */ -#if DISCARD_PATH - if (request_info.script_filename) { - SLS_FETCH(); - SG(request_info).path_translated = estrdup(request_info.script_filename); - } else { - SLS_FETCH(); - SG(request_info).path_translated = NULL; - } -#endif - return SUCCESS; -} int php_destroy_request_info(void *conf) { STR_FREE(request_info.current_user); return SUCCESS; } -#endif - - -#if APACHE -int php_init_request_info(void *conf) -{ - request_rec *r; - SLS_FETCH(); - - r = ((request_rec *) SG(server_context)); - - return SUCCESS; -} - -#endif - -#if !CGI_BINARY -int php_destroy_request_info(void *conf) -{ - /* see above for why we don't want to efree() request_info.filename */ - STR_FREE(request_info.current_user); - return SUCCESS; -} -#endif - int php_init_request_info(void *conf) { diff --git a/request_info.h b/request_info.h index 12933eea4d..d05cb7b3c3 100644 --- a/request_info.h +++ b/request_info.h @@ -23,7 +23,6 @@ typedef struct { char *current_user; int current_user_length; const char *script_filename; - char *php_argv0; } php_request_info; #ifndef THREAD_SAFE diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c index b764bfaa02..403122f1e2 100644 --- a/sapi/cgi/cgi_main.c +++ b/sapi/cgi/cgi_main.c @@ -166,9 +166,9 @@ static void sapi_cgi_log_message(char *message) static int sapi_cgi_deactivate(SLS_D) { fflush(stdout); - if(request_info.php_argv0) { - free(request_info.php_argv0); - request_info.php_argv0 = NULL; + if(SG(request_info).argv0) { + free(SG(request_info).argv0); + SG(request_info).argv0 = NULL; } return SUCCESS; } @@ -241,6 +241,43 @@ static void php_cgi_usage(char *argv0) static void init_request_info(SLS_D) { char *content_length = getenv("CONTENT_LENGTH"); + char *script_filename; + + + script_filename = getenv("SCRIPT_FILENAME"); + /* Hack for annoying servers that do not set SCRIPT_FILENAME for us */ + if (!script_filename) { + script_filename = SG(request_info).argv0; + } +#if PHP_WIN32 + /* FIXME WHEN APACHE NT IS FIXED */ + /* a hack for apache nt because it does not appear to set argv[1] and sets + script filename to php.exe thus makes us parse php.exe instead of file.php + requires we get the info from path translated. This can be removed at + such a time taht apache nt is fixed */ + if (script_filename) { + script_filename = getenv("PATH_TRANSLATED"); + } +#endif + + /* doc_root configuration variable is currently ignored, + as it is with every other access method currently also. */ + + /* We always need to emalloc() filename, since it gets placed into + the include file hash table, and gets freed with that table. + Notice that this means that we don't need to efree() it in + php_destroy_request_info()! */ +#if DISCARD_PATH + if (script_filename) { + SLS_FETCH(); + + SG(request_info).path_translated = estrdup(script_filename); + } else { + SLS_FETCH(); + + SG(request_info).path_translated = NULL; + } +#endif SG(request_info).request_method = getenv("REQUEST_METHOD"); SG(request_info).query_string = getenv("QUERY_STRING"); @@ -252,6 +289,8 @@ static void init_request_info(SLS_D) /* CGI does not support HTTP authentication */ SG(request_info).auth_user = NULL; SG(request_info).auth_password = NULL; + + } @@ -283,6 +322,7 @@ int main(int argc, char *argv[]) int free_path_translated=0; int orig_optind=ap_php_optind; char *orig_optarg=ap_php_optarg; + char *argv0=NULL; #if SUPPORT_INTERACTIVE int interactive=0; #endif @@ -322,9 +362,11 @@ int main(int argc, char *argv[]) || getenv("GATEWAY_INTERFACE") || getenv("REQUEST_METHOD")) { cgi = 1; - if (argc > 1) - request_info.php_argv0 = strdup(argv[1]); - else request_info.php_argv0 = NULL; + if (argc > 1) { + argv0 = strdup(argv[1]); + } else { + argv0 = NULL; + } #if FORCE_CGI_REDIRECT if (!getenv("REDIRECT_STATUS")) { PUTS("Security Alert! PHP CGI cannot be accessed directly.\n\ @@ -379,8 +421,10 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine SG(server_context) = (void *) 1; /* avoid server_context==NULL checks */ CG(extended_info) = 0; + SG(request_info).argv0 = argv0; + if (!cgi) { /* never execute the arguments if you are a CGI */ - request_info.php_argv0 = NULL; + SG(request_info).argv0 = NULL; while ((c = ap_php_getopt(argc, argv, "c:d:qvisnaeh?vf:")) != -1) { switch (c) { case 'f':