diff options
author | foobar <sniper@php.net> | 2002-05-09 20:03:36 +0000 |
---|---|---|
committer | foobar <sniper@php.net> | 2002-05-09 20:03:36 +0000 |
commit | 42c82bb40dbfa8f1e219a5ffd7e1ebf96150c9d0 (patch) | |
tree | 27f36d139dfa45020d9add633fa1c7a11701f50b /main/php_ini.c | |
parent | 375d7960a789e233ea56e8a6e3f750291a7cdc1e (diff) | |
download | php-git-42c82bb40dbfa8f1e219a5ffd7e1ebf96150c9d0.tar.gz |
Revert the last patches.
Diffstat (limited to 'main/php_ini.c')
-rw-r--r-- | main/php_ini.c | 466 |
1 files changed, 235 insertions, 231 deletions
diff --git a/main/php_ini.c b/main/php_ini.c index aaad0942c9..623d21d8b4 100644 --- a/main/php_ini.c +++ b/main/php_ini.c @@ -32,8 +32,8 @@ #include "php_main.h" typedef struct _php_extension_lists { - zend_llist engine; - zend_llist functions; + zend_llist engine; + zend_llist functions; } php_extension_lists; @@ -46,36 +46,36 @@ static php_extension_lists extension_lists; */ static void php_ini_displayer_cb(zend_ini_entry *ini_entry, int type) { - if (ini_entry->displayer) { - ini_entry->displayer(ini_entry, type); - } else { - char *display_string; - uint display_string_length, esc_html=0; - TSRMLS_FETCH(); - - if (type==ZEND_INI_DISPLAY_ORIG && ini_entry->modified) { - if (ini_entry->orig_value && ini_entry->orig_value[0]) { - display_string = ini_entry->orig_value; - display_string_length = ini_entry->orig_value_length; - esc_html=1; - } else { - display_string = "<i>no value</i>"; - display_string_length = sizeof("<i>no value</i>")-1; - } - } else if (ini_entry->value && ini_entry->value[0]) { - display_string = ini_entry->value; - display_string_length = ini_entry->value_length; - esc_html=1; - } else { - display_string = "<i>no value</i>"; - display_string_length = sizeof("<i>no value</i>")-1; - } - if(esc_html) { - php_html_puts(display_string, display_string_length TSRMLS_CC); - } else { - PHPWRITE(display_string, display_string_length); - } - } + if (ini_entry->displayer) { + ini_entry->displayer(ini_entry, type); + } else { + char *display_string; + uint display_string_length, esc_html=0; + TSRMLS_FETCH(); + + if (type==ZEND_INI_DISPLAY_ORIG && ini_entry->modified) { + if (ini_entry->orig_value && ini_entry->orig_value[0]) { + display_string = ini_entry->orig_value; + display_string_length = ini_entry->orig_value_length; + esc_html=1; + } else { + display_string = "<i>no value</i>"; + display_string_length = sizeof("<i>no value</i>")-1; + } + } else if (ini_entry->value && ini_entry->value[0]) { + display_string = ini_entry->value; + display_string_length = ini_entry->value_length; + esc_html=1; + } else { + display_string = "<i>no value</i>"; + display_string_length = sizeof("<i>no value</i>")-1; + } + if(esc_html) { + php_html_puts(display_string, display_string_length TSRMLS_CC); + } else { + PHPWRITE(display_string, display_string_length); + } + } } /* }}} */ @@ -83,19 +83,19 @@ static void php_ini_displayer_cb(zend_ini_entry *ini_entry, int type) */ static int php_ini_displayer(zend_ini_entry *ini_entry, int module_number TSRMLS_DC) { - if (ini_entry->module_number != module_number) { - return 0; - } - - PUTS("<tr valign=\"baseline\" bgcolor=\"" PHP_CONTENTS_COLOR "\">"); - PUTS("<td bgcolor=\"" PHP_ENTRY_NAME_COLOR "\"><b>"); - PHPWRITE(ini_entry->name, ini_entry->name_length-1); - PUTS("</b><br /></td><td align=\"center\">"); - php_ini_displayer_cb(ini_entry, ZEND_INI_DISPLAY_ACTIVE); - PUTS("</td><td align=\"center\">"); - php_ini_displayer_cb(ini_entry, ZEND_INI_DISPLAY_ORIG); - PUTS("</td></tr>\n"); - return 0; + if (ini_entry->module_number != module_number) { + return 0; + } + + PUTS("<tr valign=\"baseline\" bgcolor=\"" PHP_CONTENTS_COLOR "\">"); + PUTS("<td bgcolor=\"" PHP_ENTRY_NAME_COLOR "\"><b>"); + PHPWRITE(ini_entry->name, ini_entry->name_length-1); + PUTS("</b><br /></td><td align=\"center\">"); + php_ini_displayer_cb(ini_entry, ZEND_INI_DISPLAY_ACTIVE); + PUTS("</td><td align=\"center\">"); + php_ini_displayer_cb(ini_entry, ZEND_INI_DISPLAY_ORIG); + PUTS("</td></tr>\n"); + return 0; } /* }}} */ @@ -103,18 +103,18 @@ static int php_ini_displayer(zend_ini_entry *ini_entry, int module_number TSRMLS */ PHPAPI void display_ini_entries(zend_module_entry *module) { - int module_number; - TSRMLS_FETCH(); - - if (module) { - module_number = module->module_number; - } else { - module_number = 0; - } - php_info_print_table_start(); - php_info_print_table_header(3, "Directive", "Local Value", "Master Value"); - zend_hash_apply_with_argument(&EG(ini_directives), (apply_func_arg_t) php_ini_displayer, (void *) (long) module_number TSRMLS_CC); - php_info_print_table_end(); + int module_number; + TSRMLS_FETCH(); + + if (module) { + module_number = module->module_number; + } else { + module_number = 0; + } + php_info_print_table_start(); + php_info_print_table_header(3, "Directive", "Local Value", "Master Value"); + zend_hash_apply_with_argument(&EG(ini_directives), (apply_func_arg_t) php_ini_displayer, (void *) (long) module_number TSRMLS_CC); + php_info_print_table_end(); } /* }}} */ @@ -122,22 +122,22 @@ PHPAPI void display_ini_entries(zend_module_entry *module) #ifdef ZTS # if (ZEND_DEBUG) -# define ZEND_EXTENSION_TOKEN "zend_extension_debug_ts" +# define ZEND_EXTENSION_TOKEN "zend_extension_debug_ts" # else -# define ZEND_EXTENSION_TOKEN "zend_extension_ts" +# define ZEND_EXTENSION_TOKEN "zend_extension_ts" # endif #else # if (ZEND_DEBUG) -# define ZEND_EXTENSION_TOKEN "zend_extension_debug" +# define ZEND_EXTENSION_TOKEN "zend_extension_debug" # else -# define ZEND_EXTENSION_TOKEN "zend_extension" +# define ZEND_EXTENSION_TOKEN "zend_extension" # endif #endif /* {{{ pvalue_config_destructor */ static void pvalue_config_destructor(zval *pvalue) -{ +{ if (Z_TYPE_P(pvalue) == IS_STRING && Z_STRVAL_P(pvalue) != empty_string) { free(Z_STRVAL_P(pvalue)); } @@ -148,33 +148,33 @@ static void pvalue_config_destructor(zval *pvalue) */ static void php_config_ini_parser_cb(zval *arg1, zval *arg2, int callback_type, void *arg) { - switch (callback_type) { - case ZEND_INI_PARSER_ENTRY: { - zval *entry; - - if (!arg2) { - break; - } - if (!strcasecmp(Z_STRVAL_P(arg1), "extension")) { /* load function module */ - zval copy; - - copy = *arg2; - zval_copy_ctor(©); - copy.refcount = 0; - zend_llist_add_element(&extension_lists.functions, ©); - } else if (!strcasecmp(Z_STRVAL_P(arg1), ZEND_EXTENSION_TOKEN)) { /* load Zend extension */ - char *extension_name = estrndup(Z_STRVAL_P(arg2), Z_STRLEN_P(arg2)); - - zend_llist_add_element(&extension_lists.engine, &extension_name); - } else { - zend_hash_update(&configuration_hash, Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, arg2, sizeof(zval), (void **) &entry); - Z_STRVAL_P(entry) = zend_strndup(Z_STRVAL_P(entry), Z_STRLEN_P(entry)); - } - } - break; - case ZEND_INI_PARSER_SECTION: - break; - } + switch (callback_type) { + case ZEND_INI_PARSER_ENTRY: { + zval *entry; + + if (!arg2) { + break; + } + if (!strcasecmp(Z_STRVAL_P(arg1), "extension")) { /* load function module */ + zval copy; + + copy = *arg2; + zval_copy_ctor(©); + copy.refcount = 0; + zend_llist_add_element(&extension_lists.functions, ©); + } else if (!strcasecmp(Z_STRVAL_P(arg1), ZEND_EXTENSION_TOKEN)) { /* load Zend extension */ + char *extension_name = estrndup(Z_STRVAL_P(arg2), Z_STRLEN_P(arg2)); + + zend_llist_add_element(&extension_lists.engine, &extension_name); + } else { + zend_hash_update(&configuration_hash, Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, arg2, sizeof(zval), (void **) &entry); + Z_STRVAL_P(entry) = zend_strndup(Z_STRVAL_P(entry), Z_STRLEN_P(entry)); + } + } + break; + case ZEND_INI_PARSER_SECTION: + break; + } } /* }}} */ @@ -182,10 +182,10 @@ static void php_config_ini_parser_cb(zval *arg1, zval *arg2, int callback_type, */ static void php_load_function_extension_cb(void *arg TSRMLS_DC) { - zval *extension = (zval *) arg; - zval zval; + zval *extension = (zval *) arg; + zval zval; - php_dl(extension, MODULE_PERSISTENT, &zval TSRMLS_CC); + php_dl(extension, MODULE_PERSISTENT, &zval TSRMLS_CC); } /* }}} */ @@ -193,7 +193,7 @@ static void php_load_function_extension_cb(void *arg TSRMLS_DC) */ static void php_load_zend_extension_cb(void *arg TSRMLS_DC) { - zend_load_extension(*((char **) arg)); + zend_load_extension(*((char **) arg)); } /* }}} */ @@ -201,103 +201,107 @@ static void php_load_zend_extension_cb(void *arg TSRMLS_DC) */ int php_init_config(char *php_ini_path_override) { - int safe_mode_state; - char *open_basedir; - zend_file_handle fh; - TSRMLS_FETCH(); - - if (zend_hash_init(&configuration_hash, 0, NULL, (dtor_func_t) pvalue_config_destructor, 1)==FAILURE) { - return FAILURE; - } - - zend_llist_init(&extension_lists.engine, sizeof(char *), (llist_dtor_func_t) free_estring, 1); - zend_llist_init(&extension_lists.functions, sizeof(zval), (llist_dtor_func_t) ZVAL_DESTRUCTOR, 1); - - safe_mode_state = PG(safe_mode); - open_basedir = PG(open_basedir); - PG(safe_mode) = 0; - PG(open_basedir) = NULL; - - fh.handle.fp = NULL; - - /* If no override given (usually from the command line) then check the environment. */ - if (!php_ini_path_override) { - php_ini_path_override = getenv("PHPRC"); - } - if (php_ini_path_override && *php_ini_path_override) { - - /* Try to open php_ini_path_override if not a directory. */ - struct stat st; - if ((0 == VCWD_STAT(php_ini_path_override, &st)) && (S_IFDIR != (st.st_mode & S_IFMT))) { - fh.handle.fp = VCWD_FOPEN(php_ini_path_override, "r"); - if (fh.handle.fp) { - php_ini_opened_path = estrdup(php_ini_path_override); - } - } - - /* If we did not manage to open php_ini_path_override then search it as a directory. */ - if (!fh.handle.fp) { - fh.handle.fp = php_fopen_with_path("php.ini", "r", php_ini_path_override, &php_ini_opened_path TSRMLS_CC); - } - - } - -#define INI_CHECK_CWD -#ifdef INI_CHECK_CWD - if (!fh.handle.fp && (0 != strcmp(sapi_module.name, "cli"))) { - /* Search the current directory - possible security risk? */ - fh.handle.fp = php_fopen_with_path("php.ini", "r", ".", &php_ini_opened_path TSRMLS_CC); - } -#endif + char *env_location, *php_ini_search_path; + int safe_mode_state; + char *open_basedir; + int free_ini_search_path=0; + zend_file_handle fh; + TSRMLS_FETCH(); + + if (zend_hash_init(&configuration_hash, 0, NULL, (dtor_func_t) pvalue_config_destructor, 1)==FAILURE) { + return FAILURE; + } + + zend_llist_init(&extension_lists.engine, sizeof(char *), (llist_dtor_func_t) free_estring, 1); + zend_llist_init(&extension_lists.functions, sizeof(zval), (llist_dtor_func_t) ZVAL_DESTRUCTOR, 1); + + safe_mode_state = PG(safe_mode); + open_basedir = PG(open_basedir); + + env_location = getenv("PHPRC"); + if (!env_location) { + env_location=""; + } + if (php_ini_path_override) { + php_ini_search_path = php_ini_path_override; + free_ini_search_path = 0; + } else { + char *default_location; + int free_default_location; #ifdef PHP_WIN32 - if (!fh.handle.fp) { - /* Search for php.ini in the same directory as the executable. */ - char search_path[MAX_PATH]; - if (GetModuleFileName(0,search_path,sizeof(search_path))) { - char* p = strrchr(search_path,'\\'); - if (p) *++p = 0; - fh.handle.fp = php_fopen_with_path("php.ini", "r", search_path, &php_ini_opened_path TSRMLS_CC); - } - } - if (!fh.handle.fp) { - /* Search for php.ini in the Windows base directory. */ - char search_path[MAX_PATH]; - if (GetWindowsDirectory(search_path,sizeof(search_path))) { - fh.handle.fp = php_fopen_with_path("php.ini", "r", search_path, &php_ini_opened_path TSRMLS_CC); - } - } + default_location = (char *) emalloc(512); + + if (!GetWindowsDirectory(default_location, 255)) { + default_location[0]=0; + } + free_default_location=1; #else - if (!fh.handle.fp) { - /* Search for php.ini in the (platform-specific) default places. */ - fh.handle.fp = php_fopen_with_path("php.ini", "r", PHP_CONFIG_FILE_PATH, &php_ini_opened_path TSRMLS_CC); - } + default_location = PHP_CONFIG_FILE_PATH; + free_default_location=0; #endif - - PG(safe_mode) = safe_mode_state; - PG(open_basedir) = open_basedir; - - if (!fh.handle.fp) { - return SUCCESS; /* having no configuration file is ok */ - } - fh.type = ZEND_HANDLE_FP; - fh.filename = php_ini_opened_path; - - zend_parse_ini_file(&fh, 1, php_config_ini_parser_cb, &extension_lists); - - /* If we succeeded in opening an INI file, preserve the name of the file opened. */ - if (php_ini_opened_path) { - zval tmp; - - Z_STRLEN(tmp) = strlen(php_ini_opened_path); - Z_STRVAL(tmp) = zend_strndup(php_ini_opened_path, Z_STRLEN(tmp)); - Z_TYPE(tmp) = IS_STRING; - zend_hash_update(&configuration_hash, "cfg_file_path", sizeof("cfg_file_path"), (void *) &tmp, sizeof(zval), NULL); - efree(php_ini_opened_path); - php_ini_opened_path = zend_strndup(Z_STRVAL(tmp), Z_STRLEN(tmp)); - } - - return SUCCESS; + php_ini_search_path = (char *) emalloc(sizeof(".")+strlen(env_location)+strlen(default_location)+2+1); + free_ini_search_path = 1; + if (strcmp(sapi_module.name, "cli")==0) { + if(env_location && env_location[0]) { + sprintf(php_ini_search_path, "%s%c%s", env_location, ZEND_PATHS_SEPARATOR, default_location); + } else { + sprintf(php_ini_search_path, "%s", default_location); + } + } else { + if(env_location && env_location[0]) { + sprintf(php_ini_search_path, ".%c%s%c%s", ZEND_PATHS_SEPARATOR, env_location, ZEND_PATHS_SEPARATOR, default_location); + } else { + sprintf(php_ini_search_path, ".%c%s", ZEND_PATHS_SEPARATOR, default_location); + } + } + if (free_default_location) { + efree(default_location); + } + } + + PG(safe_mode) = 0; + PG(open_basedir) = NULL; + + fh.handle.fp = NULL; + /* Check if php_ini_path_override is a file */ + if (php_ini_path_override && php_ini_path_override[0]) { + struct stat statbuf; + if (!VCWD_STAT(php_ini_path_override, &statbuf)) { + if (!((statbuf.st_mode & S_IFMT) == S_IFDIR)) { + fh.handle.fp = VCWD_FOPEN(php_ini_path_override, "r"); + } + } + } + /* Search php.ini file in search path */ + if (!fh.handle.fp) + fh.handle.fp = php_fopen_with_path("php.ini", "r", php_ini_search_path, &php_ini_opened_path TSRMLS_CC); + if (free_ini_search_path) { + efree(php_ini_search_path); + } + PG(safe_mode) = safe_mode_state; + PG(open_basedir) = open_basedir; + + if (!fh.handle.fp) { + return SUCCESS; /* having no configuration file is ok */ + } + fh.type = ZEND_HANDLE_FP; + fh.filename = php_ini_opened_path; + + zend_parse_ini_file(&fh, 1, php_config_ini_parser_cb, &extension_lists); + + if (php_ini_opened_path) { + zval tmp; + + Z_STRLEN(tmp) = strlen(php_ini_opened_path); + Z_STRVAL(tmp) = zend_strndup(php_ini_opened_path, Z_STRLEN(tmp)); + Z_TYPE(tmp) = IS_STRING; + zend_hash_update(&configuration_hash, "cfg_file_path", sizeof("cfg_file_path"), (void *) &tmp, sizeof(zval), NULL); + efree(php_ini_opened_path); + php_ini_opened_path = zend_strndup(Z_STRVAL(tmp), Z_STRLEN(tmp)); + } + + return SUCCESS; } /* }}} */ @@ -305,11 +309,11 @@ int php_init_config(char *php_ini_path_override) */ int php_shutdown_config(void) { - zend_hash_destroy(&configuration_hash); - if (php_ini_opened_path) { - free(php_ini_opened_path); - } - return SUCCESS; + zend_hash_destroy(&configuration_hash); + if (php_ini_opened_path) { + free(php_ini_opened_path); + } + return SUCCESS; } /* }}} */ @@ -317,11 +321,11 @@ int php_shutdown_config(void) */ void php_ini_delayed_modules_startup(TSRMLS_D) { - zend_llist_apply(&extension_lists.engine, php_load_zend_extension_cb TSRMLS_CC); - zend_llist_apply(&extension_lists.functions, php_load_function_extension_cb TSRMLS_CC); + zend_llist_apply(&extension_lists.engine, php_load_zend_extension_cb TSRMLS_CC); + zend_llist_apply(&extension_lists.functions, php_load_function_extension_cb TSRMLS_CC); - zend_llist_destroy(&extension_lists.engine); - zend_llist_destroy(&extension_lists.functions); + zend_llist_destroy(&extension_lists.engine); + zend_llist_destroy(&extension_lists.functions); } /* }}} */ @@ -329,13 +333,13 @@ void php_ini_delayed_modules_startup(TSRMLS_D) */ zval *cfg_get_entry(char *name, uint name_length) { - zval *tmp; + zval *tmp; - if (zend_hash_find(&configuration_hash, name, name_length, (void **) &tmp)==SUCCESS) { - return tmp; - } else { - return NULL; - } + if (zend_hash_find(&configuration_hash, name, name_length, (void **) &tmp)==SUCCESS) { + return tmp; + } else { + return NULL; + } } /* }}} */ @@ -343,17 +347,17 @@ zval *cfg_get_entry(char *name, uint name_length) */ PHPAPI int cfg_get_long(char *varname, long *result) { - zval *tmp, var; - - if (zend_hash_find(&configuration_hash, varname, strlen(varname)+1, (void **) &tmp)==FAILURE) { - *result=(long)NULL; - return FAILURE; - } - var = *tmp; - zval_copy_ctor(&var); - convert_to_long(&var); - *result = Z_LVAL(var); - return SUCCESS; + zval *tmp, var; + + if (zend_hash_find(&configuration_hash, varname, strlen(varname)+1, (void **) &tmp)==FAILURE) { + *result=(long)NULL; + return FAILURE; + } + var = *tmp; + zval_copy_ctor(&var); + convert_to_long(&var); + *result = Z_LVAL(var); + return SUCCESS; } /* }}} */ @@ -361,17 +365,17 @@ PHPAPI int cfg_get_long(char *varname, long *result) */ PHPAPI int cfg_get_double(char *varname, double *result) { - zval *tmp, var; - - if (zend_hash_find(&configuration_hash, varname, strlen(varname)+1, (void **) &tmp)==FAILURE) { - *result=(double)0; - return FAILURE; - } - var = *tmp; - zval_copy_ctor(&var); - convert_to_double(&var); - *result = Z_DVAL(var); - return SUCCESS; + zval *tmp, var; + + if (zend_hash_find(&configuration_hash, varname, strlen(varname)+1, (void **) &tmp)==FAILURE) { + *result=(double)0; + return FAILURE; + } + var = *tmp; + zval_copy_ctor(&var); + convert_to_double(&var); + *result = Z_DVAL(var); + return SUCCESS; } /* }}} */ @@ -379,14 +383,14 @@ PHPAPI int cfg_get_double(char *varname, double *result) */ PHPAPI int cfg_get_string(char *varname, char **result) { - zval *tmp; - - if (zend_hash_find(&configuration_hash, varname, strlen(varname)+1, (void **) &tmp)==FAILURE) { - *result=NULL; - return FAILURE; - } - *result = Z_STRVAL_P(tmp); - return SUCCESS; + zval *tmp; + + if (zend_hash_find(&configuration_hash, varname, strlen(varname)+1, (void **) &tmp)==FAILURE) { + *result=NULL; + return FAILURE; + } + *result = Z_STRVAL_P(tmp); + return SUCCESS; } /* }}} */ |