From e5e6f553a25f972500b792170e03b5903ee924dd Mon Sep 17 00:00:00 2001 From: Jani Taskinen Date: Wed, 13 Aug 2008 00:53:28 +0000 Subject: [PATCH] MFH --- Makefile.global | 9 ++++++-- ext/standard/info.c | 10 +++------ main/php_ini.c | 44 ++++++++++++++++++++++++++++++++-------- sapi/cgi/cgi_main.c | 11 ---------- sapi/cli/php_cli.c | 6 ------ sapi/milter/php_milter.c | 8 +------- 6 files changed, 46 insertions(+), 42 deletions(-) diff --git a/Makefile.global b/Makefile.global index e0d4596ebc..6a62d72478 100644 --- a/Makefile.global +++ b/Makefile.global @@ -87,16 +87,21 @@ test: all CC="$(CC)" \ $(PHP_EXECUTABLE) $(PHP_TEST_SETTINGS) $(top_srcdir)/run-tests.php -d extension_dir=modules/ $(PHP_TEST_SHARED_EXTENSIONS) tests/; \ elif test ! -z "$(SAPI_CLI_PATH)" && test -x "$(SAPI_CLI_PATH)"; then \ - INI_FILE=`$(top_builddir)/$(SAPI_CLI_PATH) -r 'echo php_ini_loaded_file();'`; \ + INI_FILE=`$(top_builddir)/$(SAPI_CLI_PATH) -d 'display_errors=stderr' -r 'echo php_ini_loaded_file();' 2> /dev/null`; \ if test "$$INI_FILE"; then \ $(EGREP) -v '^(zend_)?extension(_debug)?(_ts)?[\t\ ]*=' "$$INI_FILE" > $(top_builddir)/tmp-php.ini; \ else \ echo > $(top_builddir)/tmp-php.ini; \ fi; \ + INI_SCANNED_PATH=`$(top_builddir)/$(SAPI_CLI_PATH) -d 'display_errors=stderr' -r '$$a = explode(",\n", trim(php_ini_scanned_files())); echo $$a[0];' 2> /dev/null`; \ + if test "$$INI_SCANNED_PATH"; then \ + INI_SCANNED_PATH=`$(top_srcdir)/build/shtool path -d $$INI_SCANNED_PATH`; \ + $(EGREP) -h -v '^(zend_)?extension(_debug)?(_ts)?[\t\ ]*=' "$$INI_SCANNED_PATH"/*.ini >> $(top_builddir)/tmp-php.ini; \ + fi; \ TEST_PHP_EXECUTABLE=$(top_builddir)/$(SAPI_CLI_PATH) \ TEST_PHP_SRCDIR=$(top_srcdir) \ CC="$(CC)" \ - $(top_builddir)/$(SAPI_CLI_PATH) $(PHP_TEST_SETTINGS) $(top_srcdir)/run-tests.php -c $(top_builddir)/tmp-php.ini -d extension_dir=$(top_builddir)/modules/ $(PHP_TEST_SHARED_EXTENSIONS) $(TESTS); \ + $(top_builddir)/$(SAPI_CLI_PATH) -n -c $(top_builddir)/tmp-php.ini $(PHP_TEST_SETTINGS) $(top_srcdir)/run-tests.php -n -c $(top_builddir)/tmp-php.ini -d extension_dir=$(top_builddir)/modules/ $(PHP_TEST_SHARED_EXTENSIONS) $(TESTS); \ else \ echo "ERROR: Cannot run tests without CLI sapi."; \ fi diff --git a/ext/standard/info.c b/ext/standard/info.c index 11c664fbfd..85b8be25cd 100644 --- a/ext/standard/info.c +++ b/ext/standard/info.c @@ -57,6 +57,7 @@ ZEND_EXTERN_MODULE_GLOBALS(iconv) } \ PHPAPI extern char *php_ini_opened_path; +PHPAPI extern char *php_ini_scanned_path; PHPAPI extern char *php_ini_scanned_files; static int php_info_write_wrapper(const char *str, uint str_length) @@ -483,14 +484,9 @@ PHPAPI void php_print_info(int flag TSRMLS_DC) php_info_print_table_row(2, "Configuration File (php.ini) Path", PHP_CONFIG_FILE_PATH); php_info_print_table_row(2, "Loaded Configuration File", php_ini_opened_path ? php_ini_opened_path : "(none)"); + php_info_print_table_row(2, "Scan this dir for additional .ini files", php_ini_scanned_path ? php_ini_scanned_path : "(none)"); + php_info_print_table_row(2, "additional .ini files parsed", php_ini_scanned_files ? php_ini_scanned_files : "(none)"); - if (strlen(PHP_CONFIG_FILE_SCAN_DIR)) { - php_info_print_table_row(2, "Scan this dir for additional .ini files", PHP_CONFIG_FILE_SCAN_DIR); - if (php_ini_scanned_files) { - php_info_print_table_row(2, "additional .ini files parsed", php_ini_scanned_files); - } - } - snprintf(temp_api, sizeof(temp_api), "%d", PHP_API_VERSION); php_info_print_table_row(2, "PHP API", temp_api); diff --git a/main/php_ini.c b/main/php_ini.c index 6affa2c7d1..b6db472d1f 100644 --- a/main/php_ini.c +++ b/main/php_ini.c @@ -54,6 +54,7 @@ static int has_per_dir_config = 0; static int has_per_host_config = 0; PHPAPI char *php_ini_opened_path=NULL; static php_extension_lists extension_lists; +PHPAPI char *php_ini_scanned_path=NULL; PHPAPI char *php_ini_scanned_files=NULL; /* {{{ php_ini_displayer_cb @@ -520,9 +521,18 @@ int php_init_config(TSRMLS_D) PG(safe_mode) = 0; PG(open_basedir) = NULL; + /* + * Find and open actual ini file + */ + memset(&fh, 0, sizeof(fh)); - /* Check if php_ini_path_override is a file */ - if (!sapi_module.php_ini_ignore) { + + /* If SAPI does not want to ignore all ini files OR an overriding file/path is given. + * This allows disabling scanning for ini files in the PHP_CONFIG_FILE_SCAN_DIR but still + * load an optional ini file. */ + if (!sapi_module.php_ini_ignore || sapi_module.php_ini_path_override) { + + /* Check if php_ini_file_name is a file and can be opened */ if (php_ini_file_name && php_ini_file_name[0]) { struct stat statbuf; @@ -535,7 +545,8 @@ int php_init_config(TSRMLS_D) } } } - /* Search php-%sapi-module-name%.ini file in search path */ + + /* Otherwise search for php-%sapi-module-name%.ini file in search path */ if (!fh.handle.fp) { const char *fmt = "php-%s.ini"; char *ini_fname; @@ -546,7 +557,8 @@ int php_init_config(TSRMLS_D) fh.filename = php_ini_opened_path; } } - /* Search php.ini file in search path */ + + /* If still no ini file found, search for 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 (fh.handle.fp) { @@ -584,9 +596,16 @@ int php_init_config(TSRMLS_D) } } - /* If the config_file_scan_dir is set at compile-time, go and scan this directory and - * parse any .ini files found in this directory. */ - if (!sapi_module.php_ini_ignore && strlen(PHP_CONFIG_FILE_SCAN_DIR)) { + /* Check for PHP_INI_SCAN_DIR environment variable to override/set config file scan directory */ + php_ini_scanned_path = getenv("PHP_INI_SCAN_DIR"); + if (!php_ini_scanned_path) { + /* Or fall back using possible --with-config-file-scan-dir setting (defaults to empty string!) */ + php_ini_scanned_path = PHP_CONFIG_FILE_SCAN_DIR; + } + int php_ini_scanned_path_len = strlen(php_ini_scanned_path); + + /* Scan and parse any .ini files found in scan path if path not empty. */ + if (!sapi_module.php_ini_ignore && php_ini_scanned_path_len) { struct dirent **namelist; int ndir, i; struct stat sb; @@ -600,7 +619,7 @@ int php_init_config(TSRMLS_D) /* Reset active ini section */ RESET_ACTIVE_INI_HASH(); - if ((ndir = php_scandir(PHP_CONFIG_FILE_SCAN_DIR, &namelist, 0, php_alphasort)) > 0) { + if ((ndir = php_scandir(php_ini_scanned_path, &namelist, 0, php_alphasort)) > 0) { zend_llist_init(&scanned_ini_list, sizeof(char *), (llist_dtor_func_t) free_estring, 1); memset(&fh, 0, sizeof(fh)); @@ -611,7 +630,11 @@ int php_init_config(TSRMLS_D) free(namelist[i]); continue; } - snprintf(ini_file, MAXPATHLEN, "%s%c%s", PHP_CONFIG_FILE_SCAN_DIR, DEFAULT_SLASH, namelist[i]->d_name); + if (IS_SLASH(php_ini_scanned_path[php_ini_scanned_path_len - 1])) { + snprintf(ini_file, MAXPATHLEN, "%s%s", php_ini_scanned_path, namelist[i]->d_name); + } else { + snprintf(ini_file, MAXPATHLEN, "%s%c%s", php_ini_scanned_path, DEFAULT_SLASH, namelist[i]->d_name); + } if (VCWD_STAT(ini_file, &sb) == 0) { if (S_ISREG(sb.st_mode)) { if ((fh.handle.fp = VCWD_FOPEN(ini_file, "r"))) { @@ -649,6 +672,9 @@ int php_init_config(TSRMLS_D) } zend_llist_destroy(&scanned_ini_list); } + } else { + /* Make sure an empty php_ini_scanned_path ends up as NULL */ + php_ini_scanned_path = NULL; } if (sapi_module.ini_entries) { diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c index e46a978294..adc80a2f41 100644 --- a/sapi/cgi/cgi_main.c +++ b/sapi/cgi/cgi_main.c @@ -1725,17 +1725,6 @@ consult the installation file that came with this distribution, or visit \n\ CG(interactive) = 0; if (!cgi && !fastcgi) { - if (cgi_sapi_module.php_ini_path_override && cgi_sapi_module.php_ini_ignore) { - no_headers = 1; - php_output_startup(); - php_output_activate(TSRMLS_C); - SG(headers_sent) = 1; - php_printf("You cannot use both -n and -c switch. Use -h for help.\n"); - php_end_ob_buffers(1 TSRMLS_CC); - exit_status = 1; - goto out; - } - while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0, 2)) != -1) { switch (c) { diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c index c0dd51d96b..6559e73dec 100644 --- a/sapi/cli/php_cli.c +++ b/sapi/cli/php_cli.c @@ -727,12 +727,6 @@ int main(int argc, char *argv[]) CG(in_compilation) = 0; /* not initialized but needed for several options */ EG(uninitialized_zval_ptr) = NULL; - if (cli_sapi_module.php_ini_path_override && cli_sapi_module.php_ini_ignore) { - PUTS("You cannot use both -n and -c switch. Use -h for help.\n"); - exit_status=1; - goto out_err; - } - while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0, 2)) != -1) { switch (c) { diff --git a/sapi/milter/php_milter.c b/sapi/milter/php_milter.c index 64f060bdb1..5d1ddde135 100644 --- a/sapi/milter/php_milter.c +++ b/sapi/milter/php_milter.c @@ -18,6 +18,7 @@ +----------------------------------------------------------------------+ */ +/* $Id$ */ #include "php.h" #include "php_globals.h" @@ -1058,13 +1059,6 @@ int main(int argc, char *argv[]) zend_uv.html_errors = 0; /* tell the engine we're in non-html mode */ - if (milter_sapi_module.php_ini_path_override && milter_sapi_module.php_ini_ignore) { - SG(headers_sent) = 1; - SG(request_info).no_headers = 1; - PUTS("You cannot use both -n and -c switch. Use -h for help.\n"); - exit(1); - } - while ((c = ap_php_getopt(argc, argv, OPTSTRING)) != -1) { switch (c) { -- 2.40.0