summaryrefslogtreecommitdiff
path: root/main/php_ini.c
diff options
context:
space:
mode:
authorfoobar <sniper@php.net>2002-05-09 20:03:36 +0000
committerfoobar <sniper@php.net>2002-05-09 20:03:36 +0000
commit42c82bb40dbfa8f1e219a5ffd7e1ebf96150c9d0 (patch)
tree27f36d139dfa45020d9add633fa1c7a11701f50b /main/php_ini.c
parent375d7960a789e233ea56e8a6e3f750291a7cdc1e (diff)
downloadphp-git-42c82bb40dbfa8f1e219a5ffd7e1ebf96150c9d0.tar.gz
Revert the last patches.
Diffstat (limited to 'main/php_ini.c')
-rw-r--r--main/php_ini.c466
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);
- copy.refcount = 0;
- zend_llist_add_element(&extension_lists.functions, &copy);
- } 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);
+ copy.refcount = 0;
+ zend_llist_add_element(&extension_lists.functions, &copy);
+ } 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;
}
/* }}} */