]> granicus.if.org Git - php/commitdiff
- Remove track_vars - it is now always on
authorZeev Suraski <zeev@php.net>
Tue, 5 Sep 2000 19:06:29 +0000 (19:06 +0000)
committerZeev Suraski <zeev@php.net>
Tue, 5 Sep 2000 19:06:29 +0000 (19:06 +0000)
- Make the various $HTTP_*_VARS[] arrays be defined always,
  even if they're empty
- Fix Win32 build and warnings

ext/session/session.c
main/main.c
main/network.c
main/php_globals.h
main/php_network.h
main/php_variables.c
main/rfc1867.c
php.ini-dist
php.ini-optimized
php.ini-recommended
win32/php4dllts.dsp

index 4615454a82267d3503f7ee4750b5d16b8c283932..6ddedfcfbf302a9b4d84aaa6dd9b68b93020a9d0 100644 (file)
@@ -244,16 +244,14 @@ static void php_set_session_var(char *name, size_t namelen,
        zval_copy_ctor(state_val_copy);
        state_val_copy->refcount = 0;
 
-       if (PG(register_globals) && PG(track_vars)) {
+       if (PG(register_globals)) {
                zend_set_hash_symbol(state_val_copy, name, namelen, 0, 2, PS(http_session_vars)->value.ht, &EG(symbol_table));
        } else {
                if (PG(register_globals)) {
                        zend_set_hash_symbol(state_val_copy, name, namelen, 0, 1, &EG(symbol_table));
                }
 
-               if (PG(track_vars)) {
-                       zend_set_hash_symbol(state_val_copy, name, namelen, 0, 1, PS(http_session_vars)->value.ht);
-               }
+               zend_set_hash_symbol(state_val_copy, name, namelen, 0, 1, PS(http_session_vars)->value.ht);
        }
 }
 
@@ -261,7 +259,7 @@ static int php_get_session_var(char *name, size_t namelen, zval ***state_var PLS
 {
        HashTable *ht = &EG(symbol_table);
 
-       if (!PG(register_globals) && PG(track_vars))
+       if (!PG(register_globals))
                ht = PS(http_session_vars)->value.ht;
 
        return zend_hash_find(ht, name, namelen + 1, (void **)state_var);
@@ -523,8 +521,7 @@ static void _php_session_decode(const char *val, int vallen PSLS_DC)
 {
        PLS_FETCH();
 
-       if (PG(track_vars))
-               php_session_track_init();
+       php_session_track_init();
        if (PS(serializer)->decode(val, vallen PSLS_CC) == FAILURE) {
                _php_session_destroy(PSLS_C);
                php_error(E_WARNING, "Failed to decode session object. Session has been destroyed.");
@@ -844,8 +841,6 @@ static void _php_session_start(PSLS_D)
        char *p;
        int send_cookie = 1;
        int define_sid = 1;
-       zend_bool register_globals;
-       zend_bool track_vars;
        int module_number = PS(module_number);
        int nrand;
        int lensess;
@@ -856,39 +851,13 @@ static void _php_session_start(PSLS_D)
 
        lensess = strlen(PS(session_name));
        
-       register_globals = INI_BOOL("register_globals");
-       track_vars = INI_BOOL("track_vars");
-
-       if (!register_globals && !track_vars) {
-               php_error(E_ERROR, "The session module will not work if you have disabled track_vars and register_globals. At least one of them must be enabled.");
-               return;
-       }
 
-       if (!track_vars && PS(use_cookies))
-               php_error(E_NOTICE, "Because track_vars is disabled, the session module will not be able to determine whether the user has sent a cookie. SID will always be defined.");
-       
-       /*
-        * If our only resource is the global symbol_table, then check it.
-        * If track_vars are enabled, we prefer these, because they are more
-        * reliable, and we always know whether the user has accepted the 
-        * cookie.
-        */
-       
-       if (register_globals && 
-                       !track_vars &&
-                       !PS(id) &&
-                       zend_hash_find(&EG(symbol_table), PS(session_name),
-                               lensess + 1, (void **) &ppid) == SUCCESS) {
-               PPID2SID;
-               send_cookie = 0;
-       }
-       
        /*
-     * Now check the track_vars. Cookies are preferred, because initially
+     * Cookies are preferred, because initially
         * cookie and get variables will be available. 
         */
 
-       if (!PS(id) && track_vars) {
+       if (!PS(id)) {
                if (zend_hash_find(&EG(symbol_table), "HTTP_COOKIE_VARS",
                                        sizeof("HTTP_COOKIE_VARS"), (void **) &data) == SUCCESS &&
                                (*data)->type == IS_ARRAY &&
@@ -1244,7 +1213,7 @@ static void php_register_var(zval** entry PSLS_DC PLS_DC)
        } else {
                convert_to_string_ex(entry);
 
-               if (!PG(track_vars) || strcmp((*entry)->value.str.val, "HTTP_SESSION_VARS") != 0)
+               if (strcmp((*entry)->value.str.val, "HTTP_SESSION_VARS") != 0)
                        PS_ADD_VARL((*entry)->value.str.val, (*entry)->value.str.len);
        }
 }
index a3887075f14dbc15ddff537b698ff5fb18596173..875290fc355ff4ded97d526f65a92fd85392c185 100644 (file)
@@ -225,7 +225,6 @@ PHP_INI_BEGIN()
        STD_PHP_INI_BOOLEAN("short_open_tag",           "1",            PHP_INI_SYSTEM|PHP_INI_PERDIR,          OnUpdateBool,                   short_tags,                             zend_compiler_globals,  compiler_globals)
        STD_PHP_INI_BOOLEAN("sql.safe_mode",            "0",            PHP_INI_SYSTEM,         OnUpdateBool,                   sql_safe_mode,                  php_core_globals,       core_globals)
        STD_PHP_INI_BOOLEAN("track_errors",                     "0",            PHP_INI_ALL,            OnUpdateBool,                   track_errors,                   php_core_globals,       core_globals)
-       STD_PHP_INI_BOOLEAN("track_vars",                       "1",            PHP_INI_ALL,            OnUpdateBool,                   track_vars,                             php_core_globals,       core_globals)
        STD_PHP_INI_BOOLEAN("y2k_compliance",           "0",            PHP_INI_ALL,            OnUpdateBool,                   y2k_compliance,                 php_core_globals,       core_globals)
 
        STD_PHP_INI_ENTRY("arg_separator",                      "&",            PHP_INI_ALL,            OnUpdateStringUnempty,  arg_separator,                  php_core_globals,       core_globals)
@@ -922,12 +921,10 @@ static inline void php_register_server_variables(ELS_D SLS_DC PLS_DC)
 {
        zval *array_ptr=NULL;
 
-       if (PG(track_vars)) {
-               ALLOC_ZVAL(array_ptr);
-               array_init(array_ptr);
-               INIT_PZVAL(array_ptr);
-               PG(http_globals).server = array_ptr;
-       }
+       ALLOC_ZVAL(array_ptr);
+       array_init(array_ptr);
+       INIT_PZVAL(array_ptr);
+       PG(http_globals)[TRACK_VARS_SERVER] = array_ptr;
 
        /* Server variables */
        if (sapi_module.register_server_variables) {
@@ -954,8 +951,31 @@ static int php_hash_environment(ELS_D SLS_DC PLS_DC)
        char *p;
        unsigned char _gpc_flags[3] = {0,0,0};
        zend_bool have_variables_order;
-
-       PG(http_globals).post = PG(http_globals).get = PG(http_globals).cookie = PG(http_globals).server = PG(http_globals).environment = PG(http_globals).post_files = NULL;
+       zval *dummy_track_vars_array;
+       zend_bool initialized_dummy_track_vars_array=0;
+       int i;
+       char *track_vars_names[] = {
+               "HTTP_POST_VARS",
+               "HTTP_GET_VARS",
+               "HTTP_COOKIE_VARS",
+               "HTTP_SERVER_VARS",
+               "HTTP_ENV_VARS",
+               "HTTP_POST_FILES",
+               NULL
+       };
+       int track_vars_names_length[] = {
+               sizeof("HTTP_POST_VARS"),
+               sizeof("HTTP_GET_VARS"),
+               sizeof("HTTP_COOKIE_VARS"),
+               sizeof("HTTP_SERVER_VARS"),
+               sizeof("HTTP_ENV_VARS"),
+               sizeof("HTTP_POST_FILES")
+       };
+
+
+       for (i=0; i<6; i++) {
+               PG(http_globals)[i] = NULL;
+       }
 
        if (PG(variables_order)) {
                p = PG(variables_order);
@@ -1008,25 +1028,18 @@ static int php_hash_environment(ELS_D SLS_DC PLS_DC)
                php_register_server_variables(ELS_C SLS_CC PLS_CC);
        }
 
-       if (PG(http_globals).post) {
-               zend_hash_update(&EG(symbol_table), "HTTP_POST_VARS", sizeof("HTTP_POST_VARS"), &PG(http_globals).post, sizeof(zval *), NULL);
-       }
-       if (PG(http_globals).get) {
-               zend_hash_update(&EG(symbol_table), "HTTP_GET_VARS", sizeof("HTTP_GET_VARS"), &PG(http_globals).get, sizeof(zval *), NULL);
-       }
-       if (PG(http_globals).cookie) {
-               zend_hash_update(&EG(symbol_table), "HTTP_COOKIE_VARS", sizeof("HTTP_COOKIE_VARS"), &PG(http_globals).cookie, sizeof(zval *), NULL);
-       }
-       if (PG(http_globals).server) {
-               zend_hash_update(&EG(symbol_table), "HTTP_SERVER_VARS", sizeof("HTTP_SERVER_VARS"), &PG(http_globals).server, sizeof(zval *), NULL);
-       }
-       if (PG(http_globals).environment) {
-               zend_hash_update(&EG(symbol_table), "HTTP_ENV_VARS", sizeof("HTTP_ENV_VARS"), &PG(http_globals).environment, sizeof(zval *), NULL);
-       }
-       if (PG(http_globals).post_files) {
-               zend_hash_update(&EG(symbol_table), "HTTP_POST_FILES", sizeof("HTTP_POST_FILES"), &PG(http_globals).post_files, sizeof(zval *),NULL);
+       for (i=0; i<6; i++) {
+               if (!PG(http_globals)[i] && !initialized_dummy_track_vars_array) {
+                       ALLOC_ZVAL(dummy_track_vars_array);
+                       array_init(dummy_track_vars_array);
+                       INIT_PZVAL(dummy_track_vars_array);
+                       initialized_dummy_track_vars_array = 1;
+               } else {
+                       dummy_track_vars_array->refcount++;
+                       PG(http_globals)[i] = dummy_track_vars_array;
+               }
+               zend_hash_update(&EG(symbol_table), track_vars_names[i], track_vars_names_length[i], &PG(http_globals)[i], sizeof(zval *), NULL);
        }
-
        return SUCCESS;
 }
 
@@ -1036,9 +1049,6 @@ static void php_build_argv(char *s, zval *track_vars_array ELS_DC PLS_DC)
        pval *arr, *argc, *tmp;
        int count = 0;
        char *ss, *space;
-
-       if (!PG(register_globals) && !PG(track_vars))
-               return;
        
        ALLOC_ZVAL(arr);
        array_init(arr);
@@ -1084,15 +1094,12 @@ static void php_build_argv(char *s, zval *track_vars_array ELS_DC PLS_DC)
                zend_hash_add(&EG(symbol_table), "argc", sizeof("argc"), &argc, sizeof(zval *), NULL);
        }
 
-       if (PG(track_vars)) {
-               if (PG(register_globals)) {
-                       arr->refcount++;
-                       argc->refcount++;
-               }
-               zend_hash_update(track_vars_array->value.ht, "argv", sizeof("argv"), &arr, sizeof(pval *), NULL);
-               zend_hash_update(track_vars_array->value.ht, "argc", sizeof("argc"), &argc, sizeof(pval *), NULL);
+       if (PG(register_globals)) {
+               arr->refcount++;
+               argc->refcount++;
        }
-
+       zend_hash_update(track_vars_array->value.ht, "argv", sizeof("argv"), &arr, sizeof(pval *), NULL);
+       zend_hash_update(track_vars_array->value.ht, "argc", sizeof("argc"), &argc, sizeof(pval *), NULL);
 }
 
 
index 76f6bdc4a6e07d026fdb14b5f3804db22201fbc8..781fb76c994b0767368eaa698b99646ca84f98e6 100644 (file)
 #include <netinet/in.h>
 #include <netdb.h>
 #include <arpa/inet.h>
+#else
+int             inet_aton(const char *, struct in_addr *);
 #endif
 
+#include "php_network.h"
+
 #ifdef PHP_WIN32
 #undef AF_UNIX
 #endif
@@ -150,7 +154,7 @@ static int php_network_getaddresses(const char *host, struct sockaddr ***sal)
  * port, returns the created socket on success, else returns -1.
  * timeout gives timeout in seconds, 0 means blocking mode.
  */
-int php_hostconnect(char *host, int port, int socktype, int timeout)
+int php_hostconnect(char *host, unsigned short port, int socktype, int timeout)
 {      
        int s;
        struct sockaddr **sal, **psal;
index 37ffe2be9f1ab7cba08add516bd56168734f00ef..f75c168791b3570680a780316ca8adb5da017198 100644 (file)
@@ -42,14 +42,13 @@ extern PHPAPI int core_globals_id;
 extern ZEND_API struct _php_core_globals core_globals;
 #endif
 
-typedef struct _php_http_globals {
-       zval *post;
-       zval *get;
-       zval *cookie;
-       zval *server;
-       zval *environment;
-       zval *post_files;
-} php_http_globals;
+
+#define TRACK_VARS_POST                1
+#define TRACK_VARS_GET         2
+#define TRACK_VARS_COOKIE      3
+#define TRACK_VARS_SERVER      4
+#define TRACK_VARS_ENV         5
+#define TRACK_VARS_FILES       6
 
 struct _php_tick_function_entry;
 
@@ -103,11 +102,10 @@ struct _php_core_globals {
 
        zend_llist tick_functions;
 
-       php_http_globals http_globals;
+       zval *http_globals[6];
 
        zend_bool expose_php;
 
-       zend_bool track_vars;
        zend_bool register_globals;
        zend_bool register_argc_argv;
 
index 7ce11c22ec5aec61c1d7348429e060dbbcc9b537..f448117c99c206b376c5c0bcef032c8986ad0ff0 100644 (file)
  */
 /* $Id$ */
 
-int php_hostconnect(char *host, int port, int socktype, int timeout);
+#ifndef _PHP_NETWORK_H
+#define _PHP_NETWORK_H
+
+int php_hostconnect(char *host, unsigned short port, int socktype, int timeout);
+
+#endif /* _PHP_NETWORK_H */
 
 /*
  * Local variables:
index 3fa22a9c33c4de0dd47e0b712e1aa0fa6ea7b22e..65baee62480a2c1af15bc610688ad96010320742 100644 (file)
@@ -57,7 +57,7 @@ PHPAPI void php_register_variable_ex(char *var, zval *val, pval *track_vars_arra
        zend_bool free_index;
        HashTable *symtable1=NULL;
        HashTable *symtable2=NULL;
-       
+
        if (PG(register_globals)) {
                symtable1 = EG(active_symbol_table);
        }
@@ -69,7 +69,7 @@ PHPAPI void php_register_variable_ex(char *var, zval *val, pval *track_vars_arra
                }
        }
        if (!symtable1) {
-               /* we don't need track_vars, and we're not setting GPC globals either. */
+               /* Nothing to do */
                zval_dtor(val);
                return;
        }
@@ -220,23 +220,19 @@ void php_treat_data(int arg, char *str ELS_DC PLS_DC SLS_DC)
                case PARSE_POST:
                case PARSE_GET:
                case PARSE_COOKIE:
-                       if (PG(track_vars)) {
-                               ALLOC_ZVAL(array_ptr);
-                               array_init(array_ptr);
-                               INIT_PZVAL(array_ptr);
-                               switch (arg) {
-                                       case PARSE_POST:
-                                               PG(http_globals).post = array_ptr;
-                                               break;
-                                       case PARSE_GET:
-                                               PG(http_globals).get = array_ptr;
-                                               break;
-                                       case PARSE_COOKIE:
-                                               PG(http_globals).cookie = array_ptr;
-                                               break;
-                               }
-                       } else {
-                               array_ptr=NULL;
+                       ALLOC_ZVAL(array_ptr);
+                       array_init(array_ptr);
+                       INIT_PZVAL(array_ptr);
+                       switch (arg) {
+                               case PARSE_POST:
+                                       PG(http_globals)[TRACK_VARS_POST] = array_ptr;
+                                       break;
+                               case PARSE_GET:
+                                       PG(http_globals)[TRACK_VARS_GET] = array_ptr;
+                                       break;
+                               case PARSE_COOKIE:
+                                       PG(http_globals)[TRACK_VARS_COOKIE] = array_ptr;
+                                       break;
                        }
                        break;
                default:
@@ -309,12 +305,10 @@ void php_import_environment_variables(ELS_D PLS_DC)
        char **env, *p, *t;
        zval *array_ptr=NULL;
 
-       if (PG(track_vars)) {
-               ALLOC_ZVAL(array_ptr);
-               array_init(array_ptr);
-               INIT_PZVAL(array_ptr);
-               PG(http_globals).environment = array_ptr;
-       }
+       ALLOC_ZVAL(array_ptr);
+       array_init(array_ptr);
+       INIT_PZVAL(array_ptr);
+       PG(http_globals)[TRACK_VARS_ENV] = array_ptr;
 
        for (env = environ; env != NULL && *env != NULL; env++) {
                p = strchr(*env, '=');
index 37fe2c7db0f0bef06842a201c8df4b4ff7a8033e..3b9f4fc534cff611506d8d691c18be0fd42b27cd 100644 (file)
@@ -102,12 +102,10 @@ static void php_mime_split(char *buf, int cnt, char *boundary, zval *array_ptr)
 
        zend_hash_init(&PG(rfc1867_protected_variables), 5, NULL, NULL, 0);
 
-       if (PG(track_vars)) {
-               ALLOC_ZVAL(http_post_files);
-               array_init(http_post_files);
-               INIT_PZVAL(http_post_files);
-               PG(http_globals).post_files = http_post_files;
-       }
+       ALLOC_ZVAL(http_post_files);
+       array_init(http_post_files);
+       INIT_PZVAL(http_post_files);
+       PG(http_globals)[TRACK_VARS_POST] = http_post_files;
 
        ptr = buf;
        rem = cnt;
index 39228fc51121b69316a60fb68aa7eee4c9d1cc46..af572acc8553147327bfbbf99381da89ccb45626 100644 (file)
@@ -181,6 +181,7 @@ warn_plus_overloading       =       Off             ; warn if the + operator is used with strings
 ;;;;;;;;;;;;;;;;;
 ; Data Handling ;
 ;;;;;;;;;;;;;;;;;
+; Note - track_vars is ALWAYS enabled as of PHP 4.0.3
 variables_order                =       "EGPCS" ; This directive describes the order in which PHP registers
                                                                ; GET, POST, Cookie, Environment and Built-in variables (G, P,
                                                                ; C, E & S respectively, often referred to as EGPCS or GPC).
@@ -192,12 +193,14 @@ register_globals  =       On              ; Whether or not to register the EGPCS variables as globa
                                                                ; most sense when coupled with track_vars - in which case you can
                                                                ; access all of the GPC variables through the $HTTP_*_VARS[],
                                                                ; variables.
+                                                               ; You should do your best to write your scripts so that they do
+                                                               ; not require register_globals to be on;  Using form variables
+                                                               ; as globals can easily lead to possible security problems, if
+                                                               ; the code is not very well thought of.
 register_argc_argv     =       On              ; This directive tells PHP whether to declare the argv&argc
                                                                ; variables (that would contain the GET information).  If you
                                                                ; don't use these variables, you should turn it off for
                                                                ; increased performance
-track_vars                     =       On              ; enable the $HTTP_*_VARS[] arrays, where * is one of
-                                                               ; ENV, POST, GET, COOKIE or SERVER.
 gpc_order                      =       "GPC"   ; This directive is deprecated.  Use variables_order instead.
 
 ; Magic quotes
index 425f4f191adb197fe6188baed53e07d7309129b8..901f300dd6d9de7c2c51dd4e36890332b13dbee6 100644 (file)
@@ -182,9 +182,8 @@ register_globals    =       Off             ; Whether or not to register the EGPCS variables as glob
 register_argc_argv     =       Off             ; This directive tells PHP whether to declare the argv&argc
                                                                ; variables (that would contain the GET information).  If you
                                                                ; don't use these variables, you should turn it off for
-                                                               ; increased performance
-track_vars                     =       On              ; enable the $HTTP_*_VARS[] arrays, where * is one of
-                                                               ; ENV, POST, GET, COOKIE or SERVER.
+                                                               ; increased performance (you should try not to use it anyway,
+                                                               ; for less likelihood of security bugs in your code).
 gpc_order                      =       "GPC"   ; This directive is deprecated.  Use variables_order instead.
 
 ; Magic quotes
index 425f4f191adb197fe6188baed53e07d7309129b8..901f300dd6d9de7c2c51dd4e36890332b13dbee6 100644 (file)
@@ -182,9 +182,8 @@ register_globals    =       Off             ; Whether or not to register the EGPCS variables as glob
 register_argc_argv     =       Off             ; This directive tells PHP whether to declare the argv&argc
                                                                ; variables (that would contain the GET information).  If you
                                                                ; don't use these variables, you should turn it off for
-                                                               ; increased performance
-track_vars                     =       On              ; enable the $HTTP_*_VARS[] arrays, where * is one of
-                                                               ; ENV, POST, GET, COOKIE or SERVER.
+                                                               ; increased performance (you should try not to use it anyway,
+                                                               ; for less likelihood of security bugs in your code).
 gpc_order                      =       "GPC"   ; This directive is deprecated.  Use variables_order instead.
 
 ; Magic quotes
index a58509e934358e6253ae4cc4d7d450214d5e7d76..35174c9140dcce41a75edeffd7acaa4f2dae92d7 100644 (file)
@@ -153,6 +153,10 @@ SOURCE=..\main\mergesort.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\main\network.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\main\php_content_types.c\r
 # End Source File\r
 # Begin Source File\r