diff --git a/inc/HTTPClient.php b/inc/HTTPClient.php index 71844b8478f9682d93a00b896bbb63ed540976a3..1184aebeeb8608d79d7c4e064453ba165a632d90 100644 --- a/inc/HTTPClient.php +++ b/inc/HTTPClient.php @@ -32,7 +32,7 @@ class DokuHTTPClient extends HTTPClient { $this->proxy_host = $conf['proxy']['host']; $this->proxy_port = $conf['proxy']['port']; $this->proxy_user = $conf['proxy']['user']; - $this->proxy_pass = $conf['proxy']['pass']; + $this->proxy_pass = conf_decodeString($conf['proxy']['pass']); $this->proxy_ssl = $conf['proxy']['ssl']; } } diff --git a/inc/confutils.php b/inc/confutils.php index 5b48e97dd2142645453273af223b4269eed243d8..2099ba9494ccfba075a601744117b8c867f83b7a 100644 --- a/inc/confutils.php +++ b/inc/confutils.php @@ -238,5 +238,34 @@ function useHeading($linktype) { return (!empty($useHeading[$linktype])); } - +/** + * obscure config data so information isn't plain text + * + * @param string $str data to be encoded + * @param string $code encoding method, values: plain, base64, uuencode. + * @return string the encoded value + */ +function conf_encodeString($str,$code) { + switch ($code) { + case 'base64' : return '<b>'.base64_encode($str); + case 'uuencode' : return '<u>'.convert_uuencode($str); + case 'plain': + default: + return $str; + } +} +/** + * return obscured data as plain text + * + * @param string $str encoded data + * @return string plain text + */ +function conf_decodeString($str) { + switch (substr($str,0,3)) { + case '<b>' : return base64_decode(substr($str,3)); + case '<u>' : return convert_uudecode(substr($str,3)); + default: // not encode (or unknown) + return $str; + } +} //Setup VIM: ex: et ts=2 enc=utf-8 : diff --git a/inc/io.php b/inc/io.php index 1c0e8610479c2399bce9b41b9e7089f7718ba1d5..2eb94db0c716b61ae8504ba0d0526865db5ff8e6 100644 --- a/inc/io.php +++ b/inc/io.php @@ -424,7 +424,7 @@ function io_mkdir_ftp($dir){ return false; } - if(!@ftp_login($conn, $conf['ftp']['user'], $conf['ftp']['pass'])){ + if(!@ftp_login($conn, $conf['ftp']['user'], conf_decodeString($conf['ftp']['pass']))){ msg("FTP login failed",-1); return false; } diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php index c3531d6f343018613af896d220bed177cc3bd607..b62c16a7e5e70fae67559426eea5ff1fb04bba3f 100644 --- a/lib/plugins/config/settings/config.class.php +++ b/lib/plugins/config/settings/config.class.php @@ -22,7 +22,7 @@ if (!class_exists('configuration')) { var $_default_files = array(); var $_local_files = array(); // updated configuration is written to the first file var $_protected_files = array(); - + var $_plugin_list = null; /** @@ -127,13 +127,13 @@ if (!class_exists('configuration')) { fclose($fh); return true; } - + function _read_config_group($files) { $config = array(); foreach ($files as $file) { $config = array_merge($config, $this->_read_config($file)); } - + return $config; } @@ -477,6 +477,8 @@ if (!class_exists('setting_string')) { if (!class_exists('setting_password')) { class setting_password extends setting_string { + var $_code = 'plain'; // mechanism to be used to obscure passwords + function update($input) { if ($this->is_protected()) return false; if (!$input) return false; @@ -487,7 +489,7 @@ if (!class_exists('setting_password')) { return false; } - $this->_local = $input; + $this->_local = conf_encodeString($input,$this->_code); return true; } @@ -888,7 +890,6 @@ if (!class_exists('setting_multicheckbox')) { } } - /** * Provide php_strip_whitespace (php5 function) functionality * diff --git a/lib/plugins/config/settings/config.metadata.php b/lib/plugins/config/settings/config.metadata.php index 8c856af1b17469fa92ba6d8bf0e1b9fad08a9e26..6c979574e9e89e3782cd9dcf653631608606763c 100644 --- a/lib/plugins/config/settings/config.metadata.php +++ b/lib/plugins/config/settings/config.metadata.php @@ -22,7 +22,8 @@ * 'email' - text input, input must conform to email address format, setting output in quotes * 'richemail' - text input, input must conform to email address format but accepts variables and * emails with a real name prepended (when email address is given in <>) - * 'password' - password input, minimal input validation, setting output plain text in quotes + * 'password' - password input, minimal input validation, setting output text in quotes, maybe encoded + * according to the _code parameter * 'dirchoice' - as multichoice, selection choices based on folders found at location specified in _dir * parameter (required). A pattern can be used to restrict the folders to only those which * match the pattern. @@ -52,6 +53,7 @@ * required by 'dirchoice' class, ignored by other classes * '_combine' - complimentary output setting values which can be combined into a single display checkbox * optional for 'multicheckbox', ignored by other classes + * '_code' - encoding method to use, accepted values: 'base64','uuencode','plain'. defaults to plain. * * @author Chris Smith <chris@jalakai.co.uk> */ @@ -189,12 +191,12 @@ $meta['_network'] = array('fieldset'); $meta['proxy____host'] = array('string','_pattern' => '#^(|[a-z0-9\-\.+]+)$#i'); $meta['proxy____port'] = array('numericopt'); $meta['proxy____user'] = array('string'); -$meta['proxy____pass'] = array('password'); +$meta['proxy____pass'] = array('password','_code' => 'base64'); $meta['proxy____ssl'] = array('onoff'); $meta['safemodehack'] = array('onoff'); $meta['ftp____host'] = array('string','_pattern' => '#^(|[a-z0-9\-\.+]+)$#i'); $meta['ftp____port'] = array('numericopt'); $meta['ftp____user'] = array('string'); -$meta['ftp____pass'] = array('password'); +$meta['ftp____pass'] = array('password','_code' => 'base64'); $meta['ftp____root'] = array('string');