From 906953126e0657bc4a6cdc907f4735b7708d52f4 Mon Sep 17 00:00:00 2001 From: Dennis1993 <marvin-wegener@outlook.com> Date: Tue, 16 Jul 2013 11:17:58 -0400 Subject: [PATCH] Update rcube_install.php --- installer/rcube_install.php | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 109 insertions(+), 10 deletions(-) diff --git a/installer/rcube_install.php b/installer/rcube_install.php index 8165401..cd467d3 100644 --- a/installer/rcube_install.php +++ b/installer/rcube_install.php @@ -28,10 +28,12 @@ var $failures = 0; var $config = array(); var $configured = false; + var $legacy_config = false; var $last_error = null; var $email_pattern = '([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9])'; var $bool_config_props = array(); + var $local_config = array('db_dsnw', 'default_host', 'support_url', 'des_key', 'plugins'); var $obsolete_config = array('db_backend', 'double_auth'); var $replaced_config = array( 'skin_path' => 'skin', @@ -97,9 +99,11 @@ else { if ($config = $this->load_config_file(RCUBE_CONFIG_DIR . 'main.inc.php')) { $this->config = array_merge($this->config, $config); + $this->legacy_config = true; } if ($config = $this->load_config_file(RCUBE_CONFIG_DIR . 'db.inc.php')) { $this->config = array_merge($this->config, $config); + $this->legacy_config = true; } } @@ -113,6 +117,28 @@ { if (is_readable($file)) { include $file; + + // read comments from config file + if (function_exists('token_get_all')) { + $tokens = token_get_all(file_get_contents($file)); + $in_config = false; + $buffer = ''; + for ($i=0; $i < count($tokens); $i++) { + $token = $tokens[$i]; + if ($token[0] == T_VARIABLE && $token[1] == '$config' || $token[1] == '$rcmail_config') { + $in_config = true; + if ($buffer && $tokens[$i+1] == '[' && $tokens[$i+2][0] == T_CONSTANT_ENCAPSED_STRING) { + $propname = trim($tokens[$i+2][1], "'\""); + $this->comments[$propname] = $buffer; + $buffer = ''; + $i += 3; + } + } + else if ($in_config && $token[0] == T_COMMENT) { + $buffer .= strtr($token[1], array('\n' => "\n")); + } + } + } // deprecated name of config variable if (is_array($rcmail_config)) { @@ -155,6 +181,18 @@ $is_default = !isset($_POST["_$prop"]); $value = !$is_default || $this->bool_config_props[$prop] ? $_POST["_$prop"] : $default; + // always disable installer + if ($prop == 'enable_installer') + $value = false; + + // reset useragent to default (keeps version up-to-date) + if ($prop == 'useragent' && stripos($value, 'Roundcube Webmail/') !== false) + $value = $this->defaults[$prop]; + + // generate new encryption key, never use the default value + if ($prop == 'des_key' && $value == $this->defaults[$prop]) + $value = $this->random_key(24); + // convert some form data if ($prop == 'debug_level' && !$is_default) { if (is_array($value)) { @@ -164,7 +202,7 @@ $value = $val; } } - else if ($which == 'db' && $prop == 'db_dsnw' && !empty($_POST['_dbtype'])) { + else if ($prop == 'db_dsnw' && !empty($_POST['_dbtype'])) { if ($_POST['_dbtype'] == 'sqlite') $value = sprintf('%s://%s?mode=0646', $_POST['_dbtype'], $_POST['_dbname']{0} == '/' ? '/' . $_POST['_dbname'] : $_POST['_dbname']); else if ($_POST['_dbtype']) @@ -209,7 +247,7 @@ } // skip this property - if (!array_key_exists($prop, $this->defaults) || ($value == $this->defaults[$prop])) { + if ((!array_key_exists($prop, $this->defaults) || ($value == $this->defaults[$prop])) && !in_array($prop, $this->local_config)) { continue; } @@ -218,19 +256,32 @@ $config[$prop] = $value; } - // sort by option name - ksort($config); - $out = "<?php\n\n"; + $out .= "/* Local configuration for Roundcube Webmail */\n\n"; foreach ($config as $prop => $value) { - // @TODO: copy option descriptions from defaults.inc.php file? - $out .= "\$config['$prop'] = " . rcube_install::_dump_var($value, $prop) . ";\n"; + // copy option descriptions from existing config or defaults.inc.php + $out .= $this->comments[$prop]; + $out .= "\$config['$prop'] = " . rcube_install::_dump_var($value, $prop) . ";\n\n"; } - $out .= "\n?>"; return $out; } + + /** + * save generated config file in RCUBE_CONFIG_DIR + * + * @return boolean True if the file was saved successfully, false if not + */ + function save_configfile() + { + if(is_writable(RCUBE_CONFIG_DIR)) + { + return file_put_contents(RCUBE_CONFIG_DIR . 'config.inc.php', $_SESSION['config']); + } + + return false; + } /** * Check the current configuration for missing properties @@ -405,6 +456,51 @@ return $schema; } + /** + * Try to detect some file's mimetypes to test the correct behavior of fileinfo + */ + function check_mime_detection() + { + $files = array( + 'installer/images/roundcube_logo.png' => 'image/png', + 'program/resources/blank.tif' => 'image/tiff', + 'skins/larry/templates/login.html' => 'text/html', + ); + + $errors = array(); + foreach ($files as $path => $expected) { + $mimetype = rcube_mime::file_content_type(INSTALL_PATH . $path, basename($path)); + if ($mimetype != $expected) { + $errors[] = array($path, $mimetype, $expected); + } + } + + return $errors; + } + + /** + * Check the correct configuration of the 'mime_types' mapping option + */ + function check_mime_extensions() + { + $types = array( + 'application/zip' => 'zip', + 'application/x-tar' => 'tar', + 'application/java-archive' => 'jar', + 'image/bmp' => 'bmp', + 'image/svg+xml' => 'svg', + ); + + $errors = array(); + foreach ($types as $mimetype => $expected) { + $ext = rcube_mime::get_mime_extensions($mimetype); + if ($ext[0] != $expected) { + $errors[] = array($mimetype, $ext, $expected); + } + } + + return $errors; + } /** * Getter for the last error message @@ -490,10 +586,13 @@ * @param string Test name * @param string Error message * @param string URL for details + * @param bool Do not count this failure */ - function fail($name, $message = '', $url = '') + function fail($name, $message = '', $url = '', $optional=false) { - $this->failures++; + if (!$optional) { + $this->failures++; + } echo Q($name) . ': <span class="fail">NOT OK</span>'; $this->_showhint($message, $url); -- Gitblit v1.9.1