From e6d8f97bf2e0bbb4d95df0c4e030eb7ec6ef75a5 Mon Sep 17 00:00:00 2001 From: thomasb Date: Sat, 31 Mar 2012 12:25:48 +0000 Subject: Move plugins repository into roundcubemail root folder; svn:externals are not defined anymore git-svn-id: https://svn.roundcube.net/trunk@6034 208e9e7b-5314-0410-a742-e7e81cd9613c --- plugins/password/README | 309 ---------------- plugins/password/config.inc.php.dist | 347 ------------------ plugins/password/drivers/chpasswd.php | 39 -- plugins/password/drivers/cpanel.php | 120 ------ plugins/password/drivers/dbmail.php | 42 --- plugins/password/drivers/directadmin.php | 489 ------------------------- plugins/password/drivers/domainfactory.php | 70 ---- plugins/password/drivers/expect.php | 58 --- plugins/password/drivers/hmail.php | 63 ---- plugins/password/drivers/ldap.php | 319 ---------------- plugins/password/drivers/ldap_simple.php | 276 -------------- plugins/password/drivers/pam.php | 42 --- plugins/password/drivers/poppassd.php | 67 ---- plugins/password/drivers/pw_usermod.php | 41 --- plugins/password/drivers/sasl.php | 45 --- plugins/password/drivers/smb.php | 59 --- plugins/password/drivers/sql.php | 175 --------- plugins/password/drivers/virtualmin.php | 76 ---- plugins/password/drivers/vpopmaild.php | 53 --- plugins/password/drivers/ximss.php | 76 ---- plugins/password/drivers/xmail.php | 106 ------ plugins/password/helpers/chgdbmailusers.c | 48 --- plugins/password/helpers/chgsaslpasswd.c | 29 -- plugins/password/helpers/chgvirtualminpasswd.c | 28 -- plugins/password/helpers/chpass-wrapper.py | 32 -- plugins/password/helpers/passwd-expect | 267 -------------- plugins/password/localization/az_AZ.inc | 24 -- plugins/password/localization/bg_BG.inc | 18 - plugins/password/localization/ca_ES.inc | 20 - plugins/password/localization/cs_CZ.inc | 30 -- plugins/password/localization/da_DK.inc | 18 - plugins/password/localization/de_CH.inc | 19 - plugins/password/localization/de_DE.inc | 19 - plugins/password/localization/en_US.inc | 21 -- plugins/password/localization/es_AR.inc | 21 -- plugins/password/localization/es_ES.inc | 21 -- plugins/password/localization/et_EE.inc | 17 - plugins/password/localization/fi_FI.inc | 22 -- plugins/password/localization/fr_FR.inc | 18 - plugins/password/localization/gl_ES.inc | 21 -- plugins/password/localization/hr_HR.inc | 21 -- plugins/password/localization/hu_HU.inc | 17 - plugins/password/localization/it_IT.inc | 21 -- plugins/password/localization/ja_JP.inc | 23 -- plugins/password/localization/lt_LT.inc | 21 -- plugins/password/localization/lv_LV.inc | 20 - plugins/password/localization/nl_NL.inc | 17 - plugins/password/localization/pl_PL.inc | 21 -- plugins/password/localization/pt_BR.inc | 21 -- plugins/password/localization/pt_PT.inc | 18 - plugins/password/localization/ru_RU.inc | 35 -- plugins/password/localization/sk_SK.inc | 29 -- plugins/password/localization/sl_SI.inc | 18 - plugins/password/localization/sv_SE.inc | 21 -- plugins/password/localization/tr_TR.inc | 21 -- plugins/password/localization/zh_TW.inc | 21 -- plugins/password/package.xml | 335 ----------------- plugins/password/password.js | 37 -- plugins/password/password.php | 290 --------------- 59 files changed, 4572 deletions(-) delete mode 100644 plugins/password/README delete mode 100644 plugins/password/config.inc.php.dist delete mode 100644 plugins/password/drivers/chpasswd.php delete mode 100644 plugins/password/drivers/cpanel.php delete mode 100644 plugins/password/drivers/dbmail.php delete mode 100644 plugins/password/drivers/directadmin.php delete mode 100644 plugins/password/drivers/domainfactory.php delete mode 100644 plugins/password/drivers/expect.php delete mode 100644 plugins/password/drivers/hmail.php delete mode 100644 plugins/password/drivers/ldap.php delete mode 100644 plugins/password/drivers/ldap_simple.php delete mode 100644 plugins/password/drivers/pam.php delete mode 100644 plugins/password/drivers/poppassd.php delete mode 100644 plugins/password/drivers/pw_usermod.php delete mode 100644 plugins/password/drivers/sasl.php delete mode 100644 plugins/password/drivers/smb.php delete mode 100644 plugins/password/drivers/sql.php delete mode 100644 plugins/password/drivers/virtualmin.php delete mode 100644 plugins/password/drivers/vpopmaild.php delete mode 100644 plugins/password/drivers/ximss.php delete mode 100644 plugins/password/drivers/xmail.php delete mode 100644 plugins/password/helpers/chgdbmailusers.c delete mode 100644 plugins/password/helpers/chgsaslpasswd.c delete mode 100644 plugins/password/helpers/chgvirtualminpasswd.c delete mode 100644 plugins/password/helpers/chpass-wrapper.py delete mode 100644 plugins/password/helpers/passwd-expect delete mode 100644 plugins/password/localization/az_AZ.inc delete mode 100644 plugins/password/localization/bg_BG.inc delete mode 100644 plugins/password/localization/ca_ES.inc delete mode 100644 plugins/password/localization/cs_CZ.inc delete mode 100644 plugins/password/localization/da_DK.inc delete mode 100644 plugins/password/localization/de_CH.inc delete mode 100644 plugins/password/localization/de_DE.inc delete mode 100644 plugins/password/localization/en_US.inc delete mode 100644 plugins/password/localization/es_AR.inc delete mode 100644 plugins/password/localization/es_ES.inc delete mode 100644 plugins/password/localization/et_EE.inc delete mode 100644 plugins/password/localization/fi_FI.inc delete mode 100644 plugins/password/localization/fr_FR.inc delete mode 100644 plugins/password/localization/gl_ES.inc delete mode 100644 plugins/password/localization/hr_HR.inc delete mode 100644 plugins/password/localization/hu_HU.inc delete mode 100644 plugins/password/localization/it_IT.inc delete mode 100644 plugins/password/localization/ja_JP.inc delete mode 100644 plugins/password/localization/lt_LT.inc delete mode 100644 plugins/password/localization/lv_LV.inc delete mode 100644 plugins/password/localization/nl_NL.inc delete mode 100644 plugins/password/localization/pl_PL.inc delete mode 100644 plugins/password/localization/pt_BR.inc delete mode 100644 plugins/password/localization/pt_PT.inc delete mode 100644 plugins/password/localization/ru_RU.inc delete mode 100644 plugins/password/localization/sk_SK.inc delete mode 100644 plugins/password/localization/sl_SI.inc delete mode 100644 plugins/password/localization/sv_SE.inc delete mode 100644 plugins/password/localization/tr_TR.inc delete mode 100644 plugins/password/localization/zh_TW.inc delete mode 100644 plugins/password/package.xml delete mode 100644 plugins/password/password.js delete mode 100644 plugins/password/password.php (limited to 'plugins/password') diff --git a/plugins/password/README b/plugins/password/README deleted file mode 100644 index 25af8cbcd..000000000 --- a/plugins/password/README +++ /dev/null @@ -1,309 +0,0 @@ - ----------------------------------------------------------------------- - Password Plugin for Roundcube - ----------------------------------------------------------------------- - - Plugin that adds a possibility to change user password using many - methods (drivers) via Settings/Password tab. - - ----------------------------------------------------------------------- - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 - as published by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - @version @package_version@ - @author Aleksander 'A.L.E.C' Machniak - @author - ----------------------------------------------------------------------- - - 1. Configuration - 2. Drivers - 2.1. Database (sql) - 2.2. Cyrus/SASL (sasl) - 2.3. Poppassd/Courierpassd (poppassd) - 2.4. LDAP (ldap) - 2.5. DirectAdmin Control Panel (directadmin) - 2.6. cPanel (cpanel) - 2.7. XIMSS/Communigate (ximms) - 2.8. Virtualmin (virtualmin) - 2.9. hMailServer (hmail) - 2.10. PAM (pam) - 2.11. Chpasswd (chpasswd) - 2.12. LDAP - no PEAR (ldap_simple) - 2.13. XMail (xmail) - 2.14. Pw (pw_usermod) - 2.15. domainFACTORY (domainfactory) - 2.16. DBMail (dbmail) - 2.17. Expect (expect) - 2.18. Samba (smb) - 3. Driver API - - - 1. Configuration - ---------------- - - Copy config.inc.php.dist to config.inc.php and set the options as described - within the file. - - - 2. Drivers - ---------- - - Password plugin supports many password change mechanisms which are - handled by included drivers. Just pass driver name in 'password_driver' option. - - - 2.1. Database (sql) - ------------------- - - You can specify which database to connect by 'password_db_dsn' option and - what SQL query to execute by 'password_query'. See main.inc.php.dist file for - more info. - - Example implementations of an update_passwd function: - - - This is for use with LMS (http://lms.org.pl) database and postgres: - - CREATE OR REPLACE FUNCTION update_passwd(hash text, account text) RETURNS integer AS $$ - DECLARE - res integer; - BEGIN - UPDATE passwd SET password = hash - WHERE login = split_part(account, '@', 1) - AND domainid = (SELECT id FROM domains WHERE name = split_part(account, '@', 2)) - RETURNING id INTO res; - RETURN res; - END; - $$ LANGUAGE plpgsql SECURITY DEFINER; - - - This is for use with a SELECT update_passwd(%o,%c,%u) query - Updates the password only when the old password matches the MD5 password - in the database - - CREATE FUNCTION update_password (oldpass text, cryptpass text, user text) RETURNS text - MODIFIES SQL DATA - BEGIN - DECLARE currentsalt varchar(20); - DECLARE error text; - SET error = 'incorrect current password'; - SELECT substring_index(substr(user.password,4),_latin1'$',1) INTO currentsalt FROM users WHERE username=user; - SELECT '' INTO error FROM users WHERE username=user AND password=ENCRYPT(oldpass,currentsalt); - UPDATE users SET password=cryptpass WHERE username=user AND password=ENCRYPT(oldpass,currentsalt); - RETURN error; - END - - Example SQL UPDATEs: - - - Plain text passwords: - UPDATE users SET password=%p WHERE username=%u AND password=%o AND domain=%h LIMIT 1 - - - Crypt text passwords: - UPDATE users SET password=%c WHERE username=%u LIMIT 1 - - - Use a MYSQL crypt function (*nix only) with random 8 character salt - UPDATE users SET password=ENCRYPT(%p,concat(_utf8'$1$',right(md5(rand()),8),_utf8'$')) WHERE username=%u LIMIT 1 - - - MD5 stored passwords: - UPDATE users SET password=MD5(%p) WHERE username=%u AND password=MD5(%o) LIMIT 1 - - - 2.2. Cyrus/SASL (sasl) - ---------------------- - - Cyrus SASL database authentication allows your Cyrus+Roundcube - installation to host mail users without requiring a Unix Shell account! - - This driver only covers the "sasldb" case when using Cyrus SASL. Kerberos - and PAM authentication mechanisms will require other techniques to enable - user password manipulations. - - Cyrus SASL includes a shell utility called "saslpasswd" for manipulating - user passwords in the "sasldb" database. This plugin attempts to use - this utility to perform password manipulations required by your webmail - users without any administrative interaction. Unfortunately, this - scheme requires that the "saslpasswd" utility be run as the "cyrus" - user - kind of a security problem since we have chosen to SUID a small - script which will allow this to happen. - - This driver is based on the Squirrelmail Change SASL Password Plugin. - See http://www.squirrelmail.org/plugin_view.php?id=107 for details. - - Installation: - - Change into the helpers directory. Edit the chgsaslpasswd.c file as is - documented within it. - - Compile the wrapper program: - gcc -o chgsaslpasswd chgsaslpasswd.c - - Chown the compiled chgsaslpasswd binary to the cyrus user and group - that your browser runs as, then chmod them to 4550. - - For example, if your cyrus user is 'cyrus' and the apache server group is - 'nobody' (I've been told Redhat runs Apache as user 'apache'): - - chown cyrus:nobody chgsaslpasswd - chmod 4550 chgsaslpasswd - - Stephen Carr has suggested users should try to run the scripts on a test - account as the cyrus user eg; - - su cyrus -c "./chgsaslpasswd -p test_account" - - This will allow you to make sure that the script will work for your setup. - Should the script not work, make sure that: - 1) the user the script runs as has access to the saslpasswd|saslpasswd2 - file and proper permissions - 2) make sure the user in the chgsaslpasswd.c file is set correctly. - This could save you some headaches if you are the paranoid type. - - - 2.3. Poppassd/Courierpassd (poppassd) - ------------------------------------- - - You can specify which host to connect to via 'password_pop_host' and - what port via 'password_pop_port'. See config.inc.php.dist file for more info. - - - 2.4. LDAP (ldap) - ---------------- - - See config.inc.php.dist file. Requires PEAR::Net_LDAP2 package. - - - 2.5. DirectAdmin Control Panel (directadmin) - -------------------------------------------- - - You can specify which host to connect to via 'password_directadmin_host' (don't - forget to use tcp:// or ssl://) and what port via 'password_direactadmin_port'. - The password enforcement with plenty customization can be done directly by - DirectAdmin, please see http://www.directadmin.com/features.php?id=910 - See config.inc.php.dist file for more info. - - - 2.6. cPanel (cpanel) - -------------------- - - You can specify parameters for HTTP connection to cPanel's admin - interface. See config.inc.php.dist file for more info. - - - 2.7. XIMSS/Communigate (ximms) - ------------------------------ - - You can specify which host and port to connect to via 'password_ximss_host' - and 'password_ximss_port'. See config.inc.php.dist file for more info. - - - 2.8. Virtualmin (virtualmin) - ---------------------------- - - As in sasl driver this one allows to change password using shell - utility called "virtualmin". See helpers/chgvirtualminpasswd.c for - installation instructions. See also config.inc.php.dist file. - - - 2.9. hMailServer (hmail) - ------------------------ - - Requires PHP COM (Windows only). For access to hMail server on remote host - you'll need to define 'hmailserver_remote_dcom' and 'hmailserver_server'. - See config.inc.php.dist file for more info. - - - 2.10. PAM (pam) - --------------- - - This driver is for changing passwords of shell users authenticated with PAM. - Requires PECL's PAM exitension to be installed (http://pecl.php.net/package/PAM). - - - 2.11. Chpasswd (chpasswd) - ------------------------- - - Driver that adds functionality to change the systems user password via - the 'chpasswd' command. See config.inc.php.dist file. - - Attached wrapper script (helpers/chpass-wrapper.py) restricts password changes - to uids >= 1000 and can deny requests based on a blacklist. - - - 2.12. LDAP - no PEAR (ldap_simple) - ----------------------------------- - - It's rewritten ldap driver that doesn't require the Net_LDAP2 PEAR extension. - It uses directly PHP's ldap module functions instead (as Roundcube does). - - This driver is fully compatible with the ldap driver, but - does not require (or uses) the - $rcmail_config['password_ldap_force_replace'] variable. - Other advantages: - * Connects only once with the LDAP server when using the search user. - * Does not read the DN, but only replaces the password within (that is - why the 'force replace' is always used). - - - 2.13. XMail (xmail) - ----------------------------------- - - Driver for XMail (www.xmailserver.org). See config.inc.php.dist file - for configuration description. - - - 2.14. Pw (pw_usermod) - ----------------------------------- - - Driver to change the systems user password via the 'pw usermod' command. - See config.inc.php.dist file for configuration description. - - - 2.15. domainFACTORY (domainfactory) - ----------------------------------- - - Driver for the hosting provider domainFACTORY (www.df.eu). - No configuration options. - - - 2.16. DBMail (dbmail) - ----------------------------------- - - Driver that adds functionality to change the users DBMail password. - It only works with dbmail-users on the same host where Roundcube runs - and requires shell access and gcc in order to compile the binary - (see instructions in chgdbmailusers.c file). - See config.inc.php.dist file for configuration description. - - Note: DBMail users can also use sql driver. - - - 2.17. Expect (expect) - ----------------------------------- - - Driver to change user password via the 'expect' command. - See config.inc.php.dist file for configuration description. - - - 2.18. Samba (smb) - ----------------------------------- - - Driver to change Samba user password via the 'smbpasswd' command. - See config.inc.php.dist file for configuration description. - - - 3. Driver API - ------------- - - Driver file (.php) must define 'password_save' function with - two arguments. First - current password, second - new password. Function - should return PASSWORD_SUCCESS on success or any of PASSWORD_CONNECT_ERROR, - PASSWORD_CRYPT_ERROR, PASSWORD_ERROR when driver was unable to change password. - Extended result (as a hash-array with 'message' and 'code' items) can be returned - too. See existing drivers in drivers/ directory for examples. diff --git a/plugins/password/config.inc.php.dist b/plugins/password/config.inc.php.dist deleted file mode 100644 index aed0eaf28..000000000 --- a/plugins/password/config.inc.php.dist +++ /dev/null @@ -1,347 +0,0 @@ - /dev/null'; - - -// XMail Driver options -// --------------------- -$rcmail_config['xmail_host'] = 'localhost'; -$rcmail_config['xmail_user'] = 'YourXmailControlUser'; -$rcmail_config['xmail_pass'] = 'YourXmailControlPass'; -$rcmail_config['xmail_port'] = 6017; - - -// hMail Driver options -// ----------------------- -// Remote hMailServer configuration -// true: HMailserver is on a remote box (php.ini: com.allow_dcom = true) -// false: Hmailserver is on same box as PHP -$rcmail_config['hmailserver_remote_dcom'] = false; -// Windows credentials -$rcmail_config['hmailserver_server'] = array( - 'Server' => 'localhost', // hostname or ip address - 'Username' => 'administrator', // windows username - 'Password' => 'password' // windows user password -); - - -// Virtualmin Driver options -// ------------------------- -// Username format: -// 0: username@domain -// 1: username%domain -// 2: username.domain -// 3: domain.username -// 4: username-domain -// 5: domain-username -// 6: username_domain -// 7: domain_username -$rcmail_config['password_virtualmin_format'] = 0; - - -// pw_usermod Driver options -// -------------------------- -// Use comma delimited exlist to disable password change for users -// Add the following line to visudo to tighten security: -// www ALL=NOPASSWORD: /usr/sbin/pw -$rcmail_config['password_pw_usermod_cmd'] = 'sudo /usr/sbin/pw usermod -h 0 -n'; - - -// DBMail Driver options -// ------------------- -// Additional arguments for the dbmail-users call -$rcmail_config['password_dbmail_args'] = '-p sha512'; - - -// Expect Driver options -// --------------------- -// Location of expect binary -$rcmail_config['password_expect_bin'] = '/usr/bin/expect'; - -// Location of expect script (see helpers/passwd-expect) -$rcmail_config['password_expect_script'] = ''; - -// Arguments for the expect script. See the helpers/passwd-expect file for details. -// This is probably a good starting default: -// -telent -host localhost -output /tmp/passwd.log -log /tmp/passwd.log -$rcmail_config['password_expect_params'] = ''; - - -// smb Driver options -// --------------------- -// Samba host (default: localhost) -$rcmail_config['password_smb_host'] = 'localhost'; -// Location of smbpasswd binary -$rcmail_config['password_smb_cmd'] = '/usr/bin/smbpasswd'; diff --git a/plugins/password/drivers/chpasswd.php b/plugins/password/drivers/chpasswd.php deleted file mode 100644 index 3ea10159c..000000000 --- a/plugins/password/drivers/chpasswd.php +++ /dev/null @@ -1,39 +0,0 @@ - - */ - -class rcube_chpasswd_password -{ - public function save($currpass, $newpass) - { - $cmd = rcmail::get_instance()->config->get('password_chpasswd_cmd'); - $username = $_SESSION['username']; - - $handle = popen($cmd, "w"); - fwrite($handle, "$username:$newpass\n"); - - if (pclose($handle) == 0) { - return PASSWORD_SUCCESS; - } - else { - raise_error(array( - 'code' => 600, - 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Password plugin: Unable to execute $cmd" - ), true, false); - } - - return PASSWORD_ERROR; - } -} diff --git a/plugins/password/drivers/cpanel.php b/plugins/password/drivers/cpanel.php deleted file mode 100644 index 58351143b..000000000 --- a/plugins/password/drivers/cpanel.php +++ /dev/null @@ -1,120 +0,0 @@ - - */ - -class rcube_cpanel_password -{ - public function save($curpas, $newpass) - { - $rcmail = rcmail::get_instance(); - - // Create a cPanel email object - $cPanel = new emailAccount($rcmail->config->get('password_cpanel_host'), - $rcmail->config->get('password_cpanel_username'), - $rcmail->config->get('password_cpanel_password'), - $rcmail->config->get('password_cpanel_port'), - $rcmail->config->get('password_cpanel_ssl'), - $rcmail->config->get('password_cpanel_theme'), - $_SESSION['username'] ); - - if ($cPanel->setPassword($newpass)){ - return PASSWORD_SUCCESS; - } - else { - return PASSWORD_ERROR; - } - } -} - - -class HTTP -{ - function HTTP($host, $username, $password, $port, $ssl, $theme) - { - $this->ssl = $ssl ? 'ssl://' : ''; - $this->username = $username; - $this->password = $password; - $this->theme = $theme; - $this->auth = base64_encode($username . ':' . $password); - $this->port = $port; - $this->host = $host; - $this->path = '/frontend/' . $theme . '/'; - } - - function getData($url, $data = '') - { - $url = $this->path . $url; - if(is_array($data)) - { - $url = $url . '?'; - foreach($data as $key=>$value) - { - $url .= urlencode($key) . '=' . urlencode($value) . '&'; - } - $url = substr($url, 0, -1); - } - $response = ''; - $fp = fsockopen($this->ssl . $this->host, $this->port); - if(!$fp) - { - return false; - } - $out = 'GET ' . $url . ' HTTP/1.0' . "\r\n"; - $out .= 'Authorization: Basic ' . $this->auth . "\r\n"; - $out .= 'Connection: Close' . "\r\n\r\n"; - fwrite($fp, $out); - while (!feof($fp)) - { - $response .= @fgets($fp); - } - fclose($fp); - return $response; - } -} - - -class emailAccount -{ - function emailAccount($host, $username, $password, $port, $ssl, $theme, $address) - { - $this->HTTP = new HTTP($host, $username, $password, $port, $ssl, $theme); - if(strpos($address, '@')) - { - list($this->email, $this->domain) = explode('@', $address); - } - else - { - list($this->email, $this->domain) = array($address, ''); - } - } - - /** - * Change email account password - * - * Returns true on success or false on failure. - * @param string $password email account password - * @return bool - */ - function setPassword($password) - { - $data['email'] = $this->email; - $data['domain'] = $this->domain; - $data['password'] = $password; - $response = $this->HTTP->getData('mail/dopasswdpop.html', $data); - if(strpos($response, 'success') && !strpos($response, 'failure')) - { - return true; - } - return false; - } -} diff --git a/plugins/password/drivers/dbmail.php b/plugins/password/drivers/dbmail.php deleted file mode 100644 index a7c2f46a3..000000000 --- a/plugins/password/drivers/dbmail.php +++ /dev/null @@ -1,42 +0,0 @@ -config->get('password_dbmail_args', ''); - - exec("$curdir/chgdbmailusers -c $username -w $newpass $args", $output, $returnvalue); - - if ($returnvalue == 0) { - return PASSWORD_SUCCESS; - } - else { - raise_error(array( - 'code' => 600, - 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Password plugin: Unable to execute $curdir/chgdbmailusers" - ), true, false); - } - - return PASSWORD_ERROR; - } -} diff --git a/plugins/password/drivers/directadmin.php b/plugins/password/drivers/directadmin.php deleted file mode 100644 index 1be14f6e8..000000000 --- a/plugins/password/drivers/directadmin.php +++ /dev/null @@ -1,489 +0,0 @@ - - * - */ - -class rcube_directadmin_password -{ - public function save($curpass, $passwd) - { - $rcmail = rcmail::get_instance(); - $Socket = new HTTPSocket; - - $da_user = $_SESSION['username']; - $da_curpass = $curpass; - $da_newpass = $passwd; - $da_host = $rcmail->config->get('password_directadmin_host'); - $da_port = $rcmail->config->get('password_directadmin_port'); - - if (strpos($da_user, '@') === false) { - return array('code' => PASSWORD_ERROR, 'message' => 'Change the SYSTEM user password through control panel!'); - } - - $da_host = str_replace('%h', $_SESSION['imap_host'], $da_host); - $da_host = str_replace('%d', $rcmail->user->get_username('domain'), $da_host); - - $Socket->connect($da_host,$da_port); - $Socket->set_method('POST'); - $Socket->query('/CMD_CHANGE_EMAIL_PASSWORD', - array( - 'email' => $da_user, - 'oldpassword' => $da_curpass, - 'password1' => $da_newpass, - 'password2' => $da_newpass, - 'api' => '1' - )); - $response = $Socket->fetch_parsed_body(); - - //DEBUG - //console("Password Plugin: [USER: $da_user] [HOST: $da_host] - Response: [SOCKET: ".$Socket->result_status_code."] [DA ERROR: ".strip_tags($response['error'])."] [TEXT: ".$response[text]."]"); - - if($Socket->result_status_code != 200) - return array('code' => PASSWORD_CONNECT_ERROR, 'message' => $Socket->error[0]); - elseif($response['error'] == 1) - return array('code' => PASSWORD_ERROR, 'message' => strip_tags($response['text'])); - else - return PASSWORD_SUCCESS; - } -} - - -/** - * Socket communication class. - * - * Originally designed for use with DirectAdmin's API, this class will fill any HTTP socket need. - * - * Very, very basic usage: - * $Socket = new HTTPSocket; - * echo $Socket->get('http://user:pass@somesite.com/somedir/some.file?query=string&this=that'); - * - * @author Phi1 'l0rdphi1' Stier - * @package HTTPSocket - * @version 2.7 (Updated by Victor Benincasa ) - */ -class HTTPSocket { - - var $version = '2.7'; - - /* all vars are private except $error, $query_cache, and $doFollowLocationHeader */ - - var $method = 'GET'; - - var $remote_host; - var $remote_port; - var $remote_uname; - var $remote_passwd; - - var $result; - var $result_header; - var $result_body; - var $result_status_code; - - var $lastTransferSpeed; - - var $bind_host; - - var $error = array(); - var $warn = array(); - var $query_cache = array(); - - var $doFollowLocationHeader = TRUE; - var $redirectURL; - - var $extra_headers = array(); - - /** - * Create server "connection". - * - */ - function connect($host, $port = '' ) - { - if (!is_numeric($port)) - { - $port = 80; - } - - $this->remote_host = $host; - $this->remote_port = $port; - } - - function bind( $ip = '' ) - { - if ( $ip == '' ) - { - $ip = $_SERVER['SERVER_ADDR']; - } - - $this->bind_host = $ip; - } - - /** - * Change the method being used to communicate. - * - * @param string|null request method. supports GET, POST, and HEAD. default is GET - */ - function set_method( $method = 'GET' ) - { - $this->method = strtoupper($method); - } - - /** - * Specify a username and password. - * - * @param string|null username. defualt is null - * @param string|null password. defualt is null - */ - function set_login( $uname = '', $passwd = '' ) - { - if ( strlen($uname) > 0 ) - { - $this->remote_uname = $uname; - } - - if ( strlen($passwd) > 0 ) - { - $this->remote_passwd = $passwd; - } - - } - - /** - * Query the server - * - * @param string containing properly formatted server API. See DA API docs and examples. Http:// URLs O.K. too. - * @param string|array query to pass to url - * @param int if connection KB/s drops below value here, will drop connection - */ - function query( $request, $content = '', $doSpeedCheck = 0 ) - { - $this->error = $this->warn = array(); - $this->result_status_code = NULL; - - // is our request a http:// ... ? - if (preg_match('!^http://!i',$request)) - { - $location = parse_url($request); - $this->connect($location['host'],$location['port']); - $this->set_login($location['user'],$location['pass']); - - $request = $location['path']; - $content = $location['query']; - - if ( strlen($request) < 1 ) - { - $request = '/'; - } - - } - - $array_headers = array( - 'User-Agent' => "HTTPSocket/$this->version", - 'Host' => ( $this->remote_port == 80 ? $this->remote_host : "$this->remote_host:$this->remote_port" ), - 'Accept' => '*/*', - 'Connection' => 'Close' ); - - foreach ( $this->extra_headers as $key => $value ) - { - $array_headers[$key] = $value; - } - - $this->result = $this->result_header = $this->result_body = ''; - - // was content sent as an array? if so, turn it into a string - if (is_array($content)) - { - $pairs = array(); - - foreach ( $content as $key => $value ) - { - $pairs[] = "$key=".urlencode($value); - } - - $content = join('&',$pairs); - unset($pairs); - } - - $OK = TRUE; - - // instance connection - if ($this->bind_host) - { - $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); - socket_bind($socket,$this->bind_host); - - if (!@socket_connect($socket,$this->remote_host,$this->remote_port)) - { - $OK = FALSE; - } - - } - else - { - $socket = @fsockopen( $this->remote_host, $this->remote_port, $sock_errno, $sock_errstr, 10 ); - } - - if ( !$socket || !$OK ) - { - $this->error[] = "Can't create socket connection to $this->remote_host:$this->remote_port."; - return 0; - } - - // if we have a username and password, add the header - if ( isset($this->remote_uname) && isset($this->remote_passwd) ) - { - $array_headers['Authorization'] = 'Basic '.base64_encode("$this->remote_uname:$this->remote_passwd"); - } - - // for DA skins: if $this->remote_passwd is NULL, try to use the login key system - if ( isset($this->remote_uname) && $this->remote_passwd == NULL ) - { - $array_headers['Cookie'] = "session={$_SERVER['SESSION_ID']}; key={$_SERVER['SESSION_KEY']}"; - } - - // if method is POST, add content length & type headers - if ( $this->method == 'POST' ) - { - $array_headers['Content-type'] = 'application/x-www-form-urlencoded'; - $array_headers['Content-length'] = strlen($content); - } - // else method is GET or HEAD. we don't support anything else right now. - else - { - if ($content) - { - $request .= "?$content"; - } - } - - // prepare query - $query = "$this->method $request HTTP/1.0\r\n"; - foreach ( $array_headers as $key => $value ) - { - $query .= "$key: $value\r\n"; - } - $query .= "\r\n"; - - // if POST we need to append our content - if ( $this->method == 'POST' && $content ) - { - $query .= "$content\r\n\r\n"; - } - - // query connection - if ($this->bind_host) - { - socket_write($socket,$query); - - // now load results - while ( $out = socket_read($socket,2048) ) - { - $this->result .= $out; - } - } - else - { - fwrite( $socket, $query, strlen($query) ); - - // now load results - $this->lastTransferSpeed = 0; - $status = socket_get_status($socket); - $startTime = time(); - $length = 0; - $prevSecond = 0; - while ( !feof($socket) && !$status['timed_out'] ) - { - $chunk = fgets($socket,1024); - $length += strlen($chunk); - $this->result .= $chunk; - - $elapsedTime = time() - $startTime; - - if ( $elapsedTime > 0 ) - { - $this->lastTransferSpeed = ($length/1024)/$elapsedTime; - } - - if ( $doSpeedCheck > 0 && $elapsedTime > 5 && $this->lastTransferSpeed < $doSpeedCheck ) - { - $this->warn[] = "kB/s for last 5 seconds is below 50 kB/s (~".( ($length/1024)/$elapsedTime )."), dropping connection..."; - $this->result_status_code = 503; - break; - } - - } - - if ( $this->lastTransferSpeed == 0 ) - { - $this->lastTransferSpeed = $length/1024; - } - - } - - list($this->result_header,$this->result_body) = preg_split("/\r\n\r\n/",$this->result,2); - - if ($this->bind_host) - { - socket_close($socket); - } - else - { - fclose($socket); - } - - $this->query_cache[] = $query; - - - $headers = $this->fetch_header(); - - // what return status did we get? - if (!$this->result_status_code) - { - preg_match("#HTTP/1\.. (\d+)#",$headers[0],$matches); - $this->result_status_code = $matches[1]; - } - - // did we get the full file? - if ( !empty($headers['content-length']) && $headers['content-length'] != strlen($this->result_body) ) - { - $this->result_status_code = 206; - } - - // now, if we're being passed a location header, should we follow it? - if ($this->doFollowLocationHeader) - { - if ($headers['location']) - { - $this->redirectURL = $headers['location']; - $this->query($headers['location']); - } - } - } - - function getTransferSpeed() - { - return $this->lastTransferSpeed; - } - - /** - * The quick way to get a URL's content :) - * - * @param string URL - * @param boolean return as array? (like PHP's file() command) - * @return string result body - */ - function get($location, $asArray = FALSE ) - { - $this->query($location); - - if ( $this->get_status_code() == 200 ) - { - if ($asArray) - { - return preg_split("/\n/",$this->fetch_body()); - } - - return $this->fetch_body(); - } - - return FALSE; - } - - /** - * Returns the last status code. - * 200 = OK; - * 403 = FORBIDDEN; - * etc. - * - * @return int status code - */ - function get_status_code() - { - return $this->result_status_code; - } - - /** - * Adds a header, sent with the next query. - * - * @param string header name - * @param string header value - */ - function add_header($key,$value) - { - $this->extra_headers[$key] = $value; - } - - /** - * Clears any extra headers. - * - */ - function clear_headers() - { - $this->extra_headers = array(); - } - - /** - * Return the result of a query. - * - * @return string result - */ - function fetch_result() - { - return $this->result; - } - - /** - * Return the header of result (stuff before body). - * - * @param string (optional) header to return - * @return array result header - */ - function fetch_header( $header = '' ) - { - $array_headers = preg_split("/\r\n/",$this->result_header); - - $array_return = array( 0 => $array_headers[0] ); - unset($array_headers[0]); - - foreach ( $array_headers as $pair ) - { - list($key,$value) = preg_split("/: /",$pair,2); - $array_return[strtolower($key)] = $value; - } - - if ( $header != '' ) - { - return $array_return[strtolower($header)]; - } - - return $array_return; - } - - /** - * Return the body of result (stuff after header). - * - * @return string result body - */ - function fetch_body() - { - return $this->result_body; - } - - /** - * Return parsed body in array format. - * - * @return array result parsed - */ - function fetch_parsed_body() - { - parse_str($this->result_body,$x); - return $x; - } - -} diff --git a/plugins/password/drivers/domainfactory.php b/plugins/password/drivers/domainfactory.php deleted file mode 100644 index 7f6b8860e..000000000 --- a/plugins/password/drivers/domainfactory.php +++ /dev/null @@ -1,70 +0,0 @@ - - * @link http://tillkruess.com/projects/roundcube/ - * - */ - -class rcube_domainfactory_password -{ - function save($curpass, $passwd) - { - $rcmail = rcmail::get_instance(); - - if (is_null($curpass)) { - $curpass = $rcmail->decrypt($_SESSION['password']); - } - - if ($ch = curl_init()) { - // initial login - curl_setopt_array($ch, array( - CURLOPT_RETURNTRANSFER => true, - CURLOPT_URL => 'https://ssl.df.eu/chmail.php', - CURLOPT_POST => true, - CURLOPT_POSTFIELDS => array( - 'login' => $rcmail->user->get_username(), - 'pwd' => $curpass, - 'action' => 'change' - ) - )); - - if ($result = curl_exec($ch)) { - // login successful, get token! - $postfields = array( - 'pwd1' => $passwd, - 'pwd2' => $passwd, - 'action[update]' => 'Speichern' - ); - - preg_match_all('~~i', $result, $fields); - foreach ($fields[1] as $field_key => $field_name) { - $postfields[$field_name] = $fields[2][$field_key]; - } - - // change password - $ch = curl_copy_handle($ch); - curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); - if ($result = curl_exec($ch)) { - if (strpos($result, 'Einstellungen erfolgreich') !== false) { - return PASSWORD_SUCCESS; - } - } else { - return PASSWORD_CONNECT_ERROR; - } - } else { - return PASSWORD_CONNECT_ERROR; - } - } else { - return PASSWORD_CONNECT_ERROR; - } - - return PASSWORD_ERROR; - } -} diff --git a/plugins/password/drivers/expect.php b/plugins/password/drivers/expect.php deleted file mode 100644 index 7a191e254..000000000 --- a/plugins/password/drivers/expect.php +++ /dev/null @@ -1,58 +0,0 @@ - - * - * Configuration settings: - * password_expect_bin => location of expect (e.g. /usr/bin/expect) - * password_expect_script => path to "password-expect" file - * password_expect_params => arguments for the expect script - * see the password-expect file for details. This is probably - * a good starting default: - * -telent -host localhost -output /tmp/passwd.log -log /tmp/passwd.log - */ - -class rcube_expect_password -{ - public function save($currpass, $newpass) - { - $rcmail = rcmail::get_instance(); - $bin = $rcmail->config->get('password_expect_bin'); - $script = $rcmail->config->get('password_expect_script'); - $params = $rcmail->config->get('password_expect_params'); - $username = $_SESSION['username']; - - $cmd = $bin . ' -f ' . $script . ' -- ' . $params; - $handle = popen($cmd, "w"); - fwrite($handle, "$username\n"); - fwrite($handle, "$currpass\n"); - fwrite($handle, "$newpass\n"); - - if (pclose($handle) == 0) { - return PASSWORD_SUCCESS; - } - else { - raise_error(array( - 'code' => 600, - 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Password plugin: Unable to execute $cmd" - ), true, false); - } - - return PASSWORD_ERROR; - } -} diff --git a/plugins/password/drivers/hmail.php b/plugins/password/drivers/hmail.php deleted file mode 100644 index 104c851ae..000000000 --- a/plugins/password/drivers/hmail.php +++ /dev/null @@ -1,63 +0,0 @@ - - * - */ - -class rcube_hmail_password -{ - public function save($curpass, $passwd) - { - $rcmail = rcmail::get_instance(); - - if ($curpass == '' || $passwd == '') { - return PASSWORD_ERROR; - } - - try { - $remote = $rcmail->config->get('hmailserver_remote_dcom', false); - if ($remote) - $obApp = new COM("hMailServer.Application", $rcmail->config->get('hmailserver_server')); - else - $obApp = new COM("hMailServer.Application"); - } - catch (Exception $e) { - write_log('errors', "Plugin password (hmail driver): " . trim(strip_tags($e->getMessage()))); - write_log('errors', "Plugin password (hmail driver): This problem is often caused by DCOM permissions not being set."); - return PASSWORD_ERROR; - } - - $username = $rcmail->user->data['username']; - if (strstr($username,'@')){ - $temparr = explode('@', $username); - $domain = $temparr[1]; - } - else { - $domain = $rcmail->config->get('username_domain',false); - if (!$domain) { - write_log('errors','Plugin password (hmail driver): $rcmail_config[\'username_domain\'] is not defined.'); - write_log('errors','Plugin password (hmail driver): Hint: Use hmail_login plugin (http://myroundcube.googlecode.com'); - return PASSWORD_ERROR; - } - $username = $username . "@" . $domain; - } - - $obApp->Authenticate($username, $curpass); - try { - $obDomain = $obApp->Domains->ItemByName($domain); - $obAccount = $obDomain->Accounts->ItemByAddress($username); - $obAccount->Password = $passwd; - $obAccount->Save(); - return PASSWORD_SUCCESS; - } - catch (Exception $e) { - write_log('errors', "Plugin password (hmail driver): " . trim(strip_tags($e->getMessage()))); - write_log('errors', "Plugin password (hmail driver): This problem is often caused by DCOM permissions not being set."); - return PASSWORD_ERROR; - } - } -} diff --git a/plugins/password/drivers/ldap.php b/plugins/password/drivers/ldap.php deleted file mode 100644 index def07a175..000000000 --- a/plugins/password/drivers/ldap.php +++ /dev/null @@ -1,319 +0,0 @@ - - * - * method hashPassword based on code from the phpLDAPadmin development team (http://phpldapadmin.sourceforge.net/). - * method randomSalt based on code from the phpLDAPadmin development team (http://phpldapadmin.sourceforge.net/). - * - */ - -class rcube_ldap_password -{ - public function save($curpass, $passwd) - { - $rcmail = rcmail::get_instance(); - require_once 'Net/LDAP2.php'; - - // Building user DN - if ($userDN = $rcmail->config->get('password_ldap_userDN_mask')) { - $userDN = $this->substitute_vars($userDN); - } else { - $userDN = $this->search_userdn($rcmail); - } - - if (empty($userDN)) { - return PASSWORD_CONNECT_ERROR; - } - - // Connection Method - switch($rcmail->config->get('password_ldap_method')) { - case 'admin': - $binddn = $rcmail->config->get('password_ldap_adminDN'); - $bindpw = $rcmail->config->get('password_ldap_adminPW'); - break; - case 'user': - default: - $binddn = $userDN; - $bindpw = $curpass; - break; - } - - // Configuration array - $ldapConfig = array ( - 'binddn' => $binddn, - 'bindpw' => $bindpw, - 'basedn' => $rcmail->config->get('password_ldap_basedn'), - 'host' => $rcmail->config->get('password_ldap_host'), - 'port' => $rcmail->config->get('password_ldap_port'), - 'starttls' => $rcmail->config->get('password_ldap_starttls'), - 'version' => $rcmail->config->get('password_ldap_version'), - ); - - // Connecting using the configuration array - $ldap = Net_LDAP2::connect($ldapConfig); - - // Checking for connection error - if (PEAR::isError($ldap)) { - return PASSWORD_CONNECT_ERROR; - } - - $crypted_pass = $this->hashPassword($passwd, $rcmail->config->get('password_ldap_encodage')); - $force = $rcmail->config->get('password_ldap_force_replace'); - $pwattr = $rcmail->config->get('password_ldap_pwattr'); - $lchattr = $rcmail->config->get('password_ldap_lchattr'); - $smbpwattr = $rcmail->config->get('password_ldap_samba_pwattr'); - $smblchattr = $rcmail->config->get('password_ldap_samba_lchattr'); - $samba = $rcmail->config->get('password_ldap_samba'); - - // Support password_ldap_samba option for backward compat. - if ($samba && !$smbpwattr) { - $smbpwattr = 'sambaNTPassword'; - $smblchattr = 'sambaPwdLastSet'; - } - - // Crypt new password - if (!$crypted_pass) { - return PASSWORD_CRYPT_ERROR; - } - - // Crypt new samba password - if ($smbpwattr && !($samba_pass = $this->hashPassword($passwd, 'samba'))) { - return PASSWORD_CRYPT_ERROR; - } - - // Writing new crypted password to LDAP - $userEntry = $ldap->getEntry($userDN); - if (Net_LDAP2::isError($userEntry)) { - return PASSWORD_CONNECT_ERROR; - } - - if (!$userEntry->replace(array($pwattr => $crypted_pass), $force)) { - return PASSWORD_CONNECT_ERROR; - } - - // Updating PasswordLastChange Attribute if desired - if ($lchattr) { - $current_day = (int)(time() / 86400); - if (!$userEntry->replace(array($lchattr => $current_day), $force)) { - return PASSWORD_CONNECT_ERROR; - } - } - - // Update Samba password and last change fields - if ($smbpwattr) { - $userEntry->replace(array($smbpwattr => $samba_pass), $force); - } - // Update Samba password last change field - if ($smblchattr) { - $userEntry->replace(array($smblchattr => time()), $force); - } - - if (Net_LDAP2::isError($userEntry->update())) { - return PASSWORD_CONNECT_ERROR; - } - - // All done, no error - return PASSWORD_SUCCESS; - } - - /** - * Bind with searchDN and searchPW and search for the user's DN. - * Use search_base and search_filter defined in config file. - * Return the found DN. - */ - function search_userdn($rcmail) - { - $ldapConfig = array ( - 'binddn' => $rcmail->config->get('password_ldap_searchDN'), - 'bindpw' => $rcmail->config->get('password_ldap_searchPW'), - 'basedn' => $rcmail->config->get('password_ldap_basedn'), - 'host' => $rcmail->config->get('password_ldap_host'), - 'port' => $rcmail->config->get('password_ldap_port'), - 'starttls' => $rcmail->config->get('password_ldap_starttls'), - 'version' => $rcmail->config->get('password_ldap_version'), - ); - - $ldap = Net_LDAP2::connect($ldapConfig); - - if (PEAR::isError($ldap)) { - return ''; - } - - $base = $rcmail->config->get('password_ldap_search_base'); - $filter = $this->substitute_vars($rcmail->config->get('password_ldap_search_filter')); - $options = array ( - 'scope' => 'sub', - 'attributes' => array(), - ); - - $result = $ldap->search($base, $filter, $options); - $ldap->done(); - if (PEAR::isError($result) || ($result->count() != 1)) { - return ''; - } - - return $result->current()->dn(); - } - - /** - * Substitute %login, %name, %domain, %dc in $str. - * See plugin config for details. - */ - function substitute_vars($str) - { - $rcmail = rcmail::get_instance(); - $domain = $rcmail->user->get_username('domain'); - $dc = 'dc='.strtr($domain, array('.' => ',dc=')); // hierarchal domain string - - $str = str_replace(array( - '%login', - '%name', - '%domain', - '%dc', - ), array( - $_SESSION['username'], - $rcmail->user->get_username('local'), - $domain, - $dc, - ), $str - ); - - return $str; - } - - /** - * Code originaly from the phpLDAPadmin development team - * http://phpldapadmin.sourceforge.net/ - * - * Hashes a password and returns the hash based on the specified enc_type. - * - * @param string $passwordClear The password to hash in clear text. - * @param string $encodageType Standard LDAP encryption type which must be one of - * crypt, ext_des, md5crypt, blowfish, md5, sha, smd5, ssha, or clear. - * @return string The hashed password. - * - */ - function hashPassword( $passwordClear, $encodageType ) - { - $encodageType = strtolower( $encodageType ); - switch( $encodageType ) { - case 'crypt': - $cryptedPassword = '{CRYPT}' . crypt($passwordClear, $this->randomSalt(2)); - break; - - case 'ext_des': - // extended des crypt. see OpenBSD crypt man page. - if ( ! defined( 'CRYPT_EXT_DES' ) || CRYPT_EXT_DES == 0 ) { - // Your system crypt library does not support extended DES encryption. - return FALSE; - } - $cryptedPassword = '{CRYPT}' . crypt( $passwordClear, '_' . $this->randomSalt(8) ); - break; - - case 'md5crypt': - if( ! defined( 'CRYPT_MD5' ) || CRYPT_MD5 == 0 ) { - // Your system crypt library does not support md5crypt encryption. - return FALSE; - } - $cryptedPassword = '{CRYPT}' . crypt( $passwordClear , '$1$' . $this->randomSalt(9) ); - break; - - case 'blowfish': - if( ! defined( 'CRYPT_BLOWFISH' ) || CRYPT_BLOWFISH == 0 ) { - // Your system crypt library does not support blowfish encryption. - return FALSE; - } - // hardcoded to second blowfish version and set number of rounds - $cryptedPassword = '{CRYPT}' . crypt( $passwordClear , '$2a$12$' . $this->randomSalt(13) ); - break; - - case 'md5': - $cryptedPassword = '{MD5}' . base64_encode( pack( 'H*' , md5( $passwordClear) ) ); - break; - - case 'sha': - if( function_exists('sha1') ) { - // use php 4.3.0+ sha1 function, if it is available. - $cryptedPassword = '{SHA}' . base64_encode( pack( 'H*' , sha1( $passwordClear) ) ); - } elseif( function_exists( 'mhash' ) ) { - $cryptedPassword = '{SHA}' . base64_encode( mhash( MHASH_SHA1, $passwordClear) ); - } else { - return FALSE; //Your PHP install does not have the mhash() function. Cannot do SHA hashes. - } - break; - - case 'ssha': - if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) { - mt_srand( (double) microtime() * 1000000 ); - $salt = mhash_keygen_s2k( MHASH_SHA1, $passwordClear, substr( pack( 'h*', md5( mt_rand() ) ), 0, 8 ), 4 ); - $cryptedPassword = '{SSHA}'.base64_encode( mhash( MHASH_SHA1, $passwordClear.$salt ).$salt ); - } else { - return FALSE; //Your PHP install does not have the mhash() function. Cannot do SHA hashes. - } - break; - - case 'smd5': - if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) { - mt_srand( (double) microtime() * 1000000 ); - $salt = mhash_keygen_s2k( MHASH_MD5, $passwordClear, substr( pack( 'h*', md5( mt_rand() ) ), 0, 8 ), 4 ); - $cryptedPassword = '{SMD5}'.base64_encode( mhash( MHASH_MD5, $passwordClear.$salt ).$salt ); - } else { - return FALSE; //Your PHP install does not have the mhash() function. Cannot do SHA hashes. - } - break; - - case 'samba': - if (function_exists('hash')) { - $cryptedPassword = hash('md4', rcube_charset_convert($passwordClear, RCMAIL_CHARSET, 'UTF-16LE')); - $cryptedPassword = strtoupper($cryptedPassword); - } else { - /* Your PHP install does not have the hash() function */ - return false; - } - break; - - case 'clear': - default: - $cryptedPassword = $passwordClear; - } - - return $cryptedPassword; - } - - /** - * Code originaly from the phpLDAPadmin development team - * http://phpldapadmin.sourceforge.net/ - * - * Used to generate a random salt for crypt-style passwords. Salt strings are used - * to make pre-built hash cracking dictionaries difficult to use as the hash algorithm uses - * not only the user's password but also a randomly generated string. The string is - * stored as the first N characters of the hash for reference of hashing algorithms later. - * - * --- added 20021125 by bayu irawan --- - * --- ammended 20030625 by S C Rigler --- - * - * @param int $length The length of the salt string to generate. - * @return string The generated salt string. - */ - function randomSalt( $length ) - { - $possible = '0123456789'. - 'abcdefghijklmnopqrstuvwxyz'. - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. - './'; - $str = ''; - // mt_srand((double)microtime() * 1000000); - - while (strlen($str) < $length) - $str .= substr($possible, (rand() % strlen($possible)), 1); - - return $str; - } -} diff --git a/plugins/password/drivers/ldap_simple.php b/plugins/password/drivers/ldap_simple.php deleted file mode 100644 index e1daed9f3..000000000 --- a/plugins/password/drivers/ldap_simple.php +++ /dev/null @@ -1,276 +0,0 @@ - - */ - -class rcube_ldap_simple_password -{ - function save($curpass, $passwd) - { - $rcmail = rcmail::get_instance(); - - // Connect - if (!$ds = ldap_connect($rcmail->config->get('password_ldap_host'), $rcmail->config->get('password_ldap_port'))) { - ldap_unbind($ds); - return PASSWORD_CONNECT_ERROR; - } - - // Set protocol version - if (!ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, $rcmail->config->get('password_ldap_version'))) { - ldap_unbind($ds); - return PASSWORD_CONNECT_ERROR; - } - - // Start TLS - if ($rcmail->config->get('password_ldap_starttls')) { - if (!ldap_start_tls($ds)) { - ldap_unbind($ds); - return PASSWORD_CONNECT_ERROR; - } - } - - // Build user DN - if ($user_dn = $rcmail->config->get('password_ldap_userDN_mask')) { - $user_dn = $this->substitute_vars($user_dn); - } - else { - $user_dn = $this->search_userdn($rcmail, $ds); - } - - if (empty($user_dn)) { - ldap_unbind($ds); - return PASSWORD_CONNECT_ERROR; - } - - // Connection method - switch ($rcmail->config->get('password_ldap_method')) { - case 'admin': - $binddn = $rcmail->config->get('password_ldap_adminDN'); - $bindpw = $rcmail->config->get('password_ldap_adminPW'); - break; - case 'user': - default: - $binddn = $user_dn; - $bindpw = $curpass; - break; - } - - $crypted_pass = $this->hash_password($passwd, $rcmail->config->get('password_ldap_encodage')); - $lchattr = $rcmail->config->get('password_ldap_lchattr'); - $pwattr = $rcmail->config->get('password_ldap_pwattr'); - $smbpwattr = $rcmail->config->get('password_ldap_samba_pwattr'); - $smblchattr = $rcmail->config->get('password_ldap_samba_lchattr'); - $samba = $rcmail->config->get('password_ldap_samba'); - - // Support password_ldap_samba option for backward compat. - if ($samba && !$smbpwattr) { - $smbpwattr = 'sambaNTPassword'; - $smblchattr = 'sambaPwdLastSet'; - } - - // Crypt new password - if (!$crypted_pass) { - return PASSWORD_CRYPT_ERROR; - } - - // Crypt new Samba password - if ($smbpwattr && !($samba_pass = $this->hash_password($passwd, 'samba'))) { - return PASSWORD_CRYPT_ERROR; - } - - // Bind - if (!ldap_bind($ds, $binddn, $bindpw)) { - ldap_unbind($ds); - return PASSWORD_CONNECT_ERROR; - } - - $entree[$pwattr] = $crypted_pass; - - // Update PasswordLastChange Attribute if desired - if ($lchattr) { - $entree[$lchattr] = (int)(time() / 86400); - } - - // Update Samba password - if ($smbpwattr) { - $entree[$smbpwattr] = $samba_pass; - } - - // Update Samba password last change - if ($smblchattr) { - $entree[$smblchattr] = time(); - } - - if (!ldap_modify($ds, $user_dn, $entree)) { - ldap_unbind($ds); - return PASSWORD_CONNECT_ERROR; - } - - // All done, no error - ldap_unbind($ds); - return PASSWORD_SUCCESS; - } - - /** - * Bind with searchDN and searchPW and search for the user's DN - * Use search_base and search_filter defined in config file - * Return the found DN - */ - function search_userdn($rcmail, $ds) - { - /* Bind */ - if (!ldap_bind($ds, $rcmail->config->get('password_ldap_searchDN'), $rcmail->config->get('password_ldap_searchPW'))) { - return false; - } - - /* Search for the DN */ - if (!$sr = ldap_search($ds, $rcmail->config->get('password_ldap_search_base'), $this->substitute_vars($rcmail->config->get('password_ldap_search_filter')))) { - return false; - } - - /* If no or more entries were found, return false */ - if (ldap_count_entries($ds, $sr) != 1) { - return false; - } - - return ldap_get_dn($ds, ldap_first_entry($ds, $sr)); - } - - /** - * Substitute %login, %name, %domain, %dc in $str - * See plugin config for details - */ - function substitute_vars($str) - { - $str = str_replace('%login', $_SESSION['username'], $str); - $str = str_replace('%l', $_SESSION['username'], $str); - - $parts = explode('@', $_SESSION['username']); - - if (count($parts) == 2) { - $dc = 'dc='.strtr($parts[1], array('.' => ',dc=')); // hierarchal domain string - - $str = str_replace('%name', $parts[0], $str); - $str = str_replace('%n', $parts[0], $str); - $str = str_replace('%dc', $dc, $str); - $str = str_replace('%domain', $parts[1], $str); - $str = str_replace('%d', $parts[1], $str); - } - - return $str; - } - - /** - * Code originaly from the phpLDAPadmin development team - * http://phpldapadmin.sourceforge.net/ - * - * Hashes a password and returns the hash based on the specified enc_type - */ - function hash_password($password_clear, $encodage_type) - { - $encodage_type = strtolower($encodage_type); - switch ($encodage_type) { - case 'crypt': - $crypted_password = '{CRYPT}' . crypt($password_clear, $this->random_salt(2)); - break; - case 'ext_des': - /* Extended DES crypt. see OpenBSD crypt man page */ - if (!defined('CRYPT_EXT_DES') || CRYPT_EXT_DES == 0) { - /* Your system crypt library does not support extended DES encryption */ - return false; - } - $crypted_password = '{CRYPT}' . crypt($password_clear, '_' . $this->random_salt(8)); - break; - case 'md5crypt': - if (!defined('CRYPT_MD5') || CRYPT_MD5 == 0) { - /* Your system crypt library does not support md5crypt encryption */ - return false; - } - $crypted_password = '{CRYPT}' . crypt($password_clear, '$1$' . $this->random_salt(9)); - break; - case 'blowfish': - if (!defined('CRYPT_BLOWFISH') || CRYPT_BLOWFISH == 0) { - /* Your system crypt library does not support blowfish encryption */ - return false; - } - /* Hardcoded to second blowfish version and set number of rounds */ - $crypted_password = '{CRYPT}' . crypt($password_clear, '$2a$12$' . $this->random_salt(13)); - break; - case 'md5': - $crypted_password = '{MD5}' . base64_encode(pack('H*', md5($password_clear))); - break; - case 'sha': - if (function_exists('sha1')) { - /* Use PHP 4.3.0+ sha1 function, if it is available */ - $crypted_password = '{SHA}' . base64_encode(pack('H*', sha1($password_clear))); - } else if (function_exists('mhash')) { - $crypted_password = '{SHA}' . base64_encode(mhash(MHASH_SHA1, $password_clear)); - } else { - /* Your PHP install does not have the mhash() function */ - return false; - } - break; - case 'ssha': - if (function_exists('mhash') && function_exists('mhash_keygen_s2k')) { - mt_srand((double) microtime() * 1000000 ); - $salt = mhash_keygen_s2k(MHASH_SHA1, $password_clear, substr(pack('h*', md5(mt_rand())), 0, 8), 4); - $crypted_password = '{SSHA}' . base64_encode(mhash(MHASH_SHA1, $password_clear . $salt) . $salt); - } else { - /* Your PHP install does not have the mhash() function */ - return false; - } - break; - case 'smd5': - if (function_exists('mhash') && function_exists('mhash_keygen_s2k')) { - mt_srand((double) microtime() * 1000000 ); - $salt = mhash_keygen_s2k(MHASH_MD5, $password_clear, substr(pack('h*', md5(mt_rand())), 0, 8), 4); - $crypted_password = '{SMD5}' . base64_encode(mhash(MHASH_MD5, $password_clear . $salt) . $salt); - } else { - /* Your PHP install does not have the mhash() function */ - return false; - } - break; - case 'samba': - if (function_exists('hash')) { - $crypted_password = hash('md4', rcube_charset_convert($password_clear, RCMAIL_CHARSET, 'UTF-16LE')); - $crypted_password = strtoupper($crypted_password); - } else { - /* Your PHP install does not have the hash() function */ - return false; - } - break; - case 'clear': - default: - $crypted_password = $password_clear; - } - - return $crypted_password; - } - - /** - * Code originaly from the phpLDAPadmin development team - * http://phpldapadmin.sourceforge.net/ - * - * Used to generate a random salt for crypt-style passwords - */ - function random_salt($length) - { - $possible = '0123456789' . 'abcdefghijklmnopqrstuvwxyz' . 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' . './'; - $str = ''; - // mt_srand((double)microtime() * 1000000); - - while (strlen($str) < $length) { - $str .= substr($possible, (rand() % strlen($possible)), 1); - } - - return $str; - } -} diff --git a/plugins/password/drivers/pam.php b/plugins/password/drivers/pam.php deleted file mode 100644 index ed60bd841..000000000 --- a/plugins/password/drivers/pam.php +++ /dev/null @@ -1,42 +0,0 @@ - 600, - 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Password plugin: PAM authentication failed for user $user: $error" - ), true, false); - } - } - else { - raise_error(array( - 'code' => 600, - 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Password plugin: PECL-PAM module not loaded" - ), true, false); - } - - return PASSWORD_ERROR; - } -} diff --git a/plugins/password/drivers/poppassd.php b/plugins/password/drivers/poppassd.php deleted file mode 100644 index e18ec2660..000000000 --- a/plugins/password/drivers/poppassd.php +++ /dev/null @@ -1,67 +0,0 @@ - $code, 'message' => $matches[1]); - } else { - return $code; - } - } - - function save($curpass, $passwd) - { - $rcmail = rcmail::get_instance(); -// include('Net/Socket.php'); - $poppassd = new Net_Socket(); - - $result = $poppassd->connect($rcmail->config->get('password_pop_host'), $rcmail->config->get('password_pop_port'), null); - if (PEAR::isError($result)) { - return $this->format_error_result(PASSWORD_CONNECT_ERROR, $result->getMessage()); - } - else { - $result = $poppassd->readLine(); - if(!preg_match('/^2\d\d/', $result)) { - $poppassd->disconnect(); - return $this->format_error_result(PASSWORD_ERROR, $result); - } - else { - $poppassd->writeLine("user ". $_SESSION['username']); - $result = $poppassd->readLine(); - if(!preg_match('/^[23]\d\d/', $result) ) { - $poppassd->disconnect(); - return $this->format_error_result(PASSWORD_CONNECT_ERROR, $result); - } - else { - $poppassd->writeLine("pass ". $curpass); - $result = $poppassd->readLine(); - if(!preg_match('/^[23]\d\d/', $result) ) { - $poppassd->disconnect(); - return $this->format_error_result(PASSWORD_ERROR, $result); - } - else { - $poppassd->writeLine("newpass ". $passwd); - $result = $poppassd->readLine(); - $poppassd->disconnect(); - if (!preg_match('/^2\d\d/', $result)) - return $this->format_error_result(PASSWORD_ERROR, $result); - else - return PASSWORD_SUCCESS; - } - } - } - } - } -} diff --git a/plugins/password/drivers/pw_usermod.php b/plugins/password/drivers/pw_usermod.php deleted file mode 100644 index 5b92fcbfb..000000000 --- a/plugins/password/drivers/pw_usermod.php +++ /dev/null @@ -1,41 +0,0 @@ - - * @author Adamson Huang - */ - -class rcube_pw_usermod_password -{ - public function save($currpass, $newpass) - { - $username = $_SESSION['username']; - $cmd = rcmail::get_instance()->config->get('password_pw_usermod_cmd'); - $cmd .= " $username > /dev/null"; - - $handle = popen($cmd, "w"); - fwrite($handle, "$newpass\n"); - - if (pclose($handle) == 0) { - return PASSWORD_SUCCESS; - } - else { - raise_error(array( - 'code' => 600, - 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Password plugin: Unable to execute $cmd" - ), true, false); - } - - return PASSWORD_ERROR; - } -} diff --git a/plugins/password/drivers/sasl.php b/plugins/password/drivers/sasl.php deleted file mode 100644 index 957c1196c..000000000 --- a/plugins/password/drivers/sasl.php +++ /dev/null @@ -1,45 +0,0 @@ -config->get('password_saslpasswd_args', ''); - - if ($fh = popen("$curdir/chgsaslpasswd -p $args $username", 'w')) { - fwrite($fh, $newpass."\n"); - $code = pclose($fh); - - if ($code == 0) - return PASSWORD_SUCCESS; - } - else { - raise_error(array( - 'code' => 600, - 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Password plugin: Unable to execute $curdir/chgsaslpasswd" - ), true, false); - } - - return PASSWORD_ERROR; - } -} diff --git a/plugins/password/drivers/smb.php b/plugins/password/drivers/smb.php deleted file mode 100644 index 138313be8..000000000 --- a/plugins/password/drivers/smb.php +++ /dev/null @@ -1,59 +0,0 @@ - - * - * Configuration settings: - * password_smb_host => samba host (default: localhost) - * password_smb_cmd => smbpasswd binary (default: /usr/bin/smbpasswd) - */ - -class rcube_smb_password -{ - - public function save($currpass, $newpass) - { - $host = rcmail::get_instance()->config->get('password_smb_host','localhost'); - $bin = rcmail::get_instance()->config->get('password_smb_cmd','/usr/bin/smbpasswd'); - $username = $_SESSION['username']; - - $tmpfile = tempnam(sys_get_temp_dir(),'smb'); - $cmd = $bin . ' -r ' . $host . ' -s -U "' . $username . '" > ' . $tmpfile . ' 2>&1'; - $handle = @popen($cmd, 'w'); - fputs($handle, $currpass."\n"); - fputs($handle, $newpass."\n"); - fputs($handle, $newpass."\n"); - @pclose($handle); - $res = file($tmpfile); - unlink($tmpfile); - - if (strstr($res[count($res) - 1], 'Password changed for user') !== false) { - return PASSWORD_SUCCESS; - } - else { - raise_error(array( - 'code' => 600, - 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Password plugin: Unable to execute $cmd" - ), true, false); - } - - return PASSWORD_ERROR; - } - -} -?> diff --git a/plugins/password/drivers/sql.php b/plugins/password/drivers/sql.php deleted file mode 100644 index e9207300e..000000000 --- a/plugins/password/drivers/sql.php +++ /dev/null @@ -1,175 +0,0 @@ - - * - */ - -class rcube_sql_password -{ - function save($curpass, $passwd) - { - $rcmail = rcmail::get_instance(); - - if (!($sql = $rcmail->config->get('password_query'))) - $sql = 'SELECT update_passwd(%c, %u)'; - - if ($dsn = $rcmail->config->get('password_db_dsn')) { - // #1486067: enable new_link option - if (is_array($dsn) && empty($dsn['new_link'])) - $dsn['new_link'] = true; - else if (!is_array($dsn) && !preg_match('/\?new_link=true/', $dsn)) - $dsn .= '?new_link=true'; - - $db = new rcube_mdb2($dsn, '', FALSE); - $db->set_debug((bool)$rcmail->config->get('sql_debug')); - $db->db_connect('w'); - } - else { - $db = $rcmail->get_dbh(); - } - - if ($err = $db->is_error()) - return PASSWORD_ERROR; - - // crypted password - if (strpos($sql, '%c') !== FALSE) { - $salt = ''; - if (CRYPT_MD5) { - // Always use eight salt characters for MD5 (#1488136) - $len = 8; - } else if (CRYPT_STD_DES) { - $len = 2; - } else { - return PASSWORD_CRYPT_ERROR; - } - - //Restrict the character set used as salt (#1488136) - $seedchars = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; - for ($i = 0; $i < $len ; $i++) { - $salt .= $seedchars[rand(0, 63)]; - } - - $sql = str_replace('%c', $db->quote(crypt($passwd, CRYPT_MD5 ? '$1$'.$salt.'$' : $salt)), $sql); - } - - // dovecotpw - if (strpos($sql, '%D') !== FALSE) { - if (!($dovecotpw = $rcmail->config->get('password_dovecotpw'))) - $dovecotpw = 'dovecotpw'; - if (!($method = $rcmail->config->get('password_dovecotpw_method'))) - $method = 'CRAM-MD5'; - - // use common temp dir - $tmp_dir = $rcmail->config->get('temp_dir'); - $tmpfile = tempnam($tmp_dir, 'roundcube-'); - - $pipe = popen("$dovecotpw -s '$method' > '$tmpfile'", "w"); - if (!$pipe) { - unlink($tmpfile); - return PASSWORD_CRYPT_ERROR; - } - else { - fwrite($pipe, $passwd . "\n", 1+strlen($passwd)); usleep(1000); - fwrite($pipe, $passwd . "\n", 1+strlen($passwd)); - pclose($pipe); - $newpass = trim(file_get_contents($tmpfile), "\n"); - if (!preg_match('/^\{' . $method . '\}/', $newpass)) { - return PASSWORD_CRYPT_ERROR; - } - if (!$rcmail->config->get('password_dovecotpw_with_method')) - $newpass = trim(str_replace('{' . $method . '}', '', $newpass)); - unlink($tmpfile); - } - $sql = str_replace('%D', $db->quote($newpass), $sql); - } - - // hashed passwords - if (preg_match('/%[n|q]/', $sql)) { - if (!extension_loaded('hash')) { - raise_error(array( - 'code' => 600, - 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Password plugin: 'hash' extension not loaded!" - ), true, false); - - return PASSWORD_ERROR; - } - - if (!($hash_algo = strtolower($rcmail->config->get('password_hash_algorithm')))) - $hash_algo = 'sha1'; - - $hash_passwd = hash($hash_algo, $passwd); - $hash_curpass = hash($hash_algo, $curpass); - - if ($rcmail->config->get('password_hash_base64')) { - $hash_passwd = base64_encode(pack('H*', $hash_passwd)); - $hash_curpass = base64_encode(pack('H*', $hash_curpass)); - } - - $sql = str_replace('%n', $db->quote($hash_passwd, 'text'), $sql); - $sql = str_replace('%q', $db->quote($hash_curpass, 'text'), $sql); - } - - // Handle clear text passwords securely (#1487034) - $sql_vars = array(); - if (preg_match_all('/%[p|o]/', $sql, $m)) { - foreach ($m[0] as $var) { - if ($var == '%p') { - $sql = preg_replace('/%p/', '?', $sql, 1); - $sql_vars[] = (string) $passwd; - } - else { // %o - $sql = preg_replace('/%o/', '?', $sql, 1); - $sql_vars[] = (string) $curpass; - } - } - } - - $local_part = $rcmail->user->get_username('local'); - $domain_part = $rcmail->user->get_username('domain'); - $username = $_SESSION['username']; - $host = $_SESSION['imap_host']; - - // convert domains to/from punnycode - if ($rcmail->config->get('password_idn_ascii')) { - $domain_part = rcube_idn_to_ascii($domain_part); - $username = rcube_idn_to_ascii($username); - $host = rcube_idn_to_ascii($host); - } - else { - $domain_part = rcube_idn_to_utf8($domain_part); - $username = rcube_idn_to_utf8($username); - $host = rcube_idn_to_utf8($host); - } - - // at least we should always have the local part - $sql = str_replace('%l', $db->quote($local_part, 'text'), $sql); - $sql = str_replace('%d', $db->quote($domain_part, 'text'), $sql); - $sql = str_replace('%u', $db->quote($username, 'text'), $sql); - $sql = str_replace('%h', $db->quote($host, 'text'), $sql); - - $res = $db->query($sql, $sql_vars); - - if (!$db->is_error()) { - if (strtolower(substr(trim($query),0,6))=='select') { - if ($result = $db->fetch_array($res)) - return PASSWORD_SUCCESS; - } else { - // This is the good case: 1 row updated - if ($db->affected_rows($res) == 1) - return PASSWORD_SUCCESS; - // @TODO: Some queries don't affect any rows - // Should we assume a success if there was no error? - } - } - - return PASSWORD_ERROR; - } -} diff --git a/plugins/password/drivers/virtualmin.php b/plugins/password/drivers/virtualmin.php deleted file mode 100644 index b2547e07f..000000000 --- a/plugins/password/drivers/virtualmin.php +++ /dev/null @@ -1,76 +0,0 @@ -config->get('password_virtualmin_format', 0); - $username = $_SESSION['username']; - - switch ($format) { - case 1: // username%domain - $domain = substr(strrchr($username, "%"), 1); - break; - case 2: // username.domain (could be bogus) - $pieces = explode(".", $username); - $domain = $pieces[count($pieces)-2]. "." . end($pieces); - break; - case 3: // domain.username (could be bogus) - $pieces = explode(".", $username); - $domain = $pieces[0]. "." . $pieces[1]; - break; - case 4: // username-domain - $domain = substr(strrchr($username, "-"), 1); - break; - case 5: // domain-username - $domain = str_replace(strrchr($username, "-"), "", $username); - break; - case 6: // username_domain - $domain = substr(strrchr($username, "_"), 1); - break; - case 7: // domain_username - $pieces = explode("_", $username); - $domain = $pieces[0]; - break; - default: // username@domain - $domain = substr(strrchr($username, "@"), 1); - } - - $username = escapeshellcmd($username); - $domain = escapeshellcmd($domain); - $newpass = escapeshellcmd($newpass); - $curdir = INSTALL_PATH . 'plugins/password/helpers'; - - exec("$curdir/chgvirtualminpasswd modify-user --domain $domain --user $username --pass $newpass", $output, $returnvalue); - - if ($returnvalue == 0) { - return PASSWORD_SUCCESS; - } - else { - raise_error(array( - 'code' => 600, - 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Password plugin: Unable to execute $curdir/chgvirtualminpasswd" - ), true, false); - } - - return PASSWORD_ERROR; - } -} diff --git a/plugins/password/drivers/vpopmaild.php b/plugins/password/drivers/vpopmaild.php deleted file mode 100644 index 510cf3338..000000000 --- a/plugins/password/drivers/vpopmaild.php +++ /dev/null @@ -1,53 +0,0 @@ -connect($rcmail->config->get('password_vpopmaild_host'), - $rcmail->config->get('password_vpopmaild_port'), null))) { - return PASSWORD_CONNECT_ERROR; - } - - $result = $vpopmaild->readLine(); - if(!preg_match('/^\+OK/', $result)) { - $vpopmaild->disconnect(); - return PASSWORD_CONNECT_ERROR; - } - - $vpopmaild->writeLine("slogin ". $_SESSION['username'] . " " . $curpass); - $result = $vpopmaild->readLine(); - - if(!preg_match('/^\+OK/', $result) ) { - $vpopmaild->writeLine("quit"); - $vpopmaild->disconnect(); - return PASSWORD_ERROR; - } - - $vpopmaild->writeLine("mod_user ". $_SESSION['username']); - $vpopmaild->writeLine("clear_text_password ". $passwd); - $vpopmaild->writeLine("."); - $result = $vpopmaild->readLine(); - $vpopmaild->writeLine("quit"); - $vpopmaild->disconnect(); - - if (!preg_match('/^\+OK/', $result)) - return PASSWORD_ERROR; - - return PASSWORD_SUCCESS; - } -} diff --git a/plugins/password/drivers/ximss.php b/plugins/password/drivers/ximss.php deleted file mode 100644 index 3b5286a27..000000000 --- a/plugins/password/drivers/ximss.php +++ /dev/null @@ -1,76 +0,0 @@ - - */ - -class rcube_ximss_password -{ - function save($pass, $newpass) - { - $rcmail = rcmail::get_instance(); - - $host = $rcmail->config->get('password_ximss_host'); - $port = $rcmail->config->get('password_ximss_port'); - $sock = stream_socket_client("tcp://$host:$port", $errno, $errstr, 30); - - if ($sock === FALSE) { - return PASSWORD_CONNECT_ERROR; - } - - // send all requests at once(pipelined) - fwrite( $sock, ''."\0"); - fwrite( $sock, ''."\0"); - fwrite( $sock, ''."\0"); - - //example responses - // \0 - // \0 - // \0 - // \0 - // or an error: - // \0 - - $responseblob = ''; - while (!feof($sock)) { - $responseblob .= fgets($sock, 1024); - } - - fclose($sock); - - foreach( explode( "\0",$responseblob) as $response ) { - $resp = simplexml_load_string("".$response.""); - - if( $resp->response[0]['id'] == 'A001' ) { - if( isset( $resp->response[0]['errorNum'] ) ) { - return PASSWORD_CONNECT_ERROR; - } - } - else if( $resp->response[0]['id'] == 'A002' ) { - if( isset( $resp->response[0]['errorNum'] )) { - return PASSWORD_ERROR; - } - } - else if( $resp->response[0]['id'] == 'A003' ) { - if( isset($resp->response[0]['errorNum'] )) { - //There was a problem during logout(This is probably harmless) - } - } - } //foreach - - return PASSWORD_SUCCESS; - - } -} diff --git a/plugins/password/drivers/xmail.php b/plugins/password/drivers/xmail.php deleted file mode 100644 index 33a49ffe3..000000000 --- a/plugins/password/drivers/xmail.php +++ /dev/null @@ -1,106 +0,0 @@ - - * - * Setup xmail_host, xmail_user, xmail_pass and xmail_port into - * config.inc.php of password plugin as follows: - * - * $rcmail_config['xmail_host'] = 'localhost'; - * $rcmail_config['xmail_user'] = 'YourXmailControlUser'; - * $rcmail_config['xmail_pass'] = 'YourXmailControlPass'; - * $rcmail_config['xmail_port'] = 6017; - * - */ - -class rcube_xmail_password -{ - function save($currpass, $newpass) - { - $rcmail = rcmail::get_instance(); - list($user,$domain) = explode('@', $_SESSION['username']); - - $xmail = new XMail; - - $xmail->hostname = $rcmail->config->get('xmail_host'); - $xmail->username = $rcmail->config->get('xmail_user'); - $xmail->password = $rcmail->config->get('xmail_pass'); - $xmail->port = $rcmail->config->get('xmail_port'); - - if (!$xmail->connect()) { - raise_error(array( - 'code' => 600, - 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Password plugin: Unable to connect to mail server" - ), true, false); - return PASSWORD_CONNECT_ERROR; - } - else if (!$xmail->send("userpasswd\t".$domain."\t".$user."\t".$newpass."\n")) { - $xmail->close(); - raise_error(array( - 'code' => 600, - 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Password plugin: Unable to change password" - ), true, false); - return PASSWORD_ERROR; - } - else { - $xmail->close(); - return PASSWORD_SUCCESS; - } - } -} - -class XMail { - var $socket; - var $hostname = 'localhost'; - var $username = 'xmail'; - var $password = ''; - var $port = 6017; - - function send($msg) - { - socket_write($this->socket,$msg); - if (substr($in = socket_read($this->socket, 512, PHP_BINARY_READ),0,1) != "+") { - return false; - } - return true; - } - - function connect() - { - $this->socket = socket_create(AF_INET, SOCK_STREAM, 0); - if ($this->socket < 0) - return false; - - $result = socket_connect($this->socket, $this->hostname, $this->port); - if ($result < 0) { - socket_close($this->socket); - return false; - } - - if (substr($in = socket_read($this->socket, 512, PHP_BINARY_READ),0,1) != "+") { - socket_close($this->socket); - return false; - } - - if (!$this->send("$this->username\t$this->password\n")) { - socket_close($this->socket); - return false; - } - return true; - } - - function close() - { - $this->send("quit\n"); - socket_close($this->socket); - } -} - diff --git a/plugins/password/helpers/chgdbmailusers.c b/plugins/password/helpers/chgdbmailusers.c deleted file mode 100644 index 28f79c100..000000000 --- a/plugins/password/helpers/chgdbmailusers.c +++ /dev/null @@ -1,48 +0,0 @@ -#include -#include -#include - -// set the UID this script will run as (root user) -#define UID 0 -#define CMD "/usr/sbin/dbmail-users" -#define RCOK 0x100 - -/* INSTALLING: - gcc -o chgdbmailusers chgdbmailusers.c - chown root.apache chgdbmailusers - strip chgdbmailusers - chmod 4550 chgdbmailusers -*/ - -main(int argc, char *argv[]) -{ - int cnt,rc,cc; - char cmnd[255]; - - strcpy(cmnd, CMD); - - if (argc > 1) - { - for (cnt = 1; cnt < argc; cnt++) - { - strcat(cmnd, " "); - strcat(cmnd, argv[cnt]); - } - } - else - { - fprintf(stderr, "__ %s: failed %d %d\n", argv[0], rc, cc); - return 255; - } - - cc = setuid(UID); - rc = system(cmnd); - - if ((rc != RCOK) || (cc != 0)) - { - fprintf(stderr, "__ %s: failed %d %d\n", argv[0], rc, cc); - return 1; - } - - return 0; -} diff --git a/plugins/password/helpers/chgsaslpasswd.c b/plugins/password/helpers/chgsaslpasswd.c deleted file mode 100644 index bcdcb2e0d..000000000 --- a/plugins/password/helpers/chgsaslpasswd.c +++ /dev/null @@ -1,29 +0,0 @@ -#include -#include - -// set the UID this script will run as (cyrus user) -#define UID 96 -// set the path to saslpasswd or saslpasswd2 -#define CMD "/usr/sbin/saslpasswd2" - -/* INSTALLING: - gcc -o chgsaslpasswd chgsaslpasswd.c - chown cyrus.apache chgsaslpasswd - strip chgsaslpasswd - chmod 4550 chgsaslpasswd -*/ - -main(int argc, char *argv[]) -{ - int rc,cc; - - cc = setuid(UID); - rc = execvp(CMD, argv); - if ((rc != 0) || (cc != 0)) - { - fprintf(stderr, "__ %s: failed %d %d\n", argv[0], rc, cc); - return 1; - } - - return 0; -} diff --git a/plugins/password/helpers/chgvirtualminpasswd.c b/plugins/password/helpers/chgvirtualminpasswd.c deleted file mode 100644 index 4e2299c66..000000000 --- a/plugins/password/helpers/chgvirtualminpasswd.c +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include - -// set the UID this script will run as (root user) -#define UID 0 -#define CMD "/usr/sbin/virtualmin" - -/* INSTALLING: - gcc -o chgvirtualminpasswd chgvirtualminpasswd.c - chown root.apache chgvirtualminpasswd - strip chgvirtualminpasswd - chmod 4550 chgvirtualminpasswd -*/ - -main(int argc, char *argv[]) -{ - int rc,cc; - - cc = setuid(UID); - rc = execvp(CMD, argv); - if ((rc != 0) || (cc != 0)) - { - fprintf(stderr, "__ %s: failed %d %d\n", argv[0], rc, cc); - return 1; - } - - return 0; -} diff --git a/plugins/password/helpers/chpass-wrapper.py b/plugins/password/helpers/chpass-wrapper.py deleted file mode 100644 index 61bba849e..000000000 --- a/plugins/password/helpers/chpass-wrapper.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python - -import sys -import pwd -import subprocess - -BLACKLIST = ( - # add blacklisted users here - #'user1', -) - -try: - username, password = sys.stdin.readline().split(':', 1) -except ValueError, e: - sys.exit('Malformed input') - -try: - user = pwd.getpwnam(username) -except KeyError, e: - sys.exit('No such user: %s' % username) - -if user.pw_uid < 1000: - sys.exit('Changing the password for user id < 1000 is forbidden') - -if username in BLACKLIST: - sys.exit('Changing password for user %s is forbidden (user blacklisted)' % - username) - -handle = subprocess.Popen('/usr/sbin/chpasswd', stdin = subprocess.PIPE) -handle.communicate('%s:%s' % (username, password)) - -sys.exit(handle.returncode) diff --git a/plugins/password/helpers/passwd-expect b/plugins/password/helpers/passwd-expect deleted file mode 100644 index 7db21ad1f..000000000 --- a/plugins/password/helpers/passwd-expect +++ /dev/null @@ -1,267 +0,0 @@ -# -# This scripts changes a password on the local system or a remote host. -# Connections to the remote (this can also be localhost) are made by ssh, rsh, -# telnet or rlogin. - -# @author Gaudenz Steinlin - -# For sudo support alter sudoers (using visudo) so that it contains the -# following information (replace 'apache' if your webserver runs under another -# user): -# ----- -# # Needed for Horde's passwd module -# Runas_Alias REGULARUSERS = ALL, !root -# apache ALL=(REGULARUSERS) NOPASSWD:/usr/bin/passwd -# ----- - -# @stdin The username, oldpassword, newpassword (in this order) -# will be taken from stdin -# @param -prompt regexp for the shell prompt -# @param -password regexp password prompt -# @param -oldpassword regexp for the old password -# @param -newpassword regexp for the new password -# @param -verify regexp for verifying the password -# @param -success regexp for success changing the password -# @param -login regexp for the telnet prompt for the loginname -# @param -host hostname to be connected -# @param -timeout timeout for each step -# @param -log file for writing error messages -# @param -output file for loging the output -# @param -telnet use telnet -# @param -ssh use ssh (default) -# @param -rlogin use rlogin -# @param -slogin use slogin -# @param -sudo use sudo -# @param -program command for changing passwords -# -# @return 0 on success, 1 on failure -# - - -# default values -set host "localhost" -set login "ssh" -set program "passwd" -set prompt_string "(%|\\\$|>)" -set fingerprint_string "The authenticity of host.* can't be established.*\nRSA key fingerprint is.*\nAre you sure you want to continue connecting.*" -set password_string "(P|p)assword.*" -set oldpassword_string "((O|o)ld|login|\\\(current\\\) UNIX) (P|p)assword.*" -set newpassword_string "(N|n)ew.* (P|p)assword.*" -set badoldpassword_string "(Authentication token manipulation error).*" -set badpassword_string "((passwd|BAD PASSWORD).*|(passwd|Bad:).*\r)" -set verify_string "((R|r)e-*enter.*(P|p)assword|Retype new( UNIX)? password|(V|v)erification|(V|v)erify|(A|a)gain).*" -set success_string "((P|p)assword.* changed|successfully)" -set login_string "(((L|l)ogin|(U|u)sername).*)" -set timeout 20 -set log "/tmp/passwd.out" -set output false -set output_file "/tmp/passwd.log" - -# read input from stdin -fconfigure stdin -blocking 1 - -gets stdin user -gets stdin password(old) -gets stdin password(new) - -# alternative: read input from command line -#if {$argc < 3} { -# send_user "Too few arguments: Usage $argv0 username oldpass newpass" -# exit 1 -#} -#set user [lindex $argv 0] -#set password(old) [lindex $argv 1] -#set password(new) [lindex $argv 2] - -# no output to the user -log_user 0 - -# read in other options -for {set i 0} {$i<$argc} {incr i} { - set arg [lindex $argv $i] - switch -- $arg "-prompt" { - incr i - set prompt_string [lindex $argv $i] - continue - } "-password" { - incr i - set password_string [lindex $argv $i] - continue - } "-oldpassword" { - incr i - set oldpassword_string [lindex $argv $i] - continue - } "-newpassword" { - incr i - set newpassword_string [lindex $argv $i] - continue - } "-verify" { - incr i - set verify_string [lindex $argv $i] - continue - } "-success" { - incr i - set success_string [lindex $argv $i] - continue - } "-login" { - incr i - set login_string [lindex $argv $i] - continue - } "-host" { - incr i - set host [lindex $argv $i] - continue - } "-timeout" { - incr i - set timeout [lindex $argv $i] - continue - } "-log" { - incr i - set log [lindex $argv $i] - continue - } "-output" { - incr i - set output_file [lindex $argv $i] - set output true - continue - } "-telnet" { - set login "telnet" - continue - } "-ssh" { - set login "ssh" - continue - } "-ssh-exec" { - set login "ssh-exec" - continue - } "-rlogin" { - set login "rlogin" - continue - } "-slogin" { - set login "slogin" - continue - } "-sudo" { - set login "sudo" - continue - } "-program" { - incr i - set program [lindex $argv $i] - continue - } -} - -# log session -if {$output} { - log_file $output_file -} - -set err [open $log "w" "0600"] - -# start remote session -if {[string match $login "rlogin"]} { - set pid [spawn rlogin $host -l $user] -} elseif {[string match $login "slogin"]} { - set pid [spawn slogin $host -l $user] -} elseif {[string match $login "ssh"]} { - set pid [spawn ssh $host -l $user] -} elseif {[string match $login "ssh-exec"]} { - set pid [spawn ssh $host -l $user $program] -} elseif {[string match $login "sudo"]} { - set pid [spawn sudo -u $user $program] -} elseif {[string match $login "telnet"]} { - set pid [spawn telnet $host] - expect -re $login_string { - sleep .5 - send "$user\r" - } -} else { - puts $err "Invalid login mode. Valid modes: rlogin, slogin, ssh, telnet, sudo\n" - close $err - exit 1 -} - -set old_password_notentered true - -if {![string match $login "sudo"]} { - # log in - expect { - -re $fingerprint_string {sleep .5 - send yes\r - exp_continue} - -re $password_string {sleep .5 - send $password(old)\r} - timeout {puts $err "Could not login to system (no password prompt)\n" - close $err - exit 1} - } - - # start password changing program - expect { - -re $prompt_string {sleep .5 - send $program\r} - # The following is for when passwd is the login shell or ssh-exec is used - -re $oldpassword_string {sleep .5 - send $password(old)\r - set old_password_notentered false} - timeout {puts $err "Could not login to system (bad old password?)\n" - close $err - exit 1} - } -} - -# send old password -if {$old_password_notentered} { - expect { - -re $oldpassword_string {sleep .5 - send $password(old)\r} - timeout {puts $err "Could not start passwd program (no old password prompt)\n" - close $err - exit 1} - } -} - -# send new password -expect { - -re $newpassword_string {sleep .5 - send $password(new)\r} - -re $badoldpassword_string {puts $err "Old password is incorrect\n" - close $err - exit 1} - timeout {puts "Could not change password (bad old password?)\n" - close $err - exit 1} -} - -# send new password again -expect { - -re $badpassword_string {puts $err "$expect_out(0,string)" - close $err - send \003 - sleep .5 - exit 1} - -re $verify_string {sleep .5 - send $password(new)\r} - timeout {puts $err "New password not valid (too short, bad password, too similar, ...)\n" - close $err - send \003 - sleep .5 - exit 1} -} - -# check response -expect { - -re $success_string {sleep .5 - send exit\r} - -re $badpassword_string {puts $err "$expect_out(0,string)" - close $err - exit 1} - timeout {puts $err "Could not change password.\n" - close $err - exit 1} -} - -# exit succsessfully -expect { - eof {close $err - exit 0} -} -close $err diff --git a/plugins/password/localization/az_AZ.inc b/plugins/password/localization/az_AZ.inc deleted file mode 100644 index 62df01ba8..000000000 --- a/plugins/password/localization/az_AZ.inc +++ /dev/null @@ -1,24 +0,0 @@ - diff --git a/plugins/password/localization/bg_BG.inc b/plugins/password/localization/bg_BG.inc deleted file mode 100644 index b4576a0dc..000000000 --- a/plugins/password/localization/bg_BG.inc +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/plugins/password/localization/ca_ES.inc b/plugins/password/localization/ca_ES.inc deleted file mode 100644 index 18c10c80e..000000000 --- a/plugins/password/localization/ca_ES.inc +++ /dev/null @@ -1,20 +0,0 @@ - diff --git a/plugins/password/localization/cs_CZ.inc b/plugins/password/localization/cs_CZ.inc deleted file mode 100644 index b4b7b29f9..000000000 --- a/plugins/password/localization/cs_CZ.inc +++ /dev/null @@ -1,30 +0,0 @@ - - * @author Tomáš Šafařík - * - */ - -$labels = array(); -$labels['changepasswd'] = 'Změna hesla'; -$labels['curpasswd'] = 'Aktuální heslo:'; -$labels['newpasswd'] = 'Nové heslo:'; -$labels['confpasswd'] = 'Nové heslo (pro kontrolu):'; - -$messages = array(); -$messages['nopassword'] = 'Prosím zadejte nové heslo.'; -$messages['nocurpassword'] = 'Prosím zadejte aktuální heslo.'; -$messages['passwordincorrect'] = 'Zadané aktuální heslo není správné.'; -$messages['passwordinconsistency'] = 'Zadaná hesla se neshodují. Prosím zkuste to znovu.'; -$messages['crypterror'] = 'Heslo se nepodařilo uložit. Chybí šifrovací funkce.'; -$messages['connecterror'] = 'Heslo se nepodařilo uložit. Problém s připojením.'; -$messages['internalerror'] = 'Heslo se nepodařilo uložit.'; -$messages['passwordshort'] = 'Heslo musí mít alespoň $length znaků.'; -$messages['passwordweak'] = 'Heslo musí obsahovat alespoň jedno číslo a jedno interpuknční znaménko.'; -$messages['passwordforbidden'] = 'Heslo obsahuje nepovolené znaky.'; - -?> diff --git a/plugins/password/localization/da_DK.inc b/plugins/password/localization/da_DK.inc deleted file mode 100644 index 5d1d0c9cc..000000000 --- a/plugins/password/localization/da_DK.inc +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/plugins/password/localization/de_CH.inc b/plugins/password/localization/de_CH.inc deleted file mode 100644 index a28990d67..000000000 --- a/plugins/password/localization/de_CH.inc +++ /dev/null @@ -1,19 +0,0 @@ - \ No newline at end of file diff --git a/plugins/password/localization/de_DE.inc b/plugins/password/localization/de_DE.inc deleted file mode 100644 index a28990d67..000000000 --- a/plugins/password/localization/de_DE.inc +++ /dev/null @@ -1,19 +0,0 @@ - \ No newline at end of file diff --git a/plugins/password/localization/en_US.inc b/plugins/password/localization/en_US.inc deleted file mode 100644 index 1ae2158b0..000000000 --- a/plugins/password/localization/en_US.inc +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/plugins/password/localization/es_AR.inc b/plugins/password/localization/es_AR.inc deleted file mode 100644 index 40c74e673..000000000 --- a/plugins/password/localization/es_AR.inc +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/plugins/password/localization/es_ES.inc b/plugins/password/localization/es_ES.inc deleted file mode 100644 index 32879b4aa..000000000 --- a/plugins/password/localization/es_ES.inc +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/plugins/password/localization/et_EE.inc b/plugins/password/localization/et_EE.inc deleted file mode 100644 index 0f351d77b..000000000 --- a/plugins/password/localization/et_EE.inc +++ /dev/null @@ -1,17 +0,0 @@ - diff --git a/plugins/password/localization/fi_FI.inc b/plugins/password/localization/fi_FI.inc deleted file mode 100644 index a2108a524..000000000 --- a/plugins/password/localization/fi_FI.inc +++ /dev/null @@ -1,22 +0,0 @@ - - -$labels = array(); -$labels['changepasswd'] = 'Vaihda salasana'; -$labels['curpasswd'] = 'Nykyinen salasana:'; -$labels['newpasswd'] = 'Uusi salasana:'; -$labels['confpasswd'] = 'Uusi salasana uudestaan:'; - -$messages = array(); -$messages['nopassword'] = 'Syötä uusi salasana.'; -$messages['nocurpassword'] = 'Syötä nykyinen salasana.'; -$messages['passwordincorrect'] = 'Syöttämäsi nykyinen salasana on väärin.'; -$messages['passwordinconsistency'] = 'Syöttämäsi salasanat eivät täsmää, yritä uudelleen.'; -$messages['crypterror'] = 'Salasanaa ei voitu vaihtaa. Kryptausfunktio puuttuu.'; -$messages['connecterror'] = 'Salasanaa ei voitu vaihtaa. Yhteysongelma.'; -$messages['internalerror'] = 'Salasanaa ei voitu vaihtaa.'; -$messages['passwordshort'] = 'Salasanan täytyy olla vähintään $length merkkiä pitkä.'; -$messages['passwordweak'] = 'Salasanan täytyy sisältää vähintään yksi numero ja yksi välimerkki.'; - -?> diff --git a/plugins/password/localization/fr_FR.inc b/plugins/password/localization/fr_FR.inc deleted file mode 100644 index 8ba37b148..000000000 --- a/plugins/password/localization/fr_FR.inc +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/plugins/password/localization/gl_ES.inc b/plugins/password/localization/gl_ES.inc deleted file mode 100644 index b7dc7bbee..000000000 --- a/plugins/password/localization/gl_ES.inc +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/plugins/password/localization/hr_HR.inc b/plugins/password/localization/hr_HR.inc deleted file mode 100644 index 0e35129c0..000000000 --- a/plugins/password/localization/hr_HR.inc +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/plugins/password/localization/hu_HU.inc b/plugins/password/localization/hu_HU.inc deleted file mode 100644 index c8c3015a1..000000000 --- a/plugins/password/localization/hu_HU.inc +++ /dev/null @@ -1,17 +0,0 @@ - diff --git a/plugins/password/localization/it_IT.inc b/plugins/password/localization/it_IT.inc deleted file mode 100644 index 13b4885d7..000000000 --- a/plugins/password/localization/it_IT.inc +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/plugins/password/localization/ja_JP.inc b/plugins/password/localization/ja_JP.inc deleted file mode 100644 index 47cac0430..000000000 --- a/plugins/password/localization/ja_JP.inc +++ /dev/null @@ -1,23 +0,0 @@ - diff --git a/plugins/password/localization/lt_LT.inc b/plugins/password/localization/lt_LT.inc deleted file mode 100644 index b4563cc42..000000000 --- a/plugins/password/localization/lt_LT.inc +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/plugins/password/localization/lv_LV.inc b/plugins/password/localization/lv_LV.inc deleted file mode 100644 index 8f5f4c2c2..000000000 --- a/plugins/password/localization/lv_LV.inc +++ /dev/null @@ -1,20 +0,0 @@ - diff --git a/plugins/password/localization/nl_NL.inc b/plugins/password/localization/nl_NL.inc deleted file mode 100644 index 6d7c401ac..000000000 --- a/plugins/password/localization/nl_NL.inc +++ /dev/null @@ -1,17 +0,0 @@ - diff --git a/plugins/password/localization/pl_PL.inc b/plugins/password/localization/pl_PL.inc deleted file mode 100644 index 687ca9383..000000000 --- a/plugins/password/localization/pl_PL.inc +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/plugins/password/localization/pt_BR.inc b/plugins/password/localization/pt_BR.inc deleted file mode 100644 index f3626e834..000000000 --- a/plugins/password/localization/pt_BR.inc +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/plugins/password/localization/pt_PT.inc b/plugins/password/localization/pt_PT.inc deleted file mode 100644 index 5307ad69f..000000000 --- a/plugins/password/localization/pt_PT.inc +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/plugins/password/localization/ru_RU.inc b/plugins/password/localization/ru_RU.inc deleted file mode 100644 index 3776b4598..000000000 --- a/plugins/password/localization/ru_RU.inc +++ /dev/null @@ -1,35 +0,0 @@ - | -+-----------------------------------------------------------------------+ - -*/ - -$labels = array(); -$labels['changepasswd'] = 'Изменить пароль'; -$labels['curpasswd'] = 'Текущий пароль:'; -$labels['newpasswd'] = 'Новый пароль:'; -$labels['confpasswd'] = 'Подтвердите новый пароль:'; - -$messages = array(); -$messages['nopassword'] = 'Пожалуйста, введите новый пароль.'; -$messages['nocurpassword'] = 'Пожалуйста, введите текущий пароль.'; -$messages['passwordincorrect'] = 'Текущий пароль неверен.'; -$messages['passwordinconsistency'] = 'Пароли не совпадают, попробуйте, пожалуйста, ещё.'; -$messages['crypterror'] = 'Не могу сохранить новый пароль. Отсутствует криптографическая функция.'; -$messages['connecterror'] = 'Не могу сохранить новый пароль. Ошибка соединения.'; -$messages['internalerror'] = 'Не могу сохранить новый пароль.'; -$messages['passwordshort'] = 'Пароль должен быть длиной как минимум $length символов.'; -$messages['passwordweak'] = 'Пароль должен включать в себя как минимум одну цифру и один знак пунктуации.'; -$messages['passwordforbidden'] = 'Пароль содержит недопустимые символы.'; - -?> diff --git a/plugins/password/localization/sk_SK.inc b/plugins/password/localization/sk_SK.inc deleted file mode 100644 index 6def2f914..000000000 --- a/plugins/password/localization/sk_SK.inc +++ /dev/null @@ -1,29 +0,0 @@ - - * - */ - -$labels = array(); -$labels['changepasswd'] = 'Zmeniť heslo'; -$labels['curpasswd'] = 'Súčasné heslo:'; -$labels['newpasswd'] = 'Nové heslo:'; -$labels['confpasswd'] = 'Potvrď nové heslo:'; - -$messages = array(); -$messages['nopassword'] = 'Prosím zadaj nové heslo.'; -$messages['nocurpassword'] = 'Prosím zadaj súčasné heslo.'; -$messages['passwordincorrect'] = 'Súčasné heslo je nesprávne.'; -$messages['passwordinconsistency'] = 'Heslá nie sú rovnaké, skús znova.'; -$messages['crypterror'] = 'Nemôžem uložiť nové heslo. Chýba šifrovacia funkcia.'; -$messages['connecterror'] = 'Nemôžem uložiť nové heslo. Chyba spojenia.'; -$messages['internalerror'] = 'Nemôžem uložiť nové heslo.'; -$messages['passwordshort'] = 'Heslo musí mať najmenej $length znakov.'; -$messages['passwordweak'] = 'Heslo musí obsahovať aspoň jedno číslo a jedno interpunkčné znamienko.'; -$messages['passwordforbidden'] = 'Heslo obsahuje nepovolené znaky.'; - -?> diff --git a/plugins/password/localization/sl_SI.inc b/plugins/password/localization/sl_SI.inc deleted file mode 100644 index df17583be..000000000 --- a/plugins/password/localization/sl_SI.inc +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/plugins/password/localization/sv_SE.inc b/plugins/password/localization/sv_SE.inc deleted file mode 100644 index d649bbd9a..000000000 --- a/plugins/password/localization/sv_SE.inc +++ /dev/null @@ -1,21 +0,0 @@ - \ No newline at end of file diff --git a/plugins/password/localization/tr_TR.inc b/plugins/password/localization/tr_TR.inc deleted file mode 100644 index 4f2322a2e..000000000 --- a/plugins/password/localization/tr_TR.inc +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/plugins/password/localization/zh_TW.inc b/plugins/password/localization/zh_TW.inc deleted file mode 100644 index 7d162274a..000000000 --- a/plugins/password/localization/zh_TW.inc +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/plugins/password/package.xml b/plugins/password/package.xml deleted file mode 100644 index 29d222409..000000000 --- a/plugins/password/package.xml +++ /dev/null @@ -1,335 +0,0 @@ - - - password - pear.roundcube.net - Password Change for Roundcube - Plugin that adds a possibility to change user password using many - methods (drivers) via Settings/Password tab. - - - Aleksander Machniak - alec - alec@alec.pl - yes - - 2012-03-07 - - 3.1 - 2.0 - - - stable - stable - - GNU GPLv2 - -- Added pw_usermod driver (#1487826) -- Added option password_login_exceptions (#1487826) -- Added domainfactory driver (#1487882) -- Added DBMail driver (#1488281) -- Helper files moved to helpers/ directory from drivers/ -- Added Expect driver (#1488363) -- Added Samba password (#1488364) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5.2.1 - - - 1.7.0 - - - - - - - 2010-04-29 - - - 1.4 - 1.4 - - - stable - stable - - GNU GPLv2 - -- Use mail_domain value for domain variables when there is no domain in username: - sql and ldap drivers (#1486694) -- Created package.xml - - - - 2010-06-20 - - - 1.5 - 1.5 - - - stable - stable - - GNU GPLv2 - -- Removed user_login/username_local/username_domain methods, - use rcube_user::get_username instead (#1486707) - - - - 2010-08-01 - - - 1.6 - 1.5 - - - stable - stable - - GNU GPLv2 - -- Added ldap_simple driver - - - - 2010-09-10 - - - 1.7 - 1.5 - - - stable - stable - - GNU GPLv2 - -- Added XMail driver -- Improve security of chpasswd driver using popen instead of exec+echo (#1486987) -- Added chpass-wrapper.py script to improve security (#1486987) - - - - 2010-09-29 - - - 1.8 - 1.6 - - - stable - stable - - GNU GPLv2 - -- Added possibility to display extended error messages (#1486704) -- Added extended error messages in Poppassd driver (#1486704) - - - - - 1.9 - 1.6 - - - stable - stable - - GNU GPLv2 - -- Added password_ldap_lchattr option (#1486927) - - - - 2010-10-07 - - - 2.0 - 1.6 - - - stable - stable - - GNU GPLv2 - -- Fixed SQL Injection in SQL driver when using %p or %o variables in query (#1487034) - - - - 2010-11-02 - - - 2.1 - 1.6 - - - stable - stable - - GNU GPLv2 - -- hMail driver: Add possibility to connect to remote host - - - - 2011-02-15 - - - 2.2 - 1.6 - - - stable - stable - - GNU GPLv2 - -- hMail driver: add username_domain detection (#1487100) -- hMail driver: HTML tags in logged messages should be stripped off (#1487099) -- Chpasswd driver: add newline at end of input to chpasswd binary (#1487141) -- Fix usage of configured temp_dir instead of /tmp (#1487447) -- ldap_simple driver: fix parse error -- ldap/ldap_simple drivers: support %dc variable in config -- ldap/ldap_simple drivers: support Samba password change -- Fix extended error messages handling (#1487676) -- Fix double request when clicking on Password tab in Firefox -- Fix deprecated split() usage in xmail and directadmin drivers (#1487769) -- Added option (password_log) for logging password changes -- Virtualmin driver: Add option for setting username format (#1487781) - - - - 2011-10-26 - - - 2.3 - 1.6 - - - stable - stable - - GNU GPLv2 - -- When old and new passwords are the same, do nothing, return success (#1487823) -- Fixed Samba password hashing in 'ldap' driver -- Added 'password_change' hook for plugin actions after successful password change -- Fixed bug where 'doveadm pw' command was used as dovecotpw utility -- Improve generated crypt() passwords (#1488136) - - - - 2011-11-23 - - 2.4 - 1.6 - - - stable - stable - - GNU GPLv2 - -- Added option to use punycode or unicode for domain names (#1488103) -- Save Samba password hashes in capital letters (#1488197) - - - - 2011-11-23 - - 3.0 - 2.0 - - - stable - stable - - GNU GPLv2 - -- Fixed drivers namespace issues - - - - diff --git a/plugins/password/password.js b/plugins/password/password.js deleted file mode 100644 index a060fc334..000000000 --- a/plugins/password/password.js +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Password plugin script - * @version @package_version@ - */ - -if (window.rcmail) { - rcmail.addEventListener('init', function(evt) { - // - var tab = $('').attr('id', 'settingstabpluginpassword').addClass('tablink password'); - var button = $('').attr('href', rcmail.env.comm_path+'&_action=plugin.password') - .html(rcmail.gettext('password')).appendTo(tab); - - // add button and register commands - rcmail.add_element(tab, 'tabs'); - rcmail.register_command('plugin.password-save', function() { - var input_curpasswd = rcube_find_object('_curpasswd'); - var input_newpasswd = rcube_find_object('_newpasswd'); - var input_confpasswd = rcube_find_object('_confpasswd'); - - if (input_curpasswd && input_curpasswd.value=='') { - alert(rcmail.gettext('nocurpassword', 'password')); - input_curpasswd.focus(); - } else if (input_newpasswd && input_newpasswd.value=='') { - alert(rcmail.gettext('nopassword', 'password')); - input_newpasswd.focus(); - } else if (input_confpasswd && input_confpasswd.value=='') { - alert(rcmail.gettext('nopassword', 'password')); - input_confpasswd.focus(); - } else if (input_newpasswd && input_confpasswd && input_newpasswd.value != input_confpasswd.value) { - alert(rcmail.gettext('passwordinconsistency', 'password')); - input_newpasswd.focus(); - } else { - rcmail.gui_objects.passform.submit(); - } - }, true); - }) -} diff --git a/plugins/password/password.php b/plugins/password/password.php deleted file mode 100644 index 58b6f8cd9..000000000 --- a/plugins/password/password.php +++ /dev/null @@ -1,290 +0,0 @@ - | - +-------------------------------------------------------------------------+ - - $Id: index.php 2645 2009-06-15 07:01:36Z alec $ - -*/ - -define('PASSWORD_CRYPT_ERROR', 1); -define('PASSWORD_ERROR', 2); -define('PASSWORD_CONNECT_ERROR', 3); -define('PASSWORD_SUCCESS', 0); - -/** - * Change password plugin - * - * Plugin that adds functionality to change a users password. - * It provides common functionality and user interface and supports - * several backends to finally update the password. - * - * For installation and configuration instructions please read the README file. - * - * @author Aleksander Machniak - */ -class password extends rcube_plugin -{ - public $task = 'settings'; - public $noframe = true; - public $noajax = true; - - function init() - { - $rcmail = rcmail::get_instance(); - - $this->load_config(); - - // Exceptions list - if ($exceptions = $rcmail->config->get('password_login_exceptions')) { - $exceptions = array_map('trim', (array) $exceptions); - $exceptions = array_filter($exceptions); - $username = $_SESSION['username']; - - foreach ($exceptions as $ec) { - if ($username === $ec) { - return; - } - } - } - - // add Tab label - $rcmail->output->add_label('password'); - $this->register_action('plugin.password', array($this, 'password_init')); - $this->register_action('plugin.password-save', array($this, 'password_save')); - $this->include_script('password.js'); - } - - function password_init() - { - $this->add_texts('localization/'); - $this->register_handler('plugin.body', array($this, 'password_form')); - - $rcmail = rcmail::get_instance(); - $rcmail->output->set_pagetitle($this->gettext('changepasswd')); - $rcmail->output->send('plugin'); - } - - function password_save() - { - $rcmail = rcmail::get_instance(); - - $this->add_texts('localization/'); - $this->register_handler('plugin.body', array($this, 'password_form')); - $rcmail->output->set_pagetitle($this->gettext('changepasswd')); - - $confirm = $rcmail->config->get('password_confirm_current'); - $required_length = intval($rcmail->config->get('password_minimum_length')); - $check_strength = $rcmail->config->get('password_require_nonalpha'); - - if (($confirm && !isset($_POST['_curpasswd'])) || !isset($_POST['_newpasswd'])) { - $rcmail->output->command('display_message', $this->gettext('nopassword'), 'error'); - } - else { - $charset = strtoupper($rcmail->config->get('password_charset', 'ISO-8859-1')); - $rc_charset = strtoupper($rcmail->output->get_charset()); - - $sespwd = $rcmail->decrypt($_SESSION['password']); - $curpwd = $confirm ? get_input_value('_curpasswd', RCUBE_INPUT_POST, true, $charset) : $sespwd; - $newpwd = get_input_value('_newpasswd', RCUBE_INPUT_POST, true); - $conpwd = get_input_value('_confpasswd', RCUBE_INPUT_POST, true); - - // check allowed characters according to the configured 'password_charset' option - // by converting the password entered by the user to this charset and back to UTF-8 - $orig_pwd = $newpwd; - $chk_pwd = rcube_charset_convert($orig_pwd, $rc_charset, $charset); - $chk_pwd = rcube_charset_convert($chk_pwd, $charset, $rc_charset); - - // WARNING: Default password_charset is ISO-8859-1, so conversion will - // change national characters. This may disable possibility of using - // the same password in other MUA's. - // We're doing this for consistence with Roundcube core - $newpwd = rcube_charset_convert($newpwd, $rc_charset, $charset); - $conpwd = rcube_charset_convert($conpwd, $rc_charset, $charset); - - if ($chk_pwd != $orig_pwd) { - $rcmail->output->command('display_message', $this->gettext('passwordforbidden'), 'error'); - } - // other passwords validity checks - else if ($conpwd != $newpwd) { - $rcmail->output->command('display_message', $this->gettext('passwordinconsistency'), 'error'); - } - else if ($confirm && $sespwd != $curpwd) { - $rcmail->output->command('display_message', $this->gettext('passwordincorrect'), 'error'); - } - else if ($required_length && strlen($newpwd) < $required_length) { - $rcmail->output->command('display_message', $this->gettext( - array('name' => 'passwordshort', 'vars' => array('length' => $required_length))), 'error'); - } - else if ($check_strength && (!preg_match("/[0-9]/", $newpwd) || !preg_match("/[^A-Za-z0-9]/", $newpwd))) { - $rcmail->output->command('display_message', $this->gettext('passwordweak'), 'error'); - } - // password is the same as the old one, do nothing, return success - else if ($sespwd == $newpwd) { - $rcmail->output->command('display_message', $this->gettext('successfullysaved'), 'confirmation'); - } - // try to save the password - else if (!($res = $this->_save($curpwd, $newpwd))) { - $rcmail->output->command('display_message', $this->gettext('successfullysaved'), 'confirmation'); - - // allow additional actions after password change (e.g. reset some backends) - $plugin = $rcmail->plugins->exec_hook('password_change', array( - 'old_pass' => $curpwd, 'new_pass' => $newpwd)); - - // Reset session password - $_SESSION['password'] = $rcmail->encrypt($plugin['new_pass']); - - // Log password change - if ($rcmail->config->get('password_log')) { - write_log('password', sprintf('Password changed for user %s (ID: %d) from %s', - $rcmail->user->get_username(), $rcmail->user->ID, rcmail_remote_ip())); - } - } - else { - $rcmail->output->command('display_message', $res, 'error'); - } - } - - rcmail_overwrite_action('plugin.password'); - $rcmail->output->send('plugin'); - } - - function password_form() - { - $rcmail = rcmail::get_instance(); - - // add some labels to client - $rcmail->output->add_label( - 'password.nopassword', - 'password.nocurpassword', - 'password.passwordinconsistency' - ); - - $rcmail->output->set_env('product_name', $rcmail->config->get('product_name')); - - $table = new html_table(array('cols' => 2)); - - if ($rcmail->config->get('password_confirm_current')) { - // show current password selection - $field_id = 'curpasswd'; - $input_curpasswd = new html_passwordfield(array('name' => '_curpasswd', 'id' => $field_id, - 'size' => 20, 'autocomplete' => 'off')); - - $table->add('title', html::label($field_id, Q($this->gettext('curpasswd')))); - $table->add(null, $input_curpasswd->show()); - } - - // show new password selection - $field_id = 'newpasswd'; - $input_newpasswd = new html_passwordfield(array('name' => '_newpasswd', 'id' => $field_id, - 'size' => 20, 'autocomplete' => 'off')); - - $table->add('title', html::label($field_id, Q($this->gettext('newpasswd')))); - $table->add(null, $input_newpasswd->show()); - - // show confirm password selection - $field_id = 'confpasswd'; - $input_confpasswd = new html_passwordfield(array('name' => '_confpasswd', 'id' => $field_id, - 'size' => 20, 'autocomplete' => 'off')); - - $table->add('title', html::label($field_id, Q($this->gettext('confpasswd')))); - $table->add(null, $input_confpasswd->show()); - - $out = html::div(array('class' => 'box'), - html::div(array('id' => 'prefs-title', 'class' => 'boxtitle'), $this->gettext('changepasswd')) . - html::div(array('class' => 'boxcontent'), $table->show() . - html::p(null, - $rcmail->output->button(array( - 'command' => 'plugin.password-save', - 'type' => 'input', - 'class' => 'button mainaction', - 'label' => 'save' - ))))); - - $rcmail->output->add_gui_object('passform', 'password-form'); - - return $rcmail->output->form_tag(array( - 'id' => 'password-form', - 'name' => 'password-form', - 'method' => 'post', - 'action' => './?_task=settings&_action=plugin.password-save', - ), $out); - } - - private function _save($curpass, $passwd) - { - $config = rcmail::get_instance()->config; - $driver = $config->get('password_driver', 'sql'); - $class = "rcube_{$driver}_password"; - $file = $this->home . "/drivers/$driver.php"; - - if (!file_exists($file)) { - raise_error(array( - 'code' => 600, - 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Password plugin: Unable to open driver file ($file)" - ), true, false); - return $this->gettext('internalerror'); - } - - include_once $file; - - if (!class_exists($class, false) || !method_exists($class, 'save')) { - raise_error(array( - 'code' => 600, - 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Password plugin: Broken driver $driver" - ), true, false); - return $this->gettext('internalerror'); - } - - $object = new $class; - $result = $object->save($curpass, $passwd); - - if (is_array($result)) { - $message = $result['message']; - $result = $result['code']; - } - - switch ($result) { - case PASSWORD_SUCCESS: - return; - case PASSWORD_CRYPT_ERROR; - $reason = $this->gettext('crypterror'); - case PASSWORD_CONNECT_ERROR; - $reason = $this->gettext('connecterror'); - case PASSWORD_ERROR: - default: - $reason = $this->gettext('internalerror'); - } - - if ($message) { - $reason .= ' ' . $message; - } - - return $reason; - } -} -- cgit v1.2.3