]> granicus.if.org Git - php/commitdiff
request_info.c is giving up
authorZeev Suraski <zeev@php.net>
Thu, 10 Feb 2000 20:03:17 +0000 (20:03 +0000)
committerZeev Suraski <zeev@php.net>
Thu, 10 Feb 2000 20:03:17 +0000 (20:03 +0000)
main/SAPI.h
main/main.c
request_info.c
request_info.h
sapi/cgi/cgi_main.c

index e9e17589a878cb829b65edded8b4158f64bf7110..8b773e7e03ef5c3eff2137650708e43d5bad09c8 100644 (file)
@@ -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;
 
 
index 089fe367bf2caa353775e4b28de0b05e5f859245..558bae1e3ad6fa1562a05098b9e9f61dd756106b 100644 (file)
@@ -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
index 03d5c70329581c8f14a08640b5b4ce4e41ebcc64..24e43453d4d55dad6932094e4b7b28af2d7dc244 100644 (file)
 #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)
 {
index 12933eea4d64fc1deab1c4a3d32988ed755ac6ff..d05cb7b3c39351e853250deeb9c6c99cfa18727e 100644 (file)
@@ -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
index b764bfaa02a290170e4349e1256298debb2fb931..403122f1e2f24a3f023d70e5b75ee55c3d09aecb 100644 (file)
@@ -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':