]> granicus.if.org Git - php/commitdiff
make error_log setting access-controlled by safe_mode/open_basedir
authorStanislav Malyshev <stas@php.net>
Fri, 3 Aug 2007 01:15:51 +0000 (01:15 +0000)
committerStanislav Malyshev <stas@php.net>
Fri, 3 Aug 2007 01:15:51 +0000 (01:15 +0000)
main/main.c

index b21762cda85d397dd38c9a3805130c2a8701e4a3..6dbdf9217dc0e2adf186096b1d1d72e1881c2dca 100644 (file)
@@ -297,6 +297,27 @@ static PHP_INI_DISP(display_errors_mode)
 }
 /* }}} */
 
+/* {{{ PHP_INI_MH
+ */
+static PHP_INI_MH(OnUpdateErrorLog)
+{
+       /* Only do the safemode/open_basedir check at runtime */
+       if ((stage == PHP_INI_STAGE_RUNTIME || stage == PHP_INI_STAGE_HTACCESS) &&
+               strcmp(PG(error_log), "syslog")) {
+               if (PG(safe_mode) && (!php_checkuid(new_value, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
+                       return FAILURE;
+               }
+
+               if (PG(open_basedir) && php_check_open_basedir(new_value TSRMLS_CC)) {
+                       return FAILURE;
+               }
+
+       }
+       OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
+       return SUCCESS;
+}
+/* }}} */
+
 /* Need to convert to strings and make use of:
  * PHP_SAFE_MODE
  *
@@ -381,7 +402,7 @@ PHP_INI_BEGIN()
        STD_PHP_INI_ENTRY("doc_root",                           NULL,           PHP_INI_SYSTEM,         OnUpdateStringUnempty,  doc_root,                               php_core_globals,       core_globals)
        STD_PHP_INI_ENTRY("default_charset",            SAPI_DEFAULT_CHARSET,   PHP_INI_ALL,    OnUpdateString,                 default_charset,                sapi_globals_struct,sapi_globals)
        STD_PHP_INI_ENTRY("default_mimetype",           SAPI_DEFAULT_MIMETYPE,  PHP_INI_ALL,    OnUpdateString,                 default_mimetype,               sapi_globals_struct,sapi_globals)
-       STD_PHP_INI_ENTRY("error_log",                          NULL,           PHP_INI_ALL,            OnUpdateString,                 error_log,                              php_core_globals,       core_globals)
+       STD_PHP_INI_ENTRY("error_log",                          NULL,           PHP_INI_ALL,            OnUpdateErrorLog,                       error_log,                              php_core_globals,       core_globals)
        STD_PHP_INI_ENTRY("extension_dir",                      PHP_EXTENSION_DIR,              PHP_INI_SYSTEM,         OnUpdateStringUnempty,  extension_dir,                  php_core_globals,       core_globals)
        STD_PHP_INI_ENTRY("include_path",                       PHP_INCLUDE_PATH,               PHP_INI_ALL,            OnUpdateStringUnempty,  include_path,                   php_core_globals,       core_globals)
        PHP_INI_ENTRY("max_execution_time",                     "30",           PHP_INI_ALL,                    OnUpdateTimeout)