summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main/SAPI.h3
-rw-r--r--main/main.c1
-rw-r--r--request_info.c66
-rw-r--r--request_info.h1
-rw-r--r--sapi/cgi/cgi_main.c58
5 files changed, 55 insertions, 74 deletions
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("<b>Security Alert!</b> 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':