From 69b1ff303238e57b5e3d2ff68768b1095357830b Mon Sep 17 00:00:00 2001 From: Bob Trahan Date: Mon, 6 Oct 2014 13:20:56 -0700 Subject: [PATCH] Configuration - re-jigger how we handle bad configuration files Summary: just explicitly check if the file doesn't exist *first*, and then do the standard include thing with the more generic error if that doesn't work. Fixes T6255. Test Plan: re-started apache and phabricator still worked; will ask csilvers to give it a whirl too Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin, epriestley Maniphest Tasks: T6255 Differential Revision: https://secure.phabricator.com/D10643 --- conf/__init_conf__.php | 73 +++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 36 deletions(-) diff --git a/conf/__init_conf__.php b/conf/__init_conf__.php index 7dfd59f05d..941efd1b09 100644 --- a/conf/__init_conf__.php +++ b/conf/__init_conf__.php @@ -8,6 +8,43 @@ function phabricator_read_config_file($original_config) { $config = preg_replace('/\.conf\.php$/', '', $original_config); $full_config_path = $root.'/conf/'.$config.'.conf.php'; + if (!Filesystem::pathExists($full_config_path)) { + + // These are very old configuration files which we used to ship with + // by default. File based configuration was de-emphasized once web-based + // configuration was built. The actual files were removed to reduce + // user confusion over how to configure Phabricator. + + switch ($config) { + case 'default': + case 'production': + return array(); + case 'development': + return array( + 'phabricator.developer-mode' => true, + 'darkconsole.enabled' => true, + 'celerity.minify' => false, + ); + } + + $files = id(new FileFinder($root.'/conf/')) + ->withType('f') + ->withSuffix('conf.php') + ->withFollowSymlinks(true) + ->find(); + + foreach ($files as $key => $file) { + $file = trim($file, './'); + $files[$key] = preg_replace('/\.conf\.php$/', '', $file); + } + $files = " ".implode("\n ", $files); + + throw new Exception( + "CONFIGURATION ERROR\n". + "Config file '{$original_config}' does not exist. Valid config files ". + "are:\n\n".$files); + } + // Make sure config file errors are reported. $old_error_level = error_reporting(E_ALL | E_STRICT); $old_display_errors = ini_get('display_errors'); @@ -21,42 +58,6 @@ function phabricator_read_config_file($original_config) { ini_set('display_errors', $old_display_errors); if ($conf === false) { - if (!Filesystem::pathExists($full_config_path)) { - - // These are very old configuration files which we used to ship with - // by default. File based configuration was de-emphasized once web-based - // configuration was built. The actual files were removed to reduce - // user confusion over how to configure Phabricator. - - switch ($config) { - case 'default': - case 'production': - return array(); - case 'development': - return array( - 'phabricator.developer-mode' => true, - 'darkconsole.enabled' => true, - 'celerity.minify' => false, - ); - } - - $files = id(new FileFinder($root.'/conf/')) - ->withType('f') - ->withSuffix('conf.php') - ->withFollowSymlinks(true) - ->find(); - - foreach ($files as $key => $file) { - $file = trim($file, './'); - $files[$key] = preg_replace('/\.conf\.php$/', '', $file); - } - $files = " ".implode("\n ", $files); - - throw new Exception( - "CONFIGURATION ERROR\n". - "Config file '{$original_config}' does not exist. Valid config files ". - "are:\n\n".$files); - } throw new Exception("Failed to read config file '{$config}': {$errors}"); }