Import Ruty

This commit is contained in:
2024-03-11 00:59:10 +01:00
parent 985f1ab418
commit f49a790b88
877 changed files with 67878 additions and 0 deletions
+499
View File
@@ -0,0 +1,499 @@
-----------------------------------------------------------------------
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 as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
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, see http://www.gnu.org/licenses/.
@author Aleksander Machniak <alec@alec.pl>
@author <see driver files for driver authors>
-----------------------------------------------------------------------
1. Configuration
2. Drivers
2.1. Password Change Drivers
2.1.1. Database (sql)
2.1.2. Cyrus/SASL (sasl)
2.1.3. Poppassd/Courierpassd (poppassd)
2.1.4. LDAP (ldap)
2.1.5. DirectAdmin Control Panel (directadmin)
2.1.6. cPanel
2.1.7. XIMSS/Communigate (ximms)
2.1.8. Virtualmin (virtualmin)
2.1.9. hMailServer (hmail)
2.1.10. PAM (pam)
2.1.11. Chpasswd (chpasswd)
2.1.12. LDAP - no PEAR (ldap_simple)
2.1.13. XMail (xmail)
2.1.14. Pw (pw_usermod)
2.1.15. domainFACTORY (domainfactory)
2.1.16. DBMail (dbmail)
2.1.17. Expect (expect)
2.1.18. Samba (smb)
2.1.19. Vpopmail daemon (vpopmaild)
2.1.20. Plesk (Plesk RPC-API)
2.1.21. Kpasswd
2.1.22. Modoboa
2.1.23. LDAP - Password Modify Extended Operation (ldap_exop)
2.1.24. TinyCP
2.1.25. Mail-in-a-Box (miab)
2.1.26. HTTP-API (httpapi)
2.1.27. dovecot_passwdfile
2.1.28. Mailcow
2.2. Password Strength Drivers
2.2.1. Zxcvbn
2.2.2. Have I been pwned? (pwned)
3. Driver API
4. Sudo setup
1. Configuration
----------------
Copy config.inc.php.dist to config.inc.php and set the options as described
within the file.
2. Drivers
----------
2.1. Password Change Drivers
----------------------------
Password plugin supports many password change mechanisms which are
handled by included drivers. Just pass driver name in 'password_driver' option.
2.1.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 config.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,%P,%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=%P 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.1.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 Red Hat 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.1.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.1.4. LDAP (ldap)
------------------
See config.inc.php.dist file. Requires PEAR::Net_LDAP2 package.
2.1.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_directadmin_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.1.6. cPanel
-------------
Specify the host to connect to via 'password_cpanel_host'. This driver
comes with a minimal UAPI implementation and does not use the external xmlapi
class. It requires php-curl extension.
See config.inc.php.dist file for more info.
2.1.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.1.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. Requires virtualmin >= 4.09.
2.1.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.1.10. PAM (pam)
-----------------
This driver is for changing passwords of shell users authenticated with PAM.
Requires PECL's PAM extension to be installed (http://pecl.php.net/package/PAM).
2.1.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.1.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
$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.1.13. XMail (xmail)
----------------------
Driver for XMail (www.xmailserver.org). See config.inc.php.dist file
for configuration description.
2.1.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.1.15. domainFACTORY (domainfactory)
-------------------------------------
Driver for the hosting provider domainFACTORY (www.df.eu).
No configuration options.
2.1.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.1.17. Expect (expect)
------------------------
Driver to change user password via the 'expect' command.
See config.inc.php.dist file for configuration description.
2.1.18. Samba (smb)
--------------------
Driver to change Samba user password via the 'smbpasswd' command.
See config.inc.php.dist file for configuration description.
2.1.19. Vpopmail daemon (vpopmaild)
-------------------------------------
Driver for the daemon of vpopmail. Vpopmail is used with qmail to
enable virtual users that are saved in a database and not in /etc/passwd.
Set $config['password_vpopmaild_host'] to the host where vpopmaild runs.
Set $config['password_vpopmaild_port'] to the port of vpopmaild.
Set $config['password_vpopmaild_timeout'] to the timeout used for the TCP
connection to vpopmaild (You may want to set it higher on busy servers).
2.1.20. Plesk (Plesk RPC-API)
-----------------------------
Driver for changing Passwords via Plesk RPC-API. This Driver also works with
Parallels Plesk Automation (PPA).
You need to allow the IP of the Roundcube-Server for RPC-Calls in the Panel.
Set $config['password_plesk_host'] to the Hostname / IP where Plesk runs
Set your Admin or RPC User: $config['password_plesk_user']
Set the Password of the User: $config['password_plesk_pass']
Set $config['password_plesk_rpc_port'] for the RPC-Port. Usually its 8443
Set the RPC-Path in $config['password_plesk_rpc_path']. Normally this is: enterprise/control/agent.php.
2.1.21. Kpasswd
---------------
Driver to change the password in Kerberos environments via the 'kpasswd' command.
See config.inc.php.dist file for configuration description.
2.1.22. Modoboa
---------------
Driver to change the password in Modoboa servers.
See config.inc.php.dist file for configuration description.
2.1.23. LDAP - Password Modify Extended Operation (ldap_exop)
-------------------------------------------------------------
Modified version of ldap_simple.
Password is changed using ldap_exop_passwd operation.
PHP >= 7.2 required.
2.1.24 TinyCP
-------------
Download the TinyCPConnector.php file from your TinyCP Settings page and
save it into the password/drivers folder. Update/resolve file permissions for
www-data/apache.
Set the password_tinycp_host, password_tinycp_port, password_tinycp_user, and
password_tinycp_pass in plugin's config.inc.php file.
2.1.25 Mail-in-a-Box (miab)
---------------------------
Driver to change the password on Mail-in-a-Box servers.
See config.inc.php.dist file for configuration description.
2.1.26. HTTP-API (httpapi)
--------------------------
Driver to change the user's password via any HTTP/HTTPS POST/GET API in a
generic manner. It passes any of the username, curpass and newpass variables
to the configured POST or GET parameters at the configured URL.
Any 4xx error code (except 404) is assumed to mean the password change failed.
404 or any other non-2xx error code, or failure to connect, is assumed to be a
connection error and is reported as such.
A 2xx response is generally assumed to mean the password changed succeeded.
Optionally, you can configure a regular expression to check the response as
well to verify this.
2.1.27. dovecot_passwdfile
--------------------------
Driver that adds functionality to change the passwords in dovecot 2 passwd-file files
regarding https://doc.dovecot.org/configuration_manual/authentication/passwd_file.
Set 'password_dovecot_passwdfile_path' to your dovecot passwd-file location and
'password_algorithm' (and related options) to the algorithm you want the passwords
stored in the file to be using.
2.1.28 Mailcow
---------------------------
Driver to change the password on Mailcow servers.
See config.inc.php.dist file for configuration description.
2.2. Password Strength Drivers
------------------------------
Password plugin supports many password strength checking mechanisms which are
handled by included drivers. Just pass driver name in 'password_strength_driver' option.
2.2.1. Zxcvbn
-------------
Driver to use the Zxcvbn library to check password strength. Requires zxcvbn-php library.
The library is not distributed with Roundcube (see composer.json-dist).
Note: Required PHP's memory_limit >= 24M.
Set $config['password_zxcvbn_min_score'] to define minimum acceptable password strength score.
2.2.2. Have I been pwned? (pwned)
---------------------------------
Driver using "Have I been pwned?" (https://haveibeenpwned.com/Passwords) API to
check that entered passwords aren't already compromised (i.e., commonly known).
The check is performed locally, the actual password is *not* transmitted anywhere else.
Requires curl (preferred) or allow_url_fopen to work.
Example configuration:
$config['password_strength_driver'] = 'pwned';
$config['password_minimum_score'] = 3;
See the driver implementation file for more documentation.
3. Driver API
-------------
Driver file (<driver_name>.php) must define rcube_<driver_name>_password class. Drivers should
provide one or both of a public save() or check_strength() method.
All password changing drivers (used in config `password_driver` - the password driver) must have
a save() method. The same driver can also contain a check_strength() method or a separate driver
containing this method can be used in `password_strength_driver` (the strength driver). To enable
strength checks ensure `password_check_strength` is set to true.
The save() method, used for changing the password has three arguments:
First - current password, second - new password, third - current username.
This method 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.
Optionally a password driver can contain a compare() method which has three arguments:
First - current password, second - test password, third - compare type.
Compare type: PASSWORD_COMPARE_CURRENT - when comparing the test password with current password.
PASSWORD_COMPARE_NEW - when comparing the current password with the test password.
For PASSWORD_COMPARE_CURRENT it should return error text if user entered and real current password
DO NOT MATCH. For PASSWORD_COMPARE_NEW it should return error text if user entered and real current
password DO MATCH. Else it should return null (no error).
The check_strength() method, used for checking password strength has one argument: new password.
This method should return an array with tho elements:
- Score: integer from 1 (week) to 5 (strong)
- Reason for the score (optional)
Optionally a strength driver can contain a strength_rules() method. This has no arguments
and returns a string, or array of strings explaining the password strength rules.
4. Sudo setup
-------------
Some drivers that execute system commands (like chpasswd) require use of sudo command.
Here's a sample for CentOS 7:
# cat <<END >/etc/sudoers.d/99-roundcubemail
apache ALL=NOPASSWD:/usr/sbin/chpasswd
Defaults:apache !requiretty
<<END
Note: on different systems the username (here 'apache') may be different, e.g. www.
Note: on some systems the disabling tty line may not be needed.
+24
View File
@@ -0,0 +1,24 @@
{
"name": "roundcube/password",
"type": "roundcube-plugin",
"description": "Password Change for Roundcube. Plugin adds a possibility to change user password using many methods (drivers) via Settings/Password tab.",
"license": "GPL-3.0-or-later",
"version": "5.3",
"authors": [
{
"name": "Aleksander Machniak",
"email": "alec@alec.pl",
"role": "Lead"
}
],
"repositories": [
{
"type": "composer",
"url": "https://plugins.roundcube.net"
}
],
"require": {
"php": ">=7.3.0",
"roundcube/plugin-installer": ">=0.1.3"
}
}
@@ -0,0 +1,515 @@
<?php
// Password Plugin options
// -----------------------
// A driver to use for password change. Default: "sql".
// See README file for list of supported driver names.
$config['password_driver'] = 'sql';
// A driver to use for checking password strength. Default: null (disabled).
// See README file for list of supported driver names.
$config['password_strength_driver'] = null;
// Determine whether current password is required to change password.
// Default: false.
$config['password_confirm_current'] = true;
// Require the new password to be a certain length.
// set to blank to allow passwords of any length
$config['password_minimum_length'] = 8;
// Require the new password to have at least the specified strength score.
// Note: Password strength is scored from 1 (week) to 5 (strong).
$config['password_minimum_score'] = 0;
// Enables logging of password changes into logs/password
$config['password_log'] = false;
// Array of login exceptions for which password change
// will be not available (no Password tab in Settings)
$config['password_login_exceptions'] = null;
// Array of hosts that support password changing.
// Listed hosts will feature a Password option in Settings; others will not.
// Example: ['mail.example.com', 'mail2.example.org'];
// Default is NULL (all hosts supported).
$config['password_hosts'] = null;
// Enables saving the new password even if it matches the old password. Useful
// for upgrading the stored passwords after the encryption scheme has changed.
$config['password_force_save'] = false;
// Enables forcing new users to change their password at their first login.
$config['password_force_new_user'] = false;
// Password hashing/crypting algorithm.
// Possible options: des-crypt, ext-des-crypt, md5-crypt, blowfish-crypt,
// sha256-crypt, sha512-crypt, md5, sha, smd5, ssha, ssha256, ssha512, samba, ad, dovecot, clear.
// Also supported are password_hash() algoriths: hash-bcrypt, hash-argon2i, hash-argon2id.
// Default: 'clear' (no hashing)
// For details see password::hash_password() method.
$config['password_algorithm'] = 'clear';
// Additional options for password hashing function(s).
// For password_hash()-based passwords see https://www.php.net/manual/en/function.password-hash.php
// It can be used to set the Blowfish algorithm cost, e.g. ['cost' => 12]
$config['password_algorithm_options'] = [];
// Password prefix (e.g. {CRYPT}, {SHA}) for passwords generated
// using password_algorithm above. Default: empty.
$config['password_algorithm_prefix'] = '';
// Path for dovecotpw/doveadm-pw (if not in the $PATH).
// Used for password_algorithm = 'dovecot'.
// $config['password_dovecotpw'] = '/usr/local/sbin/doveadm pw'; // for dovecot-2.x
$config['password_dovecotpw'] = '/usr/local/sbin/dovecotpw'; // for dovecot-1.x
// Dovecot password scheme.
// Used for password_algorithm = 'dovecot'.
$config['password_dovecotpw_method'] = 'CRAM-MD5';
// Enables use of password with method prefix, e.g. {MD5}$1$LUiMYWqx$fEkg/ggr/L6Mb2X7be4i1/
// when using password_algorithm=dovecot
$config['password_dovecotpw_with_method'] = false;
// Number of rounds for the sha256 and sha512 crypt hashing algorithms.
// Must be at least 1000. If not set, then the number of rounds is left up
// to the crypt() implementation. On glibc this defaults to 5000.
// Be aware, the higher the value, the longer it takes to generate the password hashes.
//$config['password_crypt_rounds'] = 50000;
// This option temporarily disables the password change functionality.
// Use it when the users database server is in maintenance mode or something like that.
// You can set it to TRUE/FALSE or a text describing the reason
// which will replace the default.
$config['password_disabled'] = false;
// Various drivers/setups use different format of the username.
// This option allows you to force specified format use. Default: '%u'.
// Supported variables:
// %u - full username,
// %l - the local part of the username (in case the username is an email address)
// %d - the domain part of the username (in case the username is an email address)
// Note: This may no apply to some drivers implementing their own rules, e.g. sql.
$config['password_username_format'] = '%u';
// Options passed when creating Guzzle HTTP client, used to access various external APIs.
// This will overwrite global http_client settings. For example:
// [
// 'timeout' => 10,
// 'proxy' => 'tcp://localhost:8125',
// ]
$config['password_http_client'] = [];
// SQL Driver options
// ------------------
// PEAR database DSN for performing the query. By default
// Roundcube DB settings are used.
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
$config['password_db_dsn'] = '';
// The SQL query used to change the password.
// The query can contain the following macros that will be expanded as follows:
// %p is replaced with the plaintext new password
// %P is replaced with the crypted/hashed new password
// according to configured password_algorithm
// %o is replaced with the old (current) password
// %O is replaced with the crypted/hashed old (current) password
// according to configured password_algorithm
// %h is replaced with the imap host (from the session info)
// %u is replaced with the username (from the session info)
// %l is replaced with the local part of the username
// (in case the username is an email address)
// %d is replaced with the domain part of the username
// (in case the username is an email address)
// Escaping of macros is handled by this module.
// Default: "SELECT update_passwd(%P, %u)"
$config['password_query'] = 'SELECT update_passwd(%P, %u)';
// By default domains in variables are using unicode.
// Enable this option to use punycoded names
$config['password_idn_ascii'] = false;
// Poppassd Driver options
// -----------------------
// The host which changes the password (default: localhost)
// Supported replacement variables:
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %h - IMAP host
// %z - IMAP domain without first part
// %s - domain name after the '@' from e-mail address provided at login screen
$config['password_pop_host'] = 'localhost';
// TCP port used for poppassd connections (default: 106)
$config['password_pop_port'] = 106;
// SASL Driver options
// -------------------
// Additional arguments for the saslpasswd2 call
$config['password_saslpasswd_args'] = '';
// LDAP, LDAP_SIMPLE and LDAP_EXOP Driver options
// -----------------------------------
// LDAP server name to connect to.
// You can provide one or several hosts in an array in which case the hosts are tried from left to right.
// Example: ['ldap1.example.com', 'ldap2.example.com'];
// Default: 'localhost'
$config['password_ldap_host'] = 'localhost';
// LDAP server port to connect to
// Default: '389'
$config['password_ldap_port'] = '389';
// TLS is started after connecting
// Using TLS for password modification is recommended.
// Default: false
$config['password_ldap_starttls'] = false;
// LDAP version
// Default: '3'
$config['password_ldap_version'] = '3';
// LDAP base name (root directory)
// Example: 'dc=example,dc=com'
$config['password_ldap_basedn'] = 'dc=example,dc=com';
// LDAP connection method
// There are two connection methods for changing a user's LDAP password.
// 'user': use user credential (recommended, require password_confirm_current=true)
// 'admin': use admin credential (this mode require password_ldap_adminDN and password_ldap_adminPW)
// Default: 'user'
$config['password_ldap_method'] = 'user';
// LDAP Admin DN
// Used only in admin connection mode
// Default: null
$config['password_ldap_adminDN'] = null;
// LDAP Admin Password
// Used only in admin connection mode
// Default: null
$config['password_ldap_adminPW'] = null;
// LDAP user DN mask
// The user's DN is mandatory and as we only have his login,
// we need to re-create his DN using a mask
// '%login' will be replaced by the current roundcube user's login
// '%name' will be replaced by the current roundcube user's name part
// '%domain' will be replaced by the current roundcube user's domain part
// '%dc' will be replaced by domain name hierarchal string e.g. "dc=test,dc=domain,dc=com"
// Example: 'uid=%login,ou=people,dc=example,dc=com'
$config['password_ldap_userDN_mask'] = 'uid=%login,ou=people,dc=example,dc=com';
// LDAP search DN
// The DN roundcube should bind with to find out user's DN
// based on his login. Note that you should comment out the default
// password_ldap_userDN_mask setting for this to take effect.
// Use this if you cannot specify a general template for user DN with
// password_ldap_userDN_mask. You need to perform a search based on
// users login to find his DN instead. A common reason might be that
// your users are placed under different ou's like engineering or
// sales which cannot be derived from their login only.
$config['password_ldap_searchDN'] = 'cn=roundcube,ou=services,dc=example,dc=com';
// LDAP search password
// If password_ldap_searchDN is set, the password to use for
// binding to search for user's DN. Note that you should comment out the default
// password_ldap_userDN_mask setting for this to take effect.
// Warning: Be sure to set appropriate permissions on this file so this password
// is only accessible to roundcube and don't forget to restrict roundcube's access to
// your directory as much as possible using ACLs. Should this password be compromised
// you want to minimize the damage.
$config['password_ldap_searchPW'] = 'secret';
// LDAP search base
// If password_ldap_searchDN is set, the base to search in using the filter below.
// Note that you should comment out the default password_ldap_userDN_mask setting
// for this to take effect.
$config['password_ldap_search_base'] = 'ou=people,dc=example,dc=com';
// LDAP search filter
// If password_ldap_searchDN is set, the filter to use when
// searching for user's DN. Note that you should comment out the default
// password_ldap_userDN_mask setting for this to take effect.
// '%login' will be replaced by the current roundcube user's login
// '%name' will be replaced by the current roundcube user's name part
// '%domain' will be replaced by the current roundcube user's domain part
// '%dc' will be replaced by domain name hierarchal string e.g. "dc=test,dc=domain,dc=com"
// Example: '(uid=%login)'
// Example: '(&(objectClass=posixAccount)(uid=%login))'
$config['password_ldap_search_filter'] = '(uid=%login)';
// LDAP password hash type
// Standard LDAP encryption type which must be one of: crypt,
// ext_des, md5crypt, blowfish, md5, sha, smd5, ssha, ad, cram-md5 (dovecot style) or clear.
// Set to 'default' if you want to use method specified in password_algorithm option above.
// Multiple password Values can be generated by concatenating encodings with a +. E.g. 'cram-md5+crypt'
// Default: 'crypt'.
$config['password_ldap_encodage'] = 'crypt';
// LDAP password attribute
// Name of the ldap's attribute used for storing user password
// Default: 'userPassword'
$config['password_ldap_pwattr'] = 'userPassword';
// LDAP password force replace
// Force LDAP replace in cases where ACL allows only replace not read
// See http://pear.php.net/package/Net_LDAP2/docs/latest/Net_LDAP2/Net_LDAP2_Entry.html#methodreplace
// Default: true
$config['password_ldap_force_replace'] = true;
// LDAP Password Last Change Date
// Some places use an attribute to store the date of the last password change
// The date is measured in "days since epoch" (an integer value)
// Whenever the password is changed, the attribute will be updated if set (e.g. shadowLastChange)
$config['password_ldap_lchattr'] = '';
// LDAP Samba password attribute, e.g. sambaNTPassword
// Name of the LDAP's Samba attribute used for storing user password
$config['password_ldap_samba_pwattr'] = '';
// LDAP Samba Password Last Change Date attribute, e.g. sambaPwdLastSet
// Some places use an attribute to store the date of the last password change
// The date is measured in "seconds since epoch" (an integer value)
// Whenever the password is changed, the attribute will be updated if set
$config['password_ldap_samba_lchattr'] = '';
// LDAP PPolicy Driver options
// -----------------------------------
// LDAP Change password command - filename of the perl script
// Example: 'change_ldap_pass.pl'
$config['password_ldap_ppolicy_cmd'] = 'change_ldap_pass.pl';
// LDAP URI
// Example: 'ldap://ldap.example.com/ ldaps://ldap2.example.com:636/'
$config['password_ldap_ppolicy_uri'] = 'ldap://localhost/';
// LDAP base name (root directory)
// Example: 'dc=example,dc=com'
$config['password_ldap_ppolicy_basedn'] = 'dc=example,dc=com';
$config['password_ldap_ppolicy_searchDN'] = 'cn=someuser,dc=example,dc=com';
$config['password_ldap_ppolicy_searchPW'] = 'secret';
// LDAP search filter
// Example: '(uid=%login)'
// Example: '(&(objectClass=posixAccount)(uid=%login))'
$config['password_ldap_ppolicy_search_filter'] = '(uid=%login)';
// CA Certificate file if in URI is LDAPS connection
$config['password_ldap_ppolicy_cafile'] = '/etc/ssl/cacert.crt';
// DirectAdmin Driver options
// --------------------------
// The host which changes the password
// Use 'ssl://host' instead of 'tcp://host' when running DirectAdmin over SSL.
// The host can contain the following macros that will be expanded as follows:
// %h is replaced with the imap host (from the session info)
// %d is replaced with the domain part of the username (if the username is an email)
$config['password_directadmin_host'] = 'tcp://localhost';
// TCP port used for DirectAdmin connections
$config['password_directadmin_port'] = 2222;
// vpopmaild Driver options
// -----------------------
// The host which changes the password
$config['password_vpopmaild_host'] = 'localhost';
// TCP port used for vpopmaild connections
$config['password_vpopmaild_port'] = 89;
// Timeout used for the connection to vpopmaild (in seconds)
$config['password_vpopmaild_timeout'] = 10;
// cPanel Driver options
// ---------------------
// The cPanel Host name
$config['password_cpanel_host'] = 'host.domain.com';
// The cPanel port to use
$config['password_cpanel_port'] = 2096;
// XIMSS (Communigate server) Driver options
// -----------------------------------------
// Host name of the Communigate server
$config['password_ximss_host'] = 'mail.example.com';
// XIMSS port on Communigate server
$config['password_ximss_port'] = 11024;
// chpasswd Driver options
// ---------------------
// Command to use (see "Sudo setup" in README)
$config['password_chpasswd_cmd'] = 'sudo /usr/sbin/chpasswd 2> /dev/null';
// XMail Driver options
// ---------------------
$config['xmail_host'] = 'localhost';
$config['xmail_user'] = 'YourXmailControlUser';
$config['xmail_pass'] = 'YourXmailControlPass';
$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
$config['hmailserver_remote_dcom'] = false;
// Windows credentials
$config['hmailserver_server'] = [
'Server' => 'localhost', // hostname or ip address
'Username' => 'administrator', // windows username
'Password' => 'password' // windows user password
];
// pw_usermod Driver options
// --------------------------
// Use comma delimited exlist to disable password change for users.
// See "Sudo setup" in README file.
$config['password_pw_usermod_cmd'] = 'sudo /usr/sbin/pw usermod -h 0 -n';
// DBMail Driver options
// -------------------
// Additional arguments for the dbmail-users call
$config['password_dbmail_args'] = '-p sha512';
// Expect Driver options
// ---------------------
// Location of expect binary
$config['password_expect_bin'] = '/usr/bin/expect';
// Location of expect script (see helpers/passwd-expect)
$config['password_expect_script'] = '';
// Arguments for the expect script. See the helpers/passwd-expect file for details.
// This is probably a good starting default:
// -telnet -host localhost -output /tmp/passwd.log -log /tmp/passwd.log
$config['password_expect_params'] = '';
// smb Driver options
// ---------------------
// Samba host (default: localhost)
// Supported replacement variables:
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
$config['password_smb_host'] = 'localhost';
// Location of smbpasswd binary (default: /usr/bin/smbpasswd)
$config['password_smb_cmd'] = '/usr/bin/smbpasswd';
// gearman driver options
// ---------------------
// Gearman host (default: localhost)
$config['password_gearman_host'] = 'localhost';
// Plesk/PPA Driver options
// --------------------
// You need to allow RCP for IP of roundcube-server in Plesk/PPA Panel
// Plesk RCP Host
$config['password_plesk_host'] = '10.0.0.5';
// Plesk RPC Username
$config['password_plesk_user'] = 'admin';
// Plesk RPC Password
$config['password_plesk_pass'] = 'password';
// Plesk RPC Port
$config['password_plesk_rpc_port'] = '8443';
// Plesk RPC Path
$config['password_plesk_rpc_path'] = 'enterprise/control/agent.php';
// kpasswd Driver options
// ---------------------
// Command to use
$config['password_kpasswd_cmd'] = '/usr/bin/kpasswd';
// Modoboa Driver options
// ---------------------
// put token number from Modoboa server
$config['password_modoboa_api_token'] = '';
// Mail-in-a-Box Driver options
// ----------------------------
// the url to the control panel of Mail-in-a-Box, e.g. https://box.example.com/admin/
$config['password_miab_url'] = '';
// name (email) of the admin user used to access api
$config['password_miab_user'] = '';
// password of the admin user used to access api
$config['password_miab_pass'] = '';
// TinyCP
// --------------
// TinyCP host, port, user and pass.
$config['password_tinycp_host'] = '';
$config['password_tinycp_port'] = '';
$config['password_tinycp_user'] = '';
$config['password_tinycp_pass'] = '';
// HTTP-API Driver options
// ---------------------
// Base URL of password change API. HTTPS recommended.
$config['password_httpapi_url'] = 'https://passwordserver.example.org';
// Method (also affects how vars are sent). Default: POST.
// GET is not recommended as passwords will appears in the remote webserver's access log
$config['password_httpapi_method'] = 'POST';
// GET or POST variable in which to put the username
$config['password_httpapi_var_user'] = 'user';
// GET or POST variable in which to put the current password
$config['password_httpapi_var_curpass'] = 'curpass';
// GET or POST variable in which to put the new password
$config['password_httpapi_var_newpass'] = 'newpass';
// HTTP codes other than 2xx are assumed to mean the password changed failed.
// Optionally, if set, this variable additionally checks the body of the 2xx response to
// confirm the change. It's a preg_match regular expression.
$config['password_httpapi_expect'] = '/^ok$/i';
// dovecot_passwdfile
// ------------------
$config['password_dovecot_passwdfile_path'] = '/etc/mail/imap.passwd';
// Mailcow driver options
// ----------------------
$config['password_mailcow_api_host'] = 'localhost';
$config['password_mailcow_api_token'] = '';
@@ -0,0 +1,53 @@
<?php
/**
* chpasswd driver
*
* Driver that adds functionality to change the systems user password via
* the 'chpasswd' command.
*
* For installation instructions please read the README file.
*
* @version 2.0
* @author Alex Cartwright <acartwright@mutinydesign.co.uk>
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_chpasswd_password
{
public function save($currpass, $newpass, $username)
{
$cmd = rcmail::get_instance()->config->get('password_chpasswd_cmd');
$handle = popen($cmd, "w");
fwrite($handle, "$username:$newpass\n");
if (pclose($handle) == 0) {
return PASSWORD_SUCCESS;
}
rcube::raise_error([
'code' => 600,
'file' => __FILE__,
'line' => __LINE__,
'message' => "Password plugin: Unable to execute $cmd"
], true, false
);
return PASSWORD_ERROR;
}
}
@@ -0,0 +1,146 @@
<?php
/**
* cPanel Password Driver
*
* It uses Cpanel's Webmail UAPI to change the users password.
*
* This driver has been tested successfully with Digital Pacific hosting.
*
* @author Maikel Linke <maikel@email.org.au>
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_cpanel_password
{
/**
* Changes the user's password. It is called by password.php.
* See "Driver API" README and password.php for the interface details.
*
* @param string $curpas Current (old) password
* @param string $newpass New password
*
* @return int|array Error code or assoc array with 'code' and 'message', see
* "Driver API" README and password.php
*/
public function save($curpas, $newpass)
{
$url = self::url();
$user = password::username();
$userpwd = "$user:$curpas";
$data = [
'email' => password::username('%l'),
'password' => $newpass
];
$response = $this->curl_auth_post($userpwd, $url, $data);
return self::decode_response($response);
}
/**
* Provides the UAPI URL of the Email::passwd_pop function.
*
* @return string HTTPS URL
*/
public static function url()
{
$config = rcmail::get_instance()->config;
$storage_host = $_SESSION['storage_host'];
$host = $config->get('password_cpanel_host', $storage_host);
$port = $config->get('password_cpanel_port', 2096);
return "https://$host:$port/execute/Email/passwd_pop";
}
/**
* Converts a UAPI response to a password driver response.
*
* @param string $response JSON response by the Cpanel UAPI
*
* @return mixed Response code or array, see <code>save</code>
*/
public static function decode_response($response)
{
if (!$response) {
return PASSWORD_CONNECT_ERROR;
}
// $result should be `null` or `stdClass` object
$result = json_decode($response);
// The UAPI may return HTML instead of JSON on missing authentication
if ($result && isset($result->status) && $result->status === 1) {
return PASSWORD_SUCCESS;
}
if ($result && !empty($result->errors) && is_array($result->errors)) {
return [
'code' => PASSWORD_ERROR,
'message' => $result->errors[0],
];
}
return PASSWORD_ERROR;
}
/**
* Post data to the given URL using basic authentication.
*
* Example:
*
* <code>
* curl_auth_post('john:Secr3t', 'https://example.org', [
* 'param' => 'value',
* 'param' => 'value'
* ]);
* </code>
*
* @param string $userpwd User name and password separated by a colon
* <code>:</code>
* @param string $url The URL to post data to
* @param array $postdata The data to post
*
* @return string|false The body of the reply, False on error
*/
private function curl_auth_post($userpwd, $url, $postdata)
{
$ch = curl_init();
$postfields = http_build_query($postdata, '', '&');
// see http://php.net/manual/en/function.curl-setopt.php
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 131072);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($ch, CURLOPT_USERPWD, $userpwd);
$result = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if ($result === false) {
rcube::raise_error("curl error: $error", true, false);
}
return $result;
}
}
@@ -0,0 +1,59 @@
<?php
/**
* DBMail Password Driver
*
* Driver that adds functionality to change the users DBMail password.
* The code is derived from the Squirrelmail "Change SASL Password" Plugin
* by Galen Johnson.
*
* 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.
*
* For installation instructions please read the README file.
*
* @version 1.0
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_dbmail_password
{
function save($currpass, $newpass, $username)
{
$curdir = RCUBE_PLUGINS_DIR . 'password/helpers';
$username = escapeshellarg($username);
$password = escapeshellarg($newpass);
$args = rcmail::get_instance()->config->get('password_dbmail_args', '');
$command = "$curdir/chgdbmailusers -c $username -w $password $args";
exec($command, $output, $return_value);
if ($return_value == 0) {
return PASSWORD_SUCCESS;
}
rcube::raise_error([
'code' => 600,
'file' => __FILE__,
'line' => __LINE__,
'message' => "Password plugin: Unable to execute $curdir/chgdbmailusers"
], true, false
);
return PASSWORD_ERROR;
}
}
@@ -0,0 +1,456 @@
<?php
/**
* DirectAdmin Password Driver
*
* Driver to change passwords via DirectAdmin Control Panel
*
* @version 2.2
* @author Victor Benincasa <vbenincasa @ gmail.com>
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
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 ['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', [
'email' => $da_user,
'oldpassword' => $da_curpass,
'password1' => $da_newpass,
'password2' => $da_newpass,
'api' => '1'
]);
$response = $Socket->fetch_parsed_body();
//DEBUG
//rcube::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 ['code' => PASSWORD_CONNECT_ERROR, 'message' => $Socket->error[0]];
}
if ($response['error'] == 1) {
return ['code' => PASSWORD_ERROR, 'message' => strip_tags($response['text'])];
}
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 <l0rdphi1@liquenox.net>
* @package HTTPSocket
* @version 3.0.2
*/
class HTTPSocket
{
var $version = '3.0.2';
// 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 = [];
var $warn = [];
var $query_cache = [];
var $doFollowLocationHeader = true;
var $redirectURL;
var $max_redirects = 5;
var $ssl_setting_message = 'DirectAdmin appears to be using SSL. Change your script to connect to ssl://';
var $extra_headers = [];
/**
* Create server "connection".
*
*/
function connect($host, $port = '')
{
if (!is_numeric($port)) {
$port = 2222;
}
$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. default is null
* @param string|null password. default 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
*/
function query($request, $content = '')
{
$this->error = $this->warn = [];
$this->result_status_code = null;
$is_ssl = false;
// is our request a http:// ... ?
if (preg_match('!^http://!i',$request) || preg_match('!^https://!i',$request)) {
$location = parse_url($request);
if (preg_match('!^https://!i',$request)) {
$this->connect('https://'.$location['host'],$location['port']);
}
else {
$this->connect('http://'.$location['host'],$location['port']);
}
$this->set_login($location['user'], $location['pass']);
$request = $location['path'];
if ($content == '') {
$content = $location['query'];
}
if (strlen($request) < 1) {
$request = '/';
}
}
if (preg_match('!^ssl://!i', $this->remote_host)) {
$this->remote_host = 'https://'.substr($this->remote_host, 6);
}
if (preg_match('!^tcp://!i', $this->remote_host)) {
$this->remote_host = 'http://'.substr($this->remote_host, 6);
}
if (preg_match('!^https://!i', $this->remote_host)) {
$is_ssl = true;
}
$array_headers = [
'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 = [];
foreach ($content as $key => $value) {
$pairs[] = "$key=".urlencode($value);
}
$content = join('&',$pairs);
unset($pairs);
}
$OK = true;
if ($this->method == 'GET') {
$request .= '?'.$content;
}
$ch = curl_init($this->remote_host.':'.$this->remote_port.$request);
if ($is_ssl) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //1
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //2
//curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
}
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_USERAGENT, "HTTPSocket/$this->version");
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 100);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_LOW_SPEED_LIMIT, 512);
curl_setopt($ch, CURLOPT_LOW_SPEED_TIME, 120);
// instance connection
if ($this->bind_host) {
curl_setopt($ch, CURLOPT_INTERFACE, $this->bind_host);
}
// if we have a username and password, add the header
if (isset($this->remote_uname) && isset($this->remote_passwd)) {
curl_setopt($ch, CURLOPT_USERPWD, $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') {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
//$array_headers['Content-type'] = 'application/x-www-form-urlencoded';
$array_headers['Content-length'] = strlen($content);
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $array_headers);
if (!($this->result = curl_exec($ch))) {
$this->error[] = curl_error($ch);
$OK = false;
}
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$this->result_header = substr($this->result, 0, $header_size);
$this->result_body = substr($this->result, $header_size);
$this->result_status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$this->lastTransferSpeed = curl_getinfo($ch, CURLINFO_SPEED_DOWNLOAD) / 1024;
curl_close($ch);
$this->query_cache[] = $this->remote_host.':'.$this->remote_port.$request;
$headers = $this->fetch_header();
// 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) {
//dont bother if we didn't even setup the script correctly
if (isset($headers['x-use-https']) && $headers['x-use-https'] == 'yes') {
die($this->ssl_setting_message);
}
if (isset($headers['location'])) {
if ($this->max_redirects <= 0) {
die("Too many redirects on: ".$headers['location']);
}
$this->max_redirects--;
$this->redirectURL = $headers['location'];
$this->query($headers['location'], $content);
}
}
}
function getTransferSpeed()
{
return $this->lastTransferSpeed;
}
/**
* The quick way to get a URL's content :)
*
* @param string $location URL
* @param bool $asArray 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 = [];
}
/**
* 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 = [0 => $array_headers[0]];
unset($array_headers[0]);
foreach ($array_headers as $pair) {
if ($pair == '' || $pair == "\r\n") continue;
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;
}
/**
* Set a specific message on how to change the SSL setting, in the event that it's not set correctly.
*/
function set_ssl_setting_message($str)
{
$this->ssl_setting_message = $str;
}
}
@@ -0,0 +1,94 @@
<?php
/**
* domainFACTORY Password Driver
*
* Driver to change passwords with the hosting provider domainFACTORY.
* http://www.df.eu/
*
* @version 2.1
* @author Till Krüss <me@tillkruess.com>
* @link http://tillkruess.com/projects/roundcube/
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_domainfactory_password
{
function save($curpass, $passwd, $username)
{
if ($ch = curl_init()) {
// initial login
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => 'https://ssl.df.eu/chmail.php',
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'login' => $username,
'pwd' => $curpass,
'action' => 'change'
])
]);
if ($result = curl_exec($ch)) {
// login successful, get token!
$postfields = [
'pwd1' => $passwd,
'pwd2' => $passwd,
'action[update]' => 'Speichern'
];
preg_match_all('~<input name="(.+?)" type="hidden" value="(.+?)">~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, http_build_query($postfields));
if ($result = curl_exec($ch)) {
// has the password been changed?
if (strpos($result, 'Einstellungen erfolgreich') !== false) {
return PASSWORD_SUCCESS;
}
// show error message(s) if possible
if (strpos($result, '<div class="d-msg-text">') !== false) {
preg_match_all('#<div class="d-msg-text">(.*?)</div>#s', $result, $errors);
if (isset($errors[1])) {
$error_message = '';
foreach ($errors[1] as $error) {
$error_message .= trim(rcube_charset::convert($error, 'ISO-8859-15')).' ';
}
return ['code' => PASSWORD_ERROR, 'message' => $error_message];
}
}
}
else {
return PASSWORD_CONNECT_ERROR;
}
}
else {
return PASSWORD_CONNECT_ERROR;
}
}
else {
return PASSWORD_CONNECT_ERROR;
}
return PASSWORD_ERROR;
}
}
@@ -0,0 +1,91 @@
<?php
/**
* Dovecot passwdfile Password Driver
*
* Driver that adds functionality to change the passwords in dovecot v2 passwd-file files.
* The code is derived from the Plugin examples by The Roundcube Dev Team
*
* On vanilla dovecot v2 environments, use the correct values for these config settings, too:
*
* $config['password_dovecot_passwdfile_path']: The path of your dovecot passwd-file '/path/to/filename'
* $config['password_dovecotpw']: Full path and 'pw' command of doveadm binary - like '/usr/local/bin/doveadm pw'
* $config['password_dovecotpw_method']: Dovecot hashing algo (http://wiki2.dovecot.org/Authentication/PasswordSchemes)
* $config['password_dovecotpw_with_method']: True if you want the hashing algo as prefix in your passwd-file
*
* @version 1.1
*
* Copyright (C) 2017, hostNET Medien GmbH, www.hostnet.de
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_dovecot_passwdfile_password
{
public function save($currpass, $newpass, $username)
{
$rcmail = rcmail::get_instance();
$mailuserfile = $rcmail->config->get('password_dovecot_passwdfile_path') ?: '/etc/mail/imap.passwd';
$password = password::hash_password($newpass);
$username = escapeshellcmd($username); // FIXME: Do we need this?
$content = '';
// read the entire mail user file
$fp = fopen($mailuserfile, 'r');
if (empty($fp)) {
rcube::raise_error([
'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
'message' => "Password plugin: Unable to read password file $mailuserfile."
],
true, false
);
return PASSWORD_CONNECT_ERROR;
}
if (flock($fp, LOCK_EX)) {
// Read the file and replace the user password
while (($line = fgets($fp, 40960)) !== false) {
if (strpos($line, "$username:") === 0) {
$pos = strpos($line, ':', strlen("$username:") + 1);
$line = "$username:$password" . substr($line, $pos);
}
$content .= $line;
}
// Write back the entire file
if (file_put_contents($mailuserfile, $content)) {
flock($fp, LOCK_UN);
fclose($fp);
return PASSWORD_SUCCESS;
}
}
fclose($fp);
rcube::raise_error([
'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
'message' => "Password plugin: Failed to save file $mailuserfile."
],
true, false
);
return PASSWORD_ERROR;
}
}
@@ -0,0 +1,72 @@
<?php
/**
* expect driver
*
* Driver that adds functionality to change the systems user password via
* the 'expect' command.
*
* For installation instructions please read the README file.
*
* @version 2.0
* @author Andy Theuninck <gohanman@gmail.com)
*
* Based on chpasswd roundcubemail password driver by
* @author Alex Cartwright <acartwright@mutinydesign.co.uk)
* and expect horde passwd driver by
* @author Gaudenz Steinlin <gaudenz@soziologie.ch>
*
* 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:
* -telnet -host localhost -output /tmp/passwd.log -log /tmp/passwd.log
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_expect_password
{
public function save($currpass, $newpass, $username)
{
$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');
$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;
}
rcube::raise_error([
'code' => 600,
'file' => __FILE__,
'line' => __LINE__,
'message' => "Password plugin: Unable to execute $cmd"
], true, false
);
return PASSWORD_ERROR;
}
}
@@ -0,0 +1,70 @@
<?php
/**
* Gearman Password Driver
*
* Payload is json string containing username, oldPassword and newPassword
* Return value is a json string saying result: true if success.
*
* @version 1.0
* @author Mohammad Anwari <mdamt@mdamt.net>
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_gearman_password
{
function save($currpass, $newpass, $username)
{
if (extension_loaded('gearman')) {
$rcmail = rcmail::get_instance();
$payload = [
'username' => $username,
'oldPassword' => $currpass,
'newPassword' => $newpass,
];
$gmc = new GearmanClient();
$gmc->addServer($rcmail->config->get('password_gearman_host', 'localhost'));
$result = $gmc->doNormal('setPassword', json_encode($payload));
$success = json_decode($result);
if ($success && $success->result == 1) {
return PASSWORD_SUCCESS;
}
rcube::raise_error([
'code' => 600,
'file' => __FILE__,
'line' => __LINE__,
'message' => "Password plugin: Gearman authentication failed for user $username"
], true, false
);
}
else {
rcube::raise_error([
'code' => 600,
'file' => __FILE__,
'line' => __LINE__,
'message' => "Password plugin: PECL Gearman module not loaded"
], true, false
);
}
return PASSWORD_ERROR;
}
}
@@ -0,0 +1,76 @@
<?php
/**
* hMailserver password driver
*
* @version 2.0
* @author Roland 'rosali' Liebl <myroundcube@mail4us.net>
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_hmail_password
{
public function save($curpass, $passwd, $username)
{
$rcmail = rcmail::get_instance();
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) {
rcube::write_log('errors', "Plugin password (hmail driver): " . trim(strip_tags($e->getMessage())));
rcube::write_log('errors', "Plugin password (hmail driver): This problem is often caused by DCOM permissions not being set.");
return PASSWORD_ERROR;
}
if (strstr($username,'@')) {
list(, $domain) = explode('@', $username);
}
else {
$domain = $rcmail->config->get('username_domain',false);
if (!$domain) {
rcube::write_log('errors','Plugin password (hmail driver): $config[\'username_domain\'] is not defined.');
return PASSWORD_ERROR;
}
$username = $username . "@" . $domain;
}
try {
$obApp->Authenticate($username, $curpass);
$obDomain = $obApp->Domains->ItemByName($domain);
$obAccount = $obDomain->Accounts->ItemByAddress($username);
$obAccount->Password = $passwd;
$obAccount->Save();
return PASSWORD_SUCCESS;
}
catch (Exception $e) {
rcube::write_log('errors', "Plugin password (hmail driver): " . trim(strip_tags($e->getMessage())));
rcube::write_log('errors', "Plugin password (hmail driver): This problem is often caused by DCOM permissions not being set.");
return PASSWORD_ERROR;
}
}
}
@@ -0,0 +1,139 @@
<?php
/**
* Roundcube password driver for generic HTTP APIs.
*
* This driver changes the e-mail password via any generic HTTP/HTTPS API.
*
* @author David Croft
*
* Copyright (C) The Roundcube Dev Team
*
* Config variables:
* $config['password_httpapi_url'] = 'https://passwordserver.example.org'; // required
* $config['password_httpapi_method'] = 'POST'; // default
* $config['password_httpapi_var_user'] = 'user'; // optional
* $config['password_httpapi_var_curpass'] = 'curpass'; // optional
* $config['password_httpapi_var_newpass'] = 'newpass'; // optional
* $config['password_httpapi_expect'] = '/^ok$/i'; // optional
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_httpapi_password
{
/**
* This method is called from roundcube to change the password
*
* roundcube already validated the old password so we just need to change it at this point
*
* @param string $curpass Current password
* @param string $newpass New password
* @param string $username Login username
*
* @return int PASSWORD_SUCCESS|PASSWORD_ERROR|PASSWORD_CONNECT_ERROR
*/
function save($curpass, $newpass, $username)
{
$rcmail = rcmail::get_instance();
$client = password::get_http_client();
// Get configuration with defaults
$url = $rcmail->config->get('password_httpapi_url');
$method = $rcmail->config->get('password_httpapi_method', 'POST');
$var_user = $rcmail->config->get('password_httpapi_var_user');
$var_curpass = $rcmail->config->get('password_httpapi_var_curpass');
$var_newpass = $rcmail->config->get('password_httpapi_var_newpass');
$expect = $rcmail->config->get('password_httpapi_expect');
// Set the variables on the GET query string or POST vars
$vars = [];
if ($var_user) {
$vars[$var_user] = $username;
}
if ($var_curpass) {
$vars[$var_curpass] = $curpass;
}
if ($var_newpass) {
$vars[$var_newpass] = $newpass;
}
$method = strtoupper($method);
$params = [];
if ($method == 'POST') {
$params['form_params'] = $vars;
}
else if ($method == 'GET') {
$params['query'] = $vars;
}
else {
rcube::raise_error([
'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
'message' => "Password plugin: Invalid httpapi method",
],
true, false
);
return PASSWORD_CONNECT_ERROR;
}
try {
$response = $client->request($method, $url, $params);
$response_code = $response->getStatusCode();
$result = $response->getBody();
}
catch (Exception $e) {
rcube::raise_error([
'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
'message' => "Password plugin: " . $e->getMessage()
],
true, false
);
return PASSWORD_CONNECT_ERROR;
}
// Non-2xx response codes mean the password change failed
if ($response_code < 200 || $response_code > 299) {
rcube::raise_error([
'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
'message' => "Password plugin: Unexpected response code {$response_code}: "
. substr($result, 0, 1024)
],
true, false
);
return ($response_code == 404 || $response_code > 499) ? PASSWORD_CONNECT_ERROR : PASSWORD_ERROR;
}
// If configured, check the body of the response
if ($expect && !preg_match($expect, $result)) {
rcube::raise_error([
'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
'message' => "Password plugin: Unexpected response body: " . substr($result, 0, 1024)
],
true, false
);
return PASSWORD_ERROR;
}
return PASSWORD_SUCCESS;
}
}
@@ -0,0 +1,44 @@
<?php
/**
* kpasswd Driver
*
* Driver that adds functionality to change the systems user password via
* the 'kpasswd' command.
*
* For installation instructions please read the README file.
*
* @version 1.0
* @author Peter Allgeyer <peter.allgeyer@salzburgresearch.at>
*
* Based on chpasswd roundcubemail password driver by
* @author Alex Cartwright <acartwright@mutinydesign.co.uk>
*/
class rcube_kpasswd_password
{
public function save($currpass, $newpass, $username)
{
$bin = rcmail::get_instance()->config->get('password_kpasswd_cmd', '/usr/bin/kpasswd');
$cmd = $bin . ' ' . escapeshellarg($username) . ' 2>&1';
$handle = popen($cmd, "w");
fwrite($handle, $currpass."\n");
fwrite($handle, $newpass."\n");
fwrite($handle, $newpass."\n");
if (pclose($handle) == 0) {
return PASSWORD_SUCCESS;
}
rcube::raise_error([
'code' => 600,
'file' => __FILE__,
'line' => __LINE__,
'message' => "Password plugin: Unable to execute $cmd"
], true, false
);
return PASSWORD_ERROR;
}
}
@@ -0,0 +1,202 @@
<?php
/**
* LDAP Password Driver
*
* Driver for passwords stored in LDAP
* This driver use the PEAR Net_LDAP2 class (http://pear.php.net/package/Net_LDAP2).
*
* @version 2.0
* @author Edouard MOREAU <edouard.moreau@ensma.fr>
*
* 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/).
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_ldap_password
{
public function save($curpass, $passwd)
{
$rcmail = rcmail::get_instance();
require_once 'Net/LDAP2.php';
require_once __DIR__ . '/ldap_simple.php';
// Building user DN
if ($userDN = $rcmail->config->get('password_ldap_userDN_mask')) {
$userDN = rcube_ldap_simple_password::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 = [
'binddn' => $binddn,
'bindpw' => $bindpw,
'basedn' => $rcmail->config->get('password_ldap_basedn'),
'host' => $rcmail->config->get('password_ldap_host', 'localhost'),
'port' => $rcmail->config->get('password_ldap_port', '389'),
'starttls' => $rcmail->config->get('password_ldap_starttls'),
'version' => $rcmail->config->get('password_ldap_version', '3'),
];
// Connecting using the configuration array
$ldap = Net_LDAP2::connect($ldapConfig);
// Checking for connection error
if (is_a($ldap, 'PEAR_Error')) {
return PASSWORD_CONNECT_ERROR;
}
$force = $rcmail->config->get('password_ldap_force_replace', true);
$pwattr = $rcmail->config->get('password_ldap_pwattr', 'userPassword');
$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');
$encodage = $rcmail->config->get('password_ldap_encodage', 'md5-crypt');
// Support multiple userPassword values where desired.
// multiple encodings can be specified separated by '+' (e.g. "cram-md5+ssha")
$encodages = explode('+', $encodage);
$crypted_pass = [];
foreach ($encodages as $enc) {
if ($cpw = password::hash_password($passwd, $enc)) {
$crypted_pass[] = $cpw;
}
}
// Support password_ldap_samba option for backward compat.
if ($samba && !$smbpwattr) {
$smbpwattr = 'sambaNTPassword';
$smblchattr = 'sambaPwdLastSet';
}
// Crypt new password
if (empty($crypted_pass)) {
return PASSWORD_CRYPT_ERROR;
}
// Crypt new samba password
if ($smbpwattr && !($samba_pass = password::hash_password($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([$pwattr => $crypted_pass], $force)) {
return PASSWORD_CONNECT_ERROR;
}
// Updating PasswordLastChange Attribute if desired
if ($lchattr) {
$current_day = (int) (time() / 86400);
if (!$userEntry->replace([$lchattr => $current_day], $force)) {
return PASSWORD_CONNECT_ERROR;
}
}
// Update Samba password and last change fields
if ($smbpwattr) {
$userEntry->replace([$smbpwattr => $samba_pass], $force);
}
// Update Samba password last change field
if ($smblchattr) {
$userEntry->replace([$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)
{
$binddn = $rcmail->config->get('password_ldap_searchDN');
$bindpw = $rcmail->config->get('password_ldap_searchPW');
$ldapConfig = [
'basedn' => $rcmail->config->get('password_ldap_basedn'),
'host' => $rcmail->config->get('password_ldap_host', 'localhost'),
'port' => $rcmail->config->get('password_ldap_port', '389'),
'starttls' => $rcmail->config->get('password_ldap_starttls'),
'version' => $rcmail->config->get('password_ldap_version', '3'),
];
// allow anonymous searches
if (!empty($binddn)) {
$ldapConfig['binddn'] = $binddn;
$ldapConfig['bindpw'] = $bindpw;
}
$ldap = Net_LDAP2::connect($ldapConfig);
if (is_a($ldap, 'PEAR_Error')) {
return '';
}
$base = rcube_ldap_simple_password::substitute_vars($rcmail->config->get('password_ldap_search_base'));
$filter = rcube_ldap_simple_password::substitute_vars($rcmail->config->get('password_ldap_search_filter'));
$options = [
'scope' => 'sub',
'attributes' => [],
];
$result = $ldap->search($base, $filter, $options);
if (is_a($result, 'PEAR_Error') || ($result->count() != 1)) {
$ldap->done();
return '';
}
$userDN = $result->current()->dn();
$ldap->done();
return $userDN;
}
}
@@ -0,0 +1,75 @@
<?php
/**
* LDAP - Password Modify Extended Operation Driver
*
* Driver for passwords stored in LDAP
* This driver is based on Simple LDAP Password Driver, but uses
* Password Modify Extended Operation
* PHP >= 7.2 required
*
* @version 1.0
* @author Peter Kubica <peter@kubica.ch>
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
require_once __DIR__ . '/ldap_simple.php';
class rcube_ldap_exop_password extends rcube_ldap_simple_password
{
function save($curpass, $passwd)
{
if (!function_exists('ldap_exop_passwd')) {
rcube::raise_error([
'code' => 100, 'type' => 'ldap',
'file' => __FILE__, 'line' => __LINE__,
'message' => "ldap_exop_passwd not supported"
],
true
);
return PASSWORD_ERROR;
}
// Connect and bind
$ret = $this->connect($curpass);
if ($ret !== true) {
return $ret;
}
if (!ldap_exop_passwd($this->conn, $this->user, $curpass, $passwd)) {
$this->_debug("S: ".ldap_error($this->conn));
$errno = ldap_errno($this->conn);
ldap_unbind($this->conn);
if ($errno == 0x13) {
return PASSWORD_CONSTRAINT_VIOLATION;
}
return PASSWORD_CONNECT_ERROR;
}
$this->_debug("S: OK");
// All done, no error
ldap_unbind($this->conn);
return PASSWORD_SUCCESS;
}
}
@@ -0,0 +1,104 @@
<?php
/**
* ldap_ppolicy driver
*
* Driver that adds functionality to change the user password via
* the 'change_ldap_pass.pl' command respecting password policy (history) in LDAP.
*
* @version 1.0
* @author Zbigniew Szmyd <zbigniew.szmyd@linseco.pl>
*/
class rcube_ldap_ppolicy_password
{
protected $debug = false;
public function save($currpass, $newpass, $username)
{
$rcmail = rcmail::get_instance();
$this->debug = $rcmail->config->get('ldap_debug');
$cmd = $rcmail->config->get('password_ldap_ppolicy_cmd');
$uri = $rcmail->config->get('password_ldap_ppolicy_uri');
$baseDN = $rcmail->config->get('password_ldap_ppolicy_basedn');
$filter = $rcmail->config->get('password_ldap_ppolicy_search_filter');
$bindDN = $rcmail->config->get('password_ldap_ppolicy_searchDN');
$bindPW = $rcmail->config->get('password_ldap_ppolicy_searchPW');
$cafile = $rcmail->config->get('password_ldap_ppolicy_cafile');
$log_dir = $rcmail->config->get('log_dir');
if (empty($log_dir)) {
$log_dir = RCUBE_INSTALL_PATH . 'logs';
}
$descriptorspec = [
0 => ["pipe", "r"], // stdin is a pipe that the child will read from
1 => ["pipe", "w"], // stdout is a pipe that the child will write to
2 => ["pipe", "w"] // stderr is a pipe that the child will write to
];
$cmd = 'plugins/password/helpers/'. $cmd;
$this->_debug('Policy request: ' . json_encode([
'user' => $username,
'cmd' => $cmd,
'uri' => $uri,
'baseDN' => $baseDN,
'filter' => $filter,
]));
$process = proc_open($cmd, $descriptorspec, $pipes);
if ($process) {
// $pipes now looks like this:
// 0 => writeable handle connected to child stdin
// 1 => readable handle connected to child stdout
// Any error output will be appended to /tmp/error-output.txt
fwrite($pipes[0], $uri."\n");
fwrite($pipes[0], $baseDN."\n");
fwrite($pipes[0], $filter."\n");
fwrite($pipes[0], $bindDN."\n");
fwrite($pipes[0], $bindPW."\n");
fwrite($pipes[0], $username."\n");
fwrite($pipes[0], $currpass."\n");
fwrite($pipes[0], $newpass."\n");
fwrite($pipes[0], $cafile);
$result = trim(stream_get_contents($pipes[1]));
$stderr = trim(stream_get_contents($pipes[2]));
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);
$this->_debug('Policy result: ' . $result);
switch ($result) {
case "OK":
return PASSWORD_SUCCESS;
case "Password is in history of old passwords":
return PASSWORD_IN_HISTORY;
case "Cannot connect to any server":
return PASSWORD_CONNECT_ERROR;
default:
rcube::raise_error([
'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
'message' => "Password plugin: Failed to execute command: $cmd. Output: $result. Error: $stderr"
], true, false);
}
}
return PASSWORD_ERROR;
}
private function _debug($str)
{
if ($this->debug) {
rcube::write_log('ldap', $str);
}
}
}
@@ -0,0 +1,314 @@
<?php
/**
* Simple LDAP Password Driver
*
* Driver for passwords stored in LDAP
* This driver is based on Edouard's LDAP Password Driver, but does not
* require PEAR's Net_LDAP2 to be installed
*
* @version 2.1
* @author Wout Decre <wout@canodus.be>
* @author Aleksander Machniak <machniak@kolabsys.com>
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_ldap_simple_password
{
protected $debug = false;
protected $user;
protected $conn;
public function save($curpass, $passwd)
{
$rcmail = rcmail::get_instance();
$lchattr = $rcmail->config->get('password_ldap_lchattr');
$pwattr = $rcmail->config->get('password_ldap_pwattr', 'userPassword');
$smbpwattr = $rcmail->config->get('password_ldap_samba_pwattr');
$smblchattr = $rcmail->config->get('password_ldap_samba_lchattr');
$samba = $rcmail->config->get('password_ldap_samba');
$pass_mode = $rcmail->config->get('password_ldap_encodage', 'md5-crypt');
$crypted_pass = password::hash_password($passwd, $pass_mode);
// 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 = password::hash_password($passwd, 'samba'))) {
return PASSWORD_CRYPT_ERROR;
}
// Connect and bind
$ret = $this->connect($curpass);
if ($ret !== true) {
return $ret;
}
$entry[$pwattr] = $crypted_pass;
// Update PasswordLastChange Attribute if desired
if ($lchattr) {
$entry[$lchattr] = (int)(time() / 86400);
}
// Update Samba password
if ($smbpwattr) {
$entry[$smbpwattr] = $samba_pass;
}
// Update Samba password last change
if ($smblchattr) {
$entry[$smblchattr] = time();
}
$this->_debug("C: Modify {$this->user}: " . print_r($entry, true));
if (!ldap_modify($this->conn, $this->user, $entry)) {
$this->_debug("S: ".ldap_error($this->conn));
$errno = ldap_errno($this->conn);
ldap_unbind($this->conn);
if ($errno == 0x13) {
return PASSWORD_CONSTRAINT_VIOLATION;
}
return PASSWORD_CONNECT_ERROR;
}
$this->_debug("S: OK");
// All done, no error
ldap_unbind($this->conn);
return PASSWORD_SUCCESS;
}
/**
* Connect and bind to LDAP server
*/
function connect($curpass)
{
$rcmail = rcmail::get_instance();
$this->debug = $rcmail->config->get('ldap_debug');
$ldap_host = $rcmail->config->get('password_ldap_host', 'localhost');
$ldap_port = $rcmail->config->get('password_ldap_port', '389');
$ldap_uri = $this->_host2uri($ldap_host, $ldap_port);
$this->_debug("C: Connect [{$ldap_uri}]");
// Connect
if (!($ds = ldap_connect($ldap_uri))) {
$this->_debug("S: NOT OK");
rcube::raise_error([
'code' => 100, 'type' => 'ldap',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Could not connect to LDAP server"
],
true
);
return PASSWORD_CONNECT_ERROR;
}
$this->_debug("S: OK");
// Set protocol version
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION,
$rcmail->config->get('password_ldap_version', '3'));
// Start TLS
if ($rcmail->config->get('password_ldap_starttls')) {
if (!ldap_start_tls($ds)) {
ldap_unbind($ds);
return PASSWORD_CONNECT_ERROR;
}
}
// other plugins might want to modify user DN
$plugin = $rcmail->plugins->exec_hook('password_ldap_bind',
['user_dn' => '', 'conn' => $ds]
);
// Build user DN
if (!empty($plugin['user_dn'])) {
$user_dn = $plugin['user_dn'];
}
else if ($user_dn = $rcmail->config->get('password_ldap_userDN_mask')) {
$user_dn = self::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;
}
$this->_debug("C: Bind $binddn, pass: **** [" . strlen($bindpw) . "]");
// Bind
if (!ldap_bind($ds, $binddn, $bindpw)) {
$this->_debug("S: ".ldap_error($ds));
ldap_unbind($ds);
return PASSWORD_CONNECT_ERROR;
}
$this->_debug("S: OK");
$this->conn = $ds;
$this->user = $user_dn;
return true;
}
/**
* 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)
{
$search_user = $rcmail->config->get('password_ldap_searchDN');
$search_pass = $rcmail->config->get('password_ldap_searchPW');
$search_base = $rcmail->config->get('password_ldap_search_base');
$search_filter = $rcmail->config->get('password_ldap_search_filter');
if (empty($search_filter)) {
return false;
}
$this->_debug("C: Bind " . ($search_user ? $search_user : '[anonymous]'));
// Bind
if (!ldap_bind($ds, $search_user, $search_pass)) {
$this->_debug("S: ".ldap_error($ds));
return false;
}
$this->_debug("S: OK");
$search_base = self::substitute_vars($search_base);
$search_filter = self::substitute_vars($search_filter);
$this->_debug("C: Search $search_base for $search_filter");
// Search for the DN
if (!($sr = ldap_search($ds, $search_base, $search_filter))) {
$this->_debug("S: ".ldap_error($ds));
return false;
}
$found = ldap_count_entries($ds, $sr);
$this->_debug("S: OK [found $found records]");
// If no or more entries were found, return false
if ($found != 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
*/
public static 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], ['.' => ',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);
}
else if (count($parts) == 1) {
$str = str_replace('%name', $parts[0], $str);
$str = str_replace('%n', $parts[0], $str);
}
return $str;
}
/**
* Prints debug info to the log
*/
protected function _debug($str)
{
if ($this->debug) {
rcube::write_log('ldap', $str);
}
}
/**
* Convert LDAP host/port into URI
*/
private static function _host2uri($host, $port = null)
{
if (stripos($host, 'ldapi://') === 0) {
return $host;
}
if (strpos($host, '://') === false) {
$host = ($port == 636 ? 'ldaps' : 'ldap') . '://' . $host;
}
if ($port && !preg_match('/:[0-9]+$/', $host)) {
$host .= ':' . $port;
}
return $host;
}
}
@@ -0,0 +1,83 @@
<?php
/**
* Mailcow Password Driver
*
* @version 1.0
* @author Lukas "Hexaris" Matula <hexaris@gbely.net>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*
* It is necessary to set the following variables in plugin/password/config.inc.php
* $config['password_driver'] = 'mailcow';
* $config['password_mailcow_api_host'] = '';
* $config['password_mailcow_api_token'] = '';
*/
class rcube_mailcow_password
{
function save($curpass, $passwd, $username)
{
$rcmail = rcmail::get_instance();
$host = $rcmail->config->get('password_mailcow_api_host');
$token = $rcmail->config->get('password_mailcow_api_token');
try {
$client = password::get_http_client();
$headers = [
'X-API-Key' => $token,
'accept' => 'application/json'
];
$cowdata = [
'attr' => [
'password' => $passwd,
'password2' => $passwd
],
'items' => [ $username ]
];
if (!strpos($host, '://')) {
$host = "https://{$host}";
}
$response = $client->post("{$host}/api/v1/edit/mailbox", [
'headers' => $headers,
'json' => $cowdata
]);
$cowreply = json_decode($response->getBody(),true);
if ($cowreply[0]['type'] == 'success') {
return PASSWORD_SUCCESS;
}
return PASSWORD_ERROR;
}
catch (Exception $e) {
$result = $e->getMessage();
}
rcube::raise_error([
'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
'message' => "Password plugin: Problem with Mailcow API: $result",
],
true, false
);
return PASSWORD_CONNECT_ERROR;
}
}
@@ -0,0 +1,78 @@
<?php
/**
* Mail-in-a-Box Driver
*
* Driver that adds functionality to change the user password via the
* API endpoint of Mail-in-a-Box (https://mailinabox.email/).
*
* For installation instructions please read the README file. It requires
* following parameters in configuration:
*
* - password_miab_username - name of the admin user used to access api
* - password_miab_password - password of the admin user used to access api
* - password_miab_url - the url to the control panel of Mail-in-a-Box
*
* @version 1.0
* @author Alexey Shtokalo <alexey@shtokalo.net>
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_miab_password
{
public function save($currpass, $newpass, $username)
{
$config = rcmail::get_instance()->config;
$host = rtrim($config->get('password_miab_url'), '/') . '/mail/users/password';
try {
$client = password::get_http_client();
$request = [
'form_params' => [
'email' => $username,
'password' => $newpass,
],
'auth' => [
$config->get('password_miab_user') ?: $username,
$config->get('password_miab_pass') ?: $currpass,
],
];
$response = $client->post($host, $request);
if (
$response->getStatusCode() == 200
&& trim($result = $response->getBody()) === 'OK'
) {
return PASSWORD_SUCCESS;
}
}
catch (Exception $e) {
$result = $e->getMessage();
}
rcube::raise_error([
'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
'message' => "Password plugin: Unable to change password. $result",
],
true, false
);
return PASSWORD_ERROR;
}
}
@@ -0,0 +1,120 @@
<?php
/**
* Modoboa Password Driver
*
* Payload is json string containing username, oldPassword and newPassword
* Return value is a json string saying result: true if success.
*
* @version 1.0.1
* @author stephane @actionweb.fr
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*
* The driver need modoboa core 1.10.6 or later
*
* You need to define theses variables in plugin/password/config.inc.php
*
* $config['password_driver'] = 'modoboa'; // use modoboa as driver
* $config['password_modoboa_api_token'] = ''; // put token number from Modoboa server
* $config['password_minimum_length'] = 8; // select same number as in Modoboa server
*/
class rcube_modoboa_password
{
function save($curpass, $passwd)
{
// Init config access
$rcmail = rcmail::get_instance();
$ModoboaToken = $rcmail->config->get('password_modoboa_api_token');
$RoudCubeUsername = $_SESSION['username'];
$IMAPhost = $_SESSION['imap_host'];
// Call GET to fetch values from modoboa server
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://" . $IMAPhost . "/api/v1/accounts/?search=" . urlencode($RoudCubeUsername),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Token " . $ModoboaToken,
"Cache-Control: no-cache",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
return PASSWORD_CONNECT_ERROR;
}
// Decode json string
$decoded = json_decode($response);
if (!is_array($decoded)) {
return PASSWORD_CONNECT_ERROR;
}
// Get user ID (pk)
$userid = $decoded[0]->pk;
// Encode json with new password
$ret['username'] = $decoded[0]->username;
$ret['mailbox'] = $decoded[0]->mailbox;
$ret['role'] = $decoded[0]->role;
$ret['password'] = $passwd; // new password
$encoded = json_encode($ret);
// Call HTTP API Modoboa
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://" . $IMAPhost . "/api/v1/accounts/" . $userid . "/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => "" . $encoded . "",
CURLOPT_HTTPHEADER => [
"Authorization: Token " . $ModoboaToken,
"Cache-Control: no-cache",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
return PASSWORD_CONNECT_ERROR;
}
return PASSWORD_SUCCESS;
}
}
@@ -0,0 +1,59 @@
<?php
/**
* PAM Password Driver
*
* @version 2.0
* @author Aleksander Machniak
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_pam_password
{
function save($currpass, $newpass, $username)
{
$error = '';
if (extension_loaded('pam') || extension_loaded('pam_auth')) {
if (pam_auth($username, $currpass, $error, false)) {
if (pam_chpass($username, $currpass, $newpass)) {
return PASSWORD_SUCCESS;
}
}
else {
rcube::raise_error([
'code' => 600,
'file' => __FILE__,
'line' => __LINE__,
'message' => "Password plugin: PAM authentication failed for user $username: $error"
], true, false
);
}
}
else {
rcube::raise_error([
'code' => 600,
'file' => __FILE__,
'line' => __LINE__,
'message' => "Password plugin: PECL-PAM module not loaded"
], true, false
);
}
return PASSWORD_ERROR;
}
}
@@ -0,0 +1,260 @@
<?php
/**
* Roundcube Password Driver for Plesk-RPC.
*
* This driver changes a E-Mail-Password via Plesk-RPC
* Deps: PHP-Curl, SimpleXML
*
* @author Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
* @copyright Adfinis SyGroup AG, 2014
*
* Config needed:
* $config['password_plesk_host'] = '10.0.0.5';
* $config['password_plesk_user'] = 'admin';
* $config['password_plesk_pass'] = 'pass';
* $config['password_plesk_rpc_port'] = 8443;
* $config['password_plesk_rpc_path'] = enterprise/control/agent.php;
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
/**
* Roundcube Password Driver Class
*
* See {ROUNDCUBE_ROOT}/plugins/password/README for API description
*
* @author Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
*/
class rcube_plesk_password
{
/**
* This method is called from roundcube to change the password
*
* roundcube already validated the old password so we just need to change it at this point
*
* @author Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
* @param string $curpass Current password
* @param string $newpass New password
* @returns int PASSWORD_SUCCESS|PASSWORD_ERROR
*/
function save($currpass, $newpass, $username)
{
// get config
$rcmail = rcmail::get_instance();
$host = $rcmail->config->get('password_plesk_host');
$user = $rcmail->config->get('password_plesk_user');
$pass = $rcmail->config->get('password_plesk_pass');
$port = $rcmail->config->get('password_plesk_rpc_port');
$path = $rcmail->config->get('password_plesk_rpc_path');
// create plesk-object
$plesk = new plesk_rpc;
$plesk->init($host, $port, $path, $user, $pass);
// try to change password and return the status
$result = $plesk->change_mailbox_password($username, $newpass);
//$plesk->destroy();
if ($result == "ok") {
return PASSWORD_SUCCESS;
} elseif (is_array($result)) {
return $result;
}
return PASSWORD_ERROR;
}
}
/**
* Plesk RPC-Class
*
* Striped down version of Plesk-RPC-Class
* Just functions for changing mail-passwords included
*
* Documentation of Plesk RPC-API: http://download1.parallels.com/Plesk/PP11/11.0/Doc/en-US/online/plesk-api-rpc/
*
* @author Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
*/
class plesk_rpc
{
protected $old_version = false;
protected $curl;
/**
* init plesk-rpc via curl
*
* @param string $host plesk host
* @param string $port plesk rpc port
* @param string $path plesk rpc path
* @param string $user plesk user
* @param string $user plesk password
* @returns void
*/
function init($host, $port, $path, $user, $pass)
{
$headers = [
sprintf("HTTP_AUTH_LOGIN: %s", $user),
sprintf("HTTP_AUTH_PASSWD: %s", $pass),
"Content-Type: text/xml"
];
$url = sprintf("https://%s:%s/%s", $host, $port, $path);
$this->curl = curl_init();
curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT , 5);
curl_setopt($this->curl, CURLOPT_SSL_VERIFYHOST , 0);
curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER , false);
curl_setopt($this->curl, CURLOPT_HTTPHEADER , $headers);
curl_setopt($this->curl, CURLOPT_URL , $url);
}
/**
* send a request to the plesk
*
* @param string $packet XML-Packet to send to Plesk
*
* @returns string Response body
*/
function send_request($packet)
{
curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($this->curl, CURLOPT_POSTFIELDS, $packet);
$result = curl_exec($this->curl);
return $result && strpos($result, '<?xml') === 0 ? $result : null;
}
/**
* close curl
*/
function destroy()
{
curl_close($this->curl);
}
/**
* Get all hosting-information of a domain
*
* @param string $domain domain-name
* @returns object SimpleXML object
*/
function domain_info($domain)
{
// build xml
$request = new SimpleXMLElement("<packet></packet>");
$site = $request->addChild("site");
$get = $site->addChild("get");
$filter = $get->addChild("filter");
$filter->addChild("name", utf8_encode($domain));
$dataset = $get->addChild("dataset");
$dataset->addChild("hosting");
$packet = $request->asXML();
$xml = null;
// send the request and make it to simple-xml-object
if ($res = $this->send_request($packet)) {
$xml = new SimpleXMLElement($res);
}
// Old Plesk versions require version attribute, add it and try again
if ($xml && $xml->site->get->result->status == 'error' && $xml->site->get->result->errcode == 1017) {
$request->addAttribute("version", "1.6.3.0");
$packet = $request->asXML();
$this->old_version = true;
// send the request and make it to simple-xml-object
if ($res = $this->send_request($packet)) {
$xml = new SimpleXMLElement($res);
}
}
return $xml;
}
/**
* Get psa-id of a domain
*
* @param string $domain domain-name
*
* @returns int Domain ID
*/
function get_domain_id($domain)
{
if ($xml = $this->domain_info($domain)) {
return intval($xml->site->get->result->id);
}
}
/**
* Change Password of a mailbox
*
* @param string $mailbox full email-address (user@domain.tld)
* @param string $newpass new password of mailbox
*
* @returns bool
*/
function change_mailbox_password($mailbox, $newpass)
{
list($user, $domain) = explode("@", $mailbox);
$domain_id = $this->get_domain_id($domain);
// if domain cannot be resolved to an id, do not continue
if (!$domain_id) {
return false;
}
// build xml-packet
$request = new SimpleXMLElement("<packet></packet>");
$mail = $request->addChild("mail");
$update = $mail->addChild("update");
$add = $update->addChild("set");
$filter = $add->addChild("filter");
$filter->addChild("site-id", $domain_id);
$mailname = $filter->addChild("mailname");
$mailname->addChild("name", $user);
$password = $mailname->addChild("password");
$password->addChild("value", $newpass);
$password->addChild("type", "plain");
if ($this->old_version) {
$request->addAttribute("version", "1.6.3.0");
}
$packet = $request->asXML();
// send the request to plesk
if ($res = $this->send_request($packet)) {
$xml = new SimpleXMLElement($res);
$res = strval($xml->mail->update->set->result->status);
if ($res != "ok") {
$res = [
'code' => PASSWORD_ERROR,
'message' => strval($xml->mail->update->set->result->errtext)
];
}
return $res;
}
return false;
}
}
@@ -0,0 +1,86 @@
<?php
/**
* Poppassd Password Driver
*
* Driver to change passwords via Poppassd/Courierpassd
*
* @version 2.0
* @author Philip Weir
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_poppassd_password
{
function format_error_result($code, $line)
{
if (preg_match('/^\d\d\d\s+(\S.*)\s*$/', $line, $matches)) {
return ['code' => $code, 'message' => $matches[1]];
}
return $code;
}
function save($curpass, $passwd, $username)
{
$rcmail = rcmail::get_instance();
$poppassd = new Net_Socket();
$port = $rcmail->config->get('password_pop_port', 106);
$host = $rcmail->config->get('password_pop_host', 'localhost');
$host = rcube_utils::parse_host($host);
$result = $poppassd->connect($host, $port, null);
if (is_a($result, 'PEAR_Error')) {
return $this->format_error_result(PASSWORD_CONNECT_ERROR, $result->getMessage());
}
$result = $poppassd->readLine();
if (!preg_match('/^2\d\d/', $result)) {
$poppassd->disconnect();
return $this->format_error_result(PASSWORD_ERROR, $result);
}
$poppassd->writeLine("user ". $username);
$result = $poppassd->readLine();
if (!preg_match('/^[23]\d\d/', $result)) {
$poppassd->disconnect();
return $this->format_error_result(PASSWORD_CONNECT_ERROR, $result);
}
$poppassd->writeLine("pass ". $curpass);
$result = $poppassd->readLine();
if (!preg_match('/^[23]\d\d/', $result)) {
$poppassd->disconnect();
return $this->format_error_result(PASSWORD_ERROR, $result);
}
$poppassd->writeLine("newpass ". $passwd);
$result = $poppassd->readLine();
$poppassd->disconnect();
if (!preg_match('/^2\d\d/', $result)) {
return $this->format_error_result(PASSWORD_ERROR, $result);
}
return PASSWORD_SUCCESS;
}
}
@@ -0,0 +1,55 @@
<?php
/**
* pw_usermod Driver
*
* Driver that adds functionality to change the systems user password via
* the 'pw usermod' command.
*
* For installation instructions please read the README file.
*
* @version 2.0
* @author Alex Cartwright <acartwright@mutinydesign.co.uk>
* @author Adamson Huang <adomputer@gmail.com>
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_pw_usermod_password
{
public function save($currpass, $newpass, $username)
{
$cmd = rcmail::get_instance()->config->get('password_pw_usermod_cmd', 'sudo /usr/sbin/pw usermod -h 0 -n');
$cmd .= ' ' . escapeshellarg($username) . ' > /dev/null';
$handle = popen($cmd, 'w');
fwrite($handle, "$newpass\n");
if (pclose($handle) == 0) {
return PASSWORD_SUCCESS;
}
rcube::raise_error([
'code' => 600,
'file' => __FILE__,
'line' => __LINE__,
'message' => "Password plugin: Unable to execute $cmd"
], true, false
);
return PASSWORD_ERROR;
}
}
@@ -0,0 +1,226 @@
<?php
/**
* Have I Been Pwned Password Strength Driver
*
* Driver to check passwords using HIBP:
* https://haveibeenpwned.com/Passwords
*
* This driver will return a strength of:
* 3: if the password WAS NOT found in HIBP
* 1: if the password WAS found in HIBP
* 2: if there was an ERROR retrieving data.
*
* To use this driver, configure (in ../config.inc.php):
*
* $config['password_strength_driver'] = 'pwned';
* $config['password_minimum_score'] = 3;
*
* Set the minimum score to 3 if you want to make sure that all
* passwords are successfully checked against HIBP (recommended).
*
* Set it to 2 if you still want to accept passwords in case a
* HIBP check fails for some (technical) reason.
*
* Setting the minimum score to 1 or less effectively renders
* the checks useless, as all passwords would be accepted.
* Setting it to 4 or more will effectively reject all passwords.
*
* This driver will only return a maximum score of 3 because not
* being listed in HIBP does not necessarily mean that the
* password is a good one. It is therefore recommended to also
* configure a minimum length for the password.
*
* Background reading (don't worry, your passwords are not sent anywhere):
* https://www.troyhunt.com/ive-just-launched-pwned-passwords-version-2/#cloudflareprivacyandkanonymity
*
* @version 1.0
* @author Christoph Langguth
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_pwned_password
{
// API URL. Note: the trailing slash is mandatory.
const API_URL = 'https://api.pwnedpasswords.com/range/';
// See https://www.troyhunt.com/enhancing-pwned-passwords-privacy-with-padding/
const ENHANCED_PRIVACY_CURL = 1;
// Score constants, these directly correspond to the score that is returned.
const SCORE_LISTED = 1;
const SCORE_ERROR = 2;
const SCORE_NOT_LISTED = 3;
/**
* Rule description.
*
* @return array human-readable description of the check rule.
*/
function strength_rules()
{
$rc = rcmail::get_instance();
$href = 'https://haveibeenpwned.com/Passwords';
return [$rc->gettext(['name' => 'password.pwned_mustnotbedisclosed', 'vars' => ['href' => $href]])];
}
/**
* Password strength check.
* Return values:
* 1 - if password is definitely compromised.
* 2 - if status for password can't be determined (network failures etc.)
* 3 - if password is not publicly known to be compromised.
*
* @param string $passwd Password
*
* @return array password score (1 to 3) and (optional) reason message
*/
function check_strength($passwd)
{
$score = $this->check_pwned($passwd);
$message = null;
if ($score !== self::SCORE_NOT_LISTED) {
$rc = rcmail::get_instance();
if ($score === self::SCORE_LISTED) {
$message = $rc->gettext('password.pwned_isdisclosed');
}
else {
$message = $rc->gettext('password.pwned_fetcherror');
}
}
return [$score, $message];
}
/**
* Check password using HIBP.
*
* @param string $passwd
*
* @return int score, one of the SCORE_* constants (between 1 and 3).
*/
function check_pwned($passwd)
{
// initialize with error score
$result = self::SCORE_ERROR;
if (!$this->can_retrieve()) {
// Log the fact that we cannot check because of configuration error.
rcube::raise_error("Need curl or allow_url_fopen to check password strength with 'pwned'", true, true);
}
else {
list($prefix, $suffix) = $this->hash_split($passwd);
$suffixes = $this->retrieve_suffixes(self::API_URL . $prefix);
if ($suffixes) {
$result = $this->check_suffix_in_list($suffix, $suffixes);
}
}
return $result;
}
function hash_split($passwd)
{
$hash = strtolower(sha1($passwd));
$prefix = substr($hash, 0, 5);
$suffix = substr($hash, 5);
return [$prefix, $suffix];
}
function can_retrieve()
{
return $this->can_curl() || $this->can_fopen();
}
function can_curl()
{
return function_exists('curl_init');
}
function can_fopen()
{
return ini_get('allow_url_fopen');
}
function retrieve_suffixes($url)
{
if ($this->can_curl()) {
return $this->retrieve_curl($url);
}
else {
return $this->retrieve_fopen($url);
}
}
function retrieve_curl($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if (self::ENHANCED_PRIVACY_CURL == 1) {
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Add-Padding: true']);
}
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
function retrieve_fopen($url)
{
$output = '';
$ch = fopen($url, 'r');
while (!feof($ch)) {
$output .= fgets($ch);
}
fclose($ch);
return $output;
}
function check_suffix_in_list($candidate, $list)
{
// initialize to error in case there are no lines at all
$result = self::SCORE_ERROR;
foreach (preg_split('/[\r\n]+/', $list) as $line) {
$line = strtolower($line);
if (preg_match('/^([0-9a-f]{35}):(\d+)$/', $line, $matches)) {
if ($matches[2] > 0 && $matches[1] === $candidate) {
// more than 0 occurrences, and suffix matches
// -> password is compromised
return self::SCORE_LISTED;
}
// valid line, not matching the current password
$result = self::SCORE_NOT_LISTED;
}
else {
// invalid line
return self::SCORE_ERROR;
}
}
return $result;
}
}
@@ -0,0 +1,61 @@
<?php
/**
* SASL Password Driver
*
* Driver that adds functionality to change the users Cyrus/SASL password.
* The code is derived from the Squirrelmail "Change SASL Password" Plugin
* by Galen Johnson.
*
* It only works with saslpasswd2 on the same host where Roundcube runs
* and requires shell access and gcc in order to compile the binary.
*
* For installation instructions please read the README file.
*
* @version 2.0
* @author Thomas Bruederli
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_sasl_password
{
function save($currpass, $newpass, $username)
{
$curdir = RCUBE_PLUGINS_DIR . 'password/helpers';
$username = escapeshellarg($username);
$args = rcmail::get_instance()->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;
}
}
rcube::raise_error([
'code' => 600,
'file' => __FILE__,
'line' => __LINE__,
'message' => "Password plugin: Unable to execute $curdir/chgsaslpasswd"
], true, false
);
return PASSWORD_ERROR;
}
}
@@ -0,0 +1,72 @@
<?php
/**
* smb Driver
*
* Driver that adds functionality to change the systems user password via
* the 'smbpasswd' command.
*
* For installation instructions please read the README file.
*
* @version 2.0
* @author Andy Theuninck <gohanman@gmail.com)
*
* Based on chpasswd roundcubemail password driver by
* @author Alex Cartwright <acartwright@mutinydesign.co.uk)
* and smbpasswd horde passwd driver by
* @author Rene Lund Jensen <Rene@lundjensen.net>
*
* Configuration settings:
* password_smb_host => samba host (default: localhost)
* password_smb_cmd => smbpasswd binary (default: /usr/bin/smbpasswd)
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_smb_password
{
public function save($currpass, $newpass, $username)
{
$host = rcmail::get_instance()->config->get('password_smb_host', 'localhost');
$bin = rcmail::get_instance()->config->get('password_smb_cmd', '/usr/bin/smbpasswd');
$host = rcube_utils::parse_host($host);
$tmpfile = tempnam(sys_get_temp_dir(), 'smb');
$cmd = $bin . ' -r ' . escapeshellarg($host) . ' -s -U ' . escapeshellarg($username) . ' > ' . $tmpfile . ' 2>&1';
$handle = @popen($cmd, 'w');
fwrite($handle, $currpass."\n");
fwrite($handle, $newpass."\n");
fwrite($handle, $newpass."\n");
@pclose($handle);
$res = file($tmpfile);
unlink($tmpfile);
if (strstr($res[count($res) - 1], 'Password changed for user') !== false) {
return PASSWORD_SUCCESS;
}
rcube::raise_error([
'code' => 600,
'file' => __FILE__,
'line' => __LINE__,
'message' => "Password plugin: Unable to execute $cmd"
], true, false
);
return PASSWORD_ERROR;
}
}
+158
View File
@@ -0,0 +1,158 @@
<?php
/**
* SQL Password Driver
*
* Driver for passwords stored in SQL database
*
* @version 2.1
* @author Aleksander Machniak <alec@alec.pl>
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_sql_password
{
/**
* Update current user password
*
* @param string $curpass Current password
* @param string $passwd New password
*
* @return int Result
*/
function save($curpass, $passwd)
{
$rcmail = rcmail::get_instance();
if (!($sql = $rcmail->config->get('password_query'))) {
$sql = 'SELECT update_passwd(%P, %u)';
}
if ($dsn = $rcmail->config->get('password_db_dsn')) {
$db = rcube_db::factory(self::parse_dsn($dsn), '', false);
$db->set_debug((bool)$rcmail->config->get('sql_debug'));
}
else {
$db = $rcmail->get_dbh();
}
if ($db->is_error()) {
return PASSWORD_ERROR;
}
// new password - default hash method
if (strpos($sql, '%P') !== false) {
$password = password::hash_password($passwd);
if ($password === false) {
return PASSWORD_CRYPT_ERROR;
}
$sql = str_replace('%P', $db->quote($password), $sql);
}
// old password - default hash method
if (strpos($sql, '%O') !== false) {
$password = password::hash_password($curpass);
if ($password === false) {
return PASSWORD_CRYPT_ERROR;
}
$sql = str_replace('%O', $db->quote($password), $sql);
}
// Handle clear text passwords securely (#1487034)
$sql_vars = [];
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 punycode
if ($rcmail->config->get('password_idn_ascii')) {
$domain_part = rcube_utils::idn_to_ascii($domain_part);
$username = rcube_utils::idn_to_ascii($username);
$host = rcube_utils::idn_to_ascii($host);
}
else {
$domain_part = rcube_utils::idn_to_utf8($domain_part);
$username = rcube_utils::idn_to_utf8($username);
$host = rcube_utils::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($sql),0,6)) == 'select') {
if ($db->fetch_array($res)) {
return PASSWORD_SUCCESS;
}
}
else {
// Note: Don't be tempted to check affected_rows = 1. For some queries
// (e.g. INSERT ... ON DUPLICATE KEY UPDATE) the result can be 2.
if ($db->affected_rows($res) > 0) {
return PASSWORD_SUCCESS;
}
}
}
return PASSWORD_ERROR;
}
/**
* Parse DSN string and replace host variables
*
* @param string $dsn DSN string
*
* @return string DSN string
*/
protected static function parse_dsn($dsn)
{
if (strpos($dsn, '%')) {
// parse DSN and replace variables in hostname
$parsed = rcube_db::parse_dsn($dsn);
$host = rcube_utils::parse_host($parsed['hostspec']);
// build back the DSN string
if ($host != $parsed['hostspec']) {
$dsn = str_replace('@' . $parsed['hostspec'], '@' . $host, $dsn);
}
}
return $dsn;
}
}
@@ -0,0 +1,67 @@
<?php
/**
* TinyCP driver
*
* Enable the password driver in Roundcube (https://roundcube.net/) for the
* TinyCP Lightweight Linux Control Panel (https://tinycp.com/).
* See README for instructions, Connector Required.
*
* @version 1.2
* @author Ricky Mendoza (HelloWorld@rickymendoza.dev)
*
* Copyright (C) 2020 Ricky Mendoza
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see <https://www.gnu.org/licenses/>.
*/
class rcube_tinycp_password
{
public function save($currpass, $newpass, $username)
{
require_once 'TinyCPConnector.php';
$tinycp_host = rcmail::get_instance()->config->get('password_tinycp_host');
$tinycp_port = rcmail::get_instance()->config->get('password_tinycp_port');
$tinycp_user = rcmail::get_instance()->config->get('password_tinycp_user');
$tinycp_pass = rcmail::get_instance()->config->get('password_tinycp_pass');
$error_message = '';
if ($tinycp_host && $tinycp_port && $tinycp_user && $tinycp_pass) {
try {
$tcp = new TinyCPConnector($tinycp_host, $tinycp_port);
$tcp->Auth($tinycp_user, $tinycp_pass);
$tcp->mail___mailserver___email_pass_change2($username, $newpass);
}
catch (Exception $e) {
$error_message = $e->getMessage();
}
}
else {
$error_message = "Missing configuration value(s). ";
}
if ($error_message) {
rcube::raise_error([
'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
'message' => "Password driver: $error_message",
],
true, false
);
return PASSWORD_ERROR;
}
return PASSWORD_SUCCESS;
}
}
@@ -0,0 +1,77 @@
<?php
/**
* Virtualmin Password Driver
*
* Driver that adds functionality to change the users Virtualmin password.
* The code is derived from the Squirrelmail "Change Cyrus/SASL Password" Plugin
* by Thomas Bruederli.
*
* It only works with virtualmin on the same host where Roundcube runs
* and requires shell access and gcc in order to compile the binary.
*
* @version 3.0
* @author Martijn de Munnik
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_virtualmin_password
{
function save($currpass, $newpass, $username)
{
$curdir = RCUBE_PLUGINS_DIR . 'password/helpers';
$username = escapeshellarg($username);
// Get the domain using virtualmin CLI:
exec("$curdir/chgvirtualminpasswd list-domains --mail-user $username --name-only", $output_domain, $returnvalue);
if ($returnvalue == 0 && count($output_domain) == 1) {
$domain = trim($output_domain[0]);
}
else {
rcube::raise_error([
'code' => 600,
'file' => __FILE__,
'line' => __LINE__,
'message' => "Password plugin: Unable to execute $curdir/chgvirtualminpasswd "
. "or domain for mail-user '$username' not known to Virtualmin"
], true, false
);
return PASSWORD_ERROR;
}
$domain = escapeshellarg($domain);
$newpass = escapeshellarg($newpass);
exec("$curdir/chgvirtualminpasswd modify-user --domain $domain --user $username --pass $newpass", $output, $returnvalue);
if ($returnvalue == 0) {
return PASSWORD_SUCCESS;
}
rcube::raise_error([
'code' => 600,
'file' => __FILE__,
'line' => __LINE__,
'message' => "Password plugin: Unable to execute $curdir/chgvirtualminpasswd"
], true, false
);
return PASSWORD_ERROR;
}
}
@@ -0,0 +1,71 @@
<?php
/**
* vpopmail Password Driver
*
* Driver to change passwords via vpopmaild
*
* @version 2.0
* @author Johannes Hessellund
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_vpopmaild_password
{
function save($curpass, $passwd, $username)
{
$rcmail = rcmail::get_instance();
$vpopmaild = new Net_Socket();
$host = $rcmail->config->get('password_vpopmaild_host');
$port = $rcmail->config->get('password_vpopmaild_port');
$result = $vpopmaild->connect($host, $port, null);
if (is_a($result, 'PEAR_Error')) {
return PASSWORD_CONNECT_ERROR;
}
$vpopmaild->setTimeout($rcmail->config->get('password_vpopmaild_timeout'),0);
$result = $vpopmaild->readLine();
if(!preg_match('/^\+OK/', $result)) {
$vpopmaild->disconnect();
return PASSWORD_CONNECT_ERROR;
}
$vpopmaild->writeLine("slogin ". $username . " " . $curpass);
$result = $vpopmaild->readLine();
if(!preg_match('/^\+OK/', $result) ) {
$vpopmaild->writeLine("quit");
$vpopmaild->disconnect();
return PASSWORD_ERROR;
}
$vpopmaild->writeLine("mod_user ". $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;
}
}
@@ -0,0 +1,90 @@
<?php
/**
* Communigate driver for the Password Plugin for Roundcube
*
* Tested with Communigate Pro 5.1.2
*
* Configuration options:
* password_ximss_host - Host name of Communigate server
* password_ximss_port - XIMSS port on Communigate server
*
* References:
* http://www.communigate.com/WebGuide/XMLAPI.html
*
* @version 2.0
* @author Erik Meitner <erik wanderings.us>
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_ximss_password
{
function save($pass, $newpass, $username)
{
$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, '<login id="A001" authData="'.$username.'" password="'.$pass.'" />'."\0");
fwrite($sock, '<passwordModify id="A002" oldPassword="'.$pass.'" newPassword="'.$newpass.'" />'."\0");
fwrite($sock, '<bye id="A003" />'."\0");
//example responses
// <session id="A001" urlID="4815-vN2Txjkggy7gjHRD10jw" userName="user@example.com"/>\0
// <response id="A001"/>\0
// <response id="A002"/>\0
// <response id="A003"/>\0
// or an error:
// <response id="A001" errorText="incorrect password or account name" errorNum="515"/>\0
$responseblob = '';
while (!feof($sock)) {
$responseblob .= fgets($sock, 1024);
}
fclose($sock);
foreach (explode( "\0", $responseblob) as $response) {
$resp = simplexml_load_string("<xml>".$response."</xml>");
$id = $resp && !empty($resp->response[0]['id']) ? $resp->response[0]['id'] : null;
if ($id == 'A001') {
if (isset($resp->response[0]['errorNum'])) {
return PASSWORD_CONNECT_ERROR;
}
}
else if ($id == 'A002') {
if (isset($resp->response[0]['errorNum'])) {
return PASSWORD_ERROR;
}
}
else if ($id == 'A003') {
if (isset($resp->response[0]['errorNum'])) {
// There was a problem during logout (This is probably harmless)
}
}
}
return PASSWORD_SUCCESS;
}
}
@@ -0,0 +1,123 @@
<?php
/**
* XMail Password Driver
*
* Driver for XMail password
*
* @version 2.0
* @author Helio Cavichiolo Jr <helio@hcsistemas.com.br>
*
* Setup xmail_host, xmail_user, xmail_pass and xmail_port into
* config.inc.php of password plugin as follows:
*
* $config['xmail_host'] = 'localhost';
* $config['xmail_user'] = 'YourXmailControlUser';
* $config['xmail_pass'] = 'YourXmailControlPass';
* $config['xmail_port'] = 6017;
*
* Copyright (C) The Roundcube Dev Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
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()) {
rcube::raise_error([
'code' => 600,
'file' => __FILE__,
'line' => __LINE__,
'message' => "Password plugin: Unable to connect to mail server"
], true, false
);
return PASSWORD_CONNECT_ERROR;
}
if (!$xmail->send("userpasswd\t".$domain."\t".$user."\t".$newpass."\n")) {
$xmail->close();
rcube::raise_error([
'code' => 600,
'file' => __FILE__,
'line' => __LINE__,
'message' => "Password plugin: Unable to change password"
], true, false
);
return PASSWORD_ERROR;
}
$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(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(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);
}
}
@@ -0,0 +1,66 @@
<?php
/**
* Zxcvb Password Strength Driver
*
* Driver to check password strength using Zxcvbn-PHP
*
* @version 0.1
* @author Philip Weir
*
* Copyright (C) Philip Weir
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see http://www.gnu.org/licenses/.
*/
class rcube_zxcvbn_password
{
function strength_rules()
{
$rcmail = rcmail::get_instance();
$rules = [
$rcmail->gettext('password.passwordnoseq'),
$rcmail->gettext('password.passwordnocommon'),
];
return $rules;
}
/**
* Password strength check
*
* @param string $passwd Password
*
* @return array Score (1 to 5) and Reason
*/
function check_strength($passwd)
{
if (!class_exists('ZxcvbnPhp\Zxcvbn')) {
rcube::raise_error([
'code' => 600,
'file' => __FILE__,
'line' => __LINE__,
'message' => "Password plugin: Zxcvbn library not found."
], true, false
);
return;
}
$zxcvbn = new ZxcvbnPhp\Zxcvbn();
$strength = $zxcvbn->passwordStrength($passwd);
return [$strength['score'] + 1, $strength['feedback']['warning']];
}
}
@@ -0,0 +1,87 @@
#!/usr/bin/perl
=pod
Script to change the LDAP password using the set_password method
to proper setting the password policy attributes
author: Zbigniew Szmyd (zbigniew.szmyd@linseco.pl)
version 1.0 2016-02-22
=cut
use Net::LDAP;
use Net::LDAP::Extension::SetPassword;
use URI;
use utf8;
binmode(STDOUT, ':utf8');
my %PAR = ();
if (my $param = shift @ARGV){
print "Password change in LDAP\n\n";
print "Run script without any parameter and pass the following data:\n";
print "URI\nbaseDN\nFilter\nbindDN\nbindPW\nLogin\nuserPass\nnewPass\nCAfile\n";
exit;
}
foreach my $param ('uri','base','filter','binddn','bindpw','user','pass','new_pass','ca'){
$PAR{$param} = <>;
$PAR{$param} =~ s/\r|\n//g;
}
my @servers = split (/\s+/, $PAR{'uri'});
my $active_server = 0;
my $ldap;
while ((my $server = shift @servers) && !($active_server)) {
my $ldap_uri = URI->new($server);
if ($ldap_uri->secure) {
$ldap = Net::LDAP->new($ldap_uri->as_string,
version => 3,
verify => 'require',
sslversion => 'tlsv1',
cafile => $PAR{'ca'});
} else {
$ldap = Net::LDAP->new($ldap_uri->as_string, version => 3);
}
$active_server = 1 if ($ldap);
}
if ($active_server) {
my $mesg = $ldap->bind($PAR{'binddn'}, password => $PAR{'bindpw'});
if ($mesg->code != 0) {
print "Cannot login: ". $mesg->error;
} else {
# Wyszukanie users wg filtra
$PAR{'filter'} =~ s/\%login/$PAR{'user'}/;
my @search_args = (
base => $PAR{'base'},
scope => 'sub',
filter => $PAR{'filter'},
attrs => ['1.1'],
);
my $result = $ldap->search(@search_args);
if ($result->code) {
print $result->error;
} else {
my $count = $result->count;
if ($count == 1) {
my @users = $result->entries;
my $dn = $users[0]->dn();
$result = $ldap->bind($dn, password => $PAR{'pass'});
if ($result->code){
print $result->error;
} else {
$result = $ldap->set_password(newpasswd => $PAR{'new_pass'});
if ($result->code) {
print $result->error;
} else {
print "OK";
}
}
} else {
print "User not found in LDAP\n" if $count == 0;
print "Found $count users\n";
}
}
}
$ldap->unbind();
} else {
print "Cannot connect to any server";
}
@@ -0,0 +1,29 @@
#include <stdio.h>
#include <unistd.h>
// set the UID this script will run as (root user)
#define UID 0
#define CMD "/usr/sbin/dbmail-users"
/* INSTALLING:
gcc -o chgdbmailusers chgdbmailusers.c
chown root.apache chgdbmailusers
strip chgdbmailusers
chmod 4550 chgdbmailusers
*/
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;
}
@@ -0,0 +1,29 @@
#include <stdio.h>
#include <unistd.h>
// 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;
}
@@ -0,0 +1,28 @@
#include <stdio.h>
#include <unistd.h>
// 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;
}
@@ -0,0 +1,32 @@
#!/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:
sys.exit('Malformed input')
try:
user = pwd.getpwnam(username)
except KeyError:
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, universal_newlines = True)
handle.communicate('%s:%s' % (username, password))
sys.exit(handle.returncode)
@@ -0,0 +1,267 @@
#
# 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 <gaudenz@soziologie.ch>
# 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 logging 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.*\n(RSA|ECDSA) 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 successfully
expect {
eof {close $err
exit 0}
}
close $err
@@ -0,0 +1,36 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'تغيير كلمة المرور';
$labels['curpasswd'] = 'كلمة المرور الحالية:';
$labels['newpasswd'] = 'كلمة المرور الجديدة:';
$labels['confpasswd'] = 'تأكيد كلمة المرور الجديدة:';
$messages['nopassword'] = 'من فضلك أدخل كلمة المرور الجديدة.';
$messages['nocurpassword'] = 'من فضلك أدخل كلمة المرور الحالية.';
$messages['passwordincorrect'] = 'كلمة المرور الحالية غير صحيحة.';
$messages['passwordinconsistency'] = 'كلمة المرور غير مطابقة حاول مجددا';
$messages['crypterror'] = 'تعذر حفظ كلمة المرور الجديدة. وظيفة التشفير مفقودة.';
$messages['connecterror'] = 'تعذر حفظ كلمة المرور الجديدة. خطأ بالإتصال.';
$messages['internalerror'] = 'تعذر حفظ كلمة المرور الجديدة.';
$messages['passwordshort'] = 'كلمة المرور يجب على الأقل $length أحرف';
$messages['passwordweak'] = ' كلمة المرور يجب أن تتضمن رقم واحد على الأقل وحرف ترقيم واحد.';
$messages['passwordforbidden'] = 'كلمة المرور تحتوى على أحرف ممنوعة';
$messages['firstloginchange'] = 'لقد تم تسجيل دخولك لأول مرة، يُرجى تغيير كلمتك السرية.';
$messages['passwinhistory'] = 'لقد قُمت باستخدام هذه الكلمة السرية مِن قبل.';
$messages['samepasswd'] = 'يجب أن تكون كلمة السر الجديدة لا تُشابِه الكلمة القديمة.';
$messages['passwdexpirewarning'] = 'تنبيه ! إنّ مدة صلاحية كلمتك السرية سوف تنقضي قريبا، يُرجى تغييرها قبل $expirationdatetime.';
$messages['passwdexpired'] = 'لقد إنتهت مدة صلاحية كلمتك السرية، يجب عليك تغييرها الآن !';
$messages['passwdconstraintviolation'] = 'تحتوي كلمة المرور على خروقات. ربما كلمة المرور ضعيفة جدا.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'تغيير كلمة المرور';
$labels['curpasswd'] = 'كلمة المرور الحالية';
$labels['newpasswd'] = 'كلمة المرور الجديدة';
$labels['confpasswd'] = 'تأكيد كلمة المرور الجديدة';
$messages['nopassword'] = 'من فضلك أدخل كلمة مرور جديدة';
$messages['nocurpassword'] = 'من فضلك أدخل كلمة المرور الحالية';
$messages['passwordincorrect'] = 'كلمة المرور الحالية غير صحيحة';
$messages['passwordinconsistency'] = 'كلمة المرور غير مطابقة, أعد المحاولة';
$messages['crypterror'] = 'تعذر حفظ كلمة المرور الجديدة. دالة التشفير مفقودة.';
$messages['connecterror'] = 'تعذر حفظ كلمة المرور الجديدة. خطأ في الإتصال';
$messages['internalerror'] = 'تعذر حفظ كلمة المرور الجديدة';
$messages['passwordshort'] = 'كلمة المرور يجب ان تحتوي على الاقل $length احرف.';
$messages['passwordweak'] = 'كلمة المرور يجب ان تتضمن على الاقل رقم و علامة ترميز.';
$messages['passwordtooweak'] = 'كلمة المرور ضعيفة';
$messages['passwordnoseq'] = 'يجب ألا تكون كلمة المرور تسلسلًا مثل 123456 أو QWERTY.';
$messages['passwordnocommon'] = 'يجب ألا تكون كلمة المرور كلمة أو اسمًا شائعًا.';
$messages['passwordforbidden'] = 'كلمة المرور تحتوي حروفاً ممنوعة';
$messages['firstloginchange'] = 'هذا هو تسجيل الدخول الأول الخاص بك. الرجاء تغيير كلمة المرور الخاصة بك.';
$messages['disablednotice'] = 'النظام قيد الصيانة حاليًا ولا يمكن تغيير كلمة المرور في الوقت الحالي. يجب أن يعود كل شيء إلى طبيعته قريبًا. نحن نعتذر عن أي شيء غير مناسب.';
$messages['passwinhistory'] = 'سبق استخدام كلمة المرور هذه من قبل.';
$messages['samepasswd'] = 'يجب أن تكون كلمة المرور الجديدة مختلفة عن القديمة.';
$messages['passwdexpirewarning'] = 'تحذير! ستنتهي صلاحية كلمة مرورك قريبًا ، قم بتغييرها قبل $expirationdatetime .';
$messages['passwdexpired'] = 'لقد انتهت صلاحية كلمة المرور الخاصة بك ، يجب عليك تغييرها الآن!';
$messages['passwdconstraintviolation'] = 'انتهاك قيود كلمة المرور. ربما تكون كلمة المرور ضعيفة للغاية.';
$messages['pwned_mustnotbedisclosed'] = 'يجب ألا تكون كلمة المرور &nbsp; <a href="https://haveibeenpwned.com/Passwords" target="_blank">معروفة بشكل عام</a>.';
$messages['pwned_isdisclosed'] = 'كلمة المرور هذه معروفة بشكل عام.';
$messages['pwned_fetcherror'] = 'فشل التحقق من قوة كلمة المرور.';
@@ -0,0 +1,30 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['curpasswd'] = 'Contraseña actual:';
$labels['newpasswd'] = 'Contraseña nueva:';
$labels['confpasswd'] = 'Confirmar contraseña:';
$messages['nopassword'] = 'Por favor, introduz una contraseña nueva.';
$messages['nocurpassword'] = 'Por favor, introduz la contraseña actual.';
$messages['passwordincorrect'] = 'La contraseña actual ye incorreuta.';
$messages['passwordinconsistency'] = 'Les contraseñes nun concasen. Por favor, inténtalo otra vegada.';
$messages['crypterror'] = 'Nun pudo guardase la contraseña nueva. Falta la función de cifráu.';
$messages['connecterror'] = 'Nun pudo guardase la contraseña nueva. Fallu de conexón.';
$messages['internalerror'] = 'Nun pudo guardase la contraseña nueva. ';
$messages['passwordshort'] = 'La contraseña tien de tener polo menos $length caráuteres.';
$messages['passwordweak'] = 'La contraseña tien de tener polo menos un númberu y un signu de puntuación.';
$messages['passwordforbidden'] = 'La contraseña contien caráuteres prohibíos.';
$messages['firstloginchange'] = 'Esti ye\'l to primer aniciu sesión. Por favor, camuda la to contraseña.';
@@ -0,0 +1,29 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['curpasswd'] = 'Hal-hazırki şifrə:';
$labels['newpasswd'] = 'Yeni şifrə:';
$labels['confpasswd'] = 'Yeni şifrə: (təkrar)';
$messages['nopassword'] = 'Yeni şifrəni daxil edin.';
$messages['nocurpassword'] = 'Hal-hazırda istifadə etdiyiniz şifrəni daxil edin.';
$messages['passwordincorrect'] = 'Yalnış şifrə daxil etdiniz.';
$messages['passwordinconsistency'] = 'Yeni daxil etdiyiniz şifrələr bir-birinə uyğun deyildir.';
$messages['crypterror'] = 'Yeni şifrənin saxlanılması mümkün olmadı. Şifrələmə metodu tapılmadı.';
$messages['connecterror'] = 'Yeni şifrənin saxlanılması mümkün olmadı. Qoşulma səhvi.';
$messages['internalerror'] = 'Yeni şifrənin saxlanılması mümkün olmadı.';
$messages['passwordshort'] = 'Yeni şifrə $length simvoldan uzun olmalıdır.';
$messages['passwordweak'] = 'Şifrədə heç olmasa minimum bir rəqəm və simvol olmalıdır.';
$messages['passwordforbidden'] = 'Şifrədə icazə verilməyən simvollar vardır.';
@@ -0,0 +1,31 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Змяніць пароль';
$labels['curpasswd'] = 'Бягучы пароль:';
$labels['newpasswd'] = 'Новы пароль:';
$labels['confpasswd'] = 'Паўтарыце новы пароль:';
$messages['nopassword'] = 'Увядзіце новы пароль.';
$messages['nocurpassword'] = 'Увядзіце бягучы пароль.';
$messages['passwordincorrect'] = 'Няслушны бягучы пароль.';
$messages['passwordinconsistency'] = 'Паролі не супадаюць. Паспрабуйце яшчэ раз.';
$messages['crypterror'] = 'Не ўдалося захаваць новы пароль. Бракуе функцыі шыфравання.';
$messages['connecterror'] = 'Не ўдалося захаваць новы пароль. Памылка злучэння.';
$messages['internalerror'] = 'Не ўдалося захаваць новы пароль.';
$messages['passwordshort'] = 'Пароль мусіць быць мінімум $length знакаў.';
$messages['passwordweak'] = 'Пароль мусіць утрымліваць мінімум адну лічбу і адзін знак пунктуацыі.';
$messages['passwordforbidden'] = 'Пароль утрымлівае забароненыя знакі.';
$messages['firstloginchange'] = 'Гэта ваш першы ўваход. Трэба змяніць пароль.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Промяна на парола';
$labels['curpasswd'] = 'Текуща парола:';
$labels['newpasswd'] = 'Нова парола:';
$labels['confpasswd'] = 'Повторно нова парола:';
$messages['nopassword'] = 'Моля въведете нова парола.';
$messages['nocurpassword'] = 'Моля въведете текущата парола.';
$messages['passwordincorrect'] = 'Невалидна текуща парола.';
$messages['passwordinconsistency'] = 'Паролите не съвпадат, опитайте отново.';
$messages['crypterror'] = 'Невъзможна промяна на паролата. Липсва PHP функция за криптиране.';
$messages['connecterror'] = 'Невъзможна промяна на паролата. Грешка при свързване със сървър.';
$messages['internalerror'] = 'Паролата не може да бъде променена.';
$messages['passwordshort'] = 'Паролата трябва да е дълга поне $length знака.';
$messages['passwordweak'] = 'Паролата трябва да включва поне една цифра и един препинателен знак.';
$messages['passwordtooweak'] = 'Паролата е твърде лесна.';
$messages['passwordnoseq'] = 'Паролата не трябва да бъде последователност като 123456 или QWERTY.';
$messages['passwordnocommon'] = 'Паролата не трябва да е често срещна дума или име.';
$messages['passwordforbidden'] = 'Паролата съдържа непозволени символи.';
$messages['firstloginchange'] = 'Влизате за първи път. Моля променете Вашата парола.';
$messages['disablednotice'] = 'Системата е в режим на поддръжка и не е възможна промяна на паролата. Всичко би трябвало да се нормализира съвсем скоро. Извиняваме са за причиненото неудобство.';
$messages['passwinhistory'] = 'Тази парола вече е била използвана.';
$messages['samepasswd'] = 'Новата парола трябва да е различна от старата парола.';
$messages['passwdexpirewarning'] = 'Внимание! Срокът на Вашата парола изтича съвсем скоро и е препоръчително да я смените преди $expirationdatetime.';
$messages['passwdexpired'] = 'Срокът на Вашата парола е изтекъл и трябва да я смените точно сега!';
$messages['passwdconstraintviolation'] = 'Нарушение на изискване за паролата. Вероятно паролата е твърде лесна.';
$messages['pwned_mustnotbedisclosed'] = 'Паролата не трябва да бъде <a href="$href" target="_blank">общоизвестна</a>.';
$messages['pwned_isdisclosed'] = 'Тази парола е общоизвестна.';
$messages['pwned_fetcherror'] = 'Неуспешна проверка на силата на паролата.';
@@ -0,0 +1,32 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Kemmañ ar ger-tremen';
$labels['curpasswd'] = 'Ger-tremen bremañ :';
$labels['newpasswd'] = 'Ger-tremen nevez :';
$labels['confpasswd'] = 'Kadarnaat ar ger-tremen :';
$messages['nopassword'] = 'Roit ur ger-tremen nevez, mar plij.';
$messages['nocurpassword'] = 'Roit ar ger-tremen red, mar plij.';
$messages['passwordincorrect'] = 'Direizh eo ar ger-tremen red.';
$messages['passwordinconsistency'] = 'Ar gerioù-tremen ne glotont ket an eil gant eben, roit anezhe en-dro.';
$messages['crypterror'] = 'N\'haller ket enrollañ ar ger-tremen nevez. Arc\'hwel enrinegañ o vank.';
$messages['connecterror'] = 'N\'haller ket enrollañ ar ger-tremen nevez. Fazi gant ar c\'hennask.';
$messages['internalerror'] = 'N\'haller ket enrollañ ar ger-tremen nevez.';
$messages['passwordshort'] = 'Ret eo d\'ar ger-tremen bezañ hiroc\'h eget $length arouezenn.';
$messages['passwordweak'] = 'En ho ker-tremen e tle bezañ ur sifr hag un arouezenn boentaouiñ da nebeutañ';
$messages['passwordforbidden'] = 'Arouezennoù difennet zo er ger-tremen.';
$messages['firstloginchange'] = 'Emaoc\'h o kennaskañ evit ar wezh kentañ. Kemmit ho ker-tremen mar plij.';
$messages['disablednotice'] = 'War drezalc\'h eo ar reizhiad evit ar mare ha n\'haller ket kemmañ gerioù-tremen. Pep tra a rankfe distreiñ d\'e stad orin a-benn nebeud. Digarezit ac\'hanomp.';
@@ -0,0 +1,31 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Promijeni šifru';
$labels['curpasswd'] = 'Trenutna šifra:';
$labels['newpasswd'] = 'Nova šifra:';
$labels['confpasswd'] = 'Potvrdite novu šifru:';
$messages['nopassword'] = 'Molimo vas da upišete novu šifru.';
$messages['nocurpassword'] = 'Molimo vas da upišete trenutnu šifru.';
$messages['passwordincorrect'] = 'Trenutna šifra je netačna.';
$messages['passwordinconsistency'] = 'Šifre se ne podudaraju, molimo vas da pokušate ponovo.';
$messages['crypterror'] = 'Nije moguće sačuvati šifre. Nedostaje funkcija za enkripciju.';
$messages['connecterror'] = 'Nije moguće sačuvati šifre. Greška u povezivanju.';
$messages['internalerror'] = 'Nije moguće sačuvati novu šifru.';
$messages['passwordshort'] = 'Šifra mora sadržavati barem $length znakova.';
$messages['passwordweak'] = 'Šifra mora imati barem jedan broj i jedan interpunkcijski znak.';
$messages['passwordforbidden'] = 'Šifra sadrži nedozvoljene znakove.';
$messages['firstloginchange'] = 'Ovo je vaša prva prijava. Molimo vas da promijenite vašu šifru.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Canvia la contrasenya';
$labels['curpasswd'] = 'Contrasenya actual:';
$labels['newpasswd'] = 'Nova contrasenya:';
$labels['confpasswd'] = 'Confirmeu la nova contrasenya:';
$messages['nopassword'] = 'Si us plau, introduïu la nova contrasenya.';
$messages['nocurpassword'] = 'Si us plau, introduïu la contrasenya actual.';
$messages['passwordincorrect'] = 'Contrasenya actual incorrecta.';
$messages['passwordinconsistency'] = 'La contrasenya nova no coincideix, torneu-ho a provar.';
$messages['crypterror'] = 'No s\'ha pogut desar la nova contrasenya. No existeix la funció d\'encriptació.';
$messages['connecterror'] = 'No s\'ha pogut desar la nova contrasenya. Error de connexió.';
$messages['internalerror'] = 'No s\'ha pogut desar la nova contrasenya.';
$messages['passwordshort'] = 'La nova contrasenya ha de tenir com a mínim $length caràcters.';
$messages['passwordweak'] = 'La nova contrasenya ha d\'incloure com a mínim un nombre i un caràcter de puntuació.';
$messages['passwordtooweak'] = 'La contrasenya és massa feble.';
$messages['passwordnoseq'] = 'La contrasenya no hauria de ser una seqüència com ara 123456 o QWERTY.';
$messages['passwordnocommon'] = 'La contrasenya no hauria de ser una paraula o un nom comú.';
$messages['passwordforbidden'] = 'La contrasenya conté caràcters no permesos.';
$messages['firstloginchange'] = 'Aquest és el vostre primer accés. Si us plau, canvieu-vos la contrasenya.';
$messages['disablednotice'] = 'El sistema és actualment sota manteniment i els canvis de contrasenya no són permesos en aquest moment. En breu tot tornarà a la normalitat. Us demanem disculpes pels inconvenients.';
$messages['passwinhistory'] = 'Aquesta contrasenya ja es va fer servir anteriorment.';
$messages['samepasswd'] = 'La nova contrasenya ha de ser diferent de l\'antiga.';
$messages['passwdexpirewarning'] = 'Compte!, la vostra contrasenya caducarà aviat. Canvieu-la abans de $expirationdatetime.';
$messages['passwdexpired'] = 'La vostra contrasenya ha caducat, l\'heu de canviar ara!';
$messages['passwdconstraintviolation'] = 'Violació de restricció de les contrasenyes. La contrasenya és probablement massa feble.';
$messages['pwned_mustnotbedisclosed'] = 'La contrasenya no pot ser&nbsp;<a href="$href" target="_blank">habitualment coneguda</a>.';
$messages['pwned_isdisclosed'] = 'Aquesta contrasenya és coneguda habitualment.';
$messages['pwned_fetcherror'] = 'No s\'ha pogut verificar la fortalesa de la contrasenya.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Změna hesla';
$labels['curpasswd'] = 'Aktuální heslo:';
$labels['newpasswd'] = 'Nové heslo:';
$labels['confpasswd'] = 'Nové heslo (pro kontrolu):';
$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 interpunkční znaménko.';
$messages['passwordtooweak'] = 'Heslo je příliš slabé.';
$messages['passwordnoseq'] = 'Heslo by nemělo být tvořeno posloupností znaků typu 123456 nebo QWERTY. ';
$messages['passwordnocommon'] = 'Heslo by nemělo být tvořeno běžným slovem či jménem.';
$messages['passwordforbidden'] = 'Heslo obsahuje nepovolené znaky.';
$messages['firstloginchange'] = 'Vaše první přihlášení, změňte si prosím heslo.';
$messages['disablednotice'] = 'Z důvodu údržby systému není momentálně možné změnit heslo. Za chvíli by mělo být vše v pořádku, omlouváme se za tuto nepříjemnost.';
$messages['passwinhistory'] = 'Toto heslo již bylo v minulosti použito.';
$messages['samepasswd'] = 'Nové heslo musí být odlišné od předchozího.';
$messages['passwdexpirewarning'] = 'Varování! Vaše heslo bude brzy zneplatněno, změňte ho před $expirationdatetime.';
$messages['passwdexpired'] = 'Vaše heslo bylo zneplatněno, musíte ho nyní změnit!';
$messages['passwdconstraintviolation'] = ' Nesplnění nutných pravidel pro heslo. Heslo je zrejmě příliš slabé.';
$messages['pwned_mustnotbedisclosed'] = 'Heslo nesmí být <a href="$href" target="_blank">běžně užívané</a>.';
$messages['pwned_isdisclosed'] = 'Heslo je běžně užívané.';
$messages['pwned_fetcherror'] = 'Síla hesla se nedá ověřit.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Newid cyfrinair';
$labels['curpasswd'] = 'Cyfrinair Presennol:';
$labels['newpasswd'] = 'Cyfrinair Newydd:';
$labels['confpasswd'] = 'Cadarnhau Cyfrinair Newydd:';
$messages['nopassword'] = 'Rhowch eich cyfrinair newydd.';
$messages['nocurpassword'] = 'Rhowch eich cyfrinair presennol.';
$messages['passwordincorrect'] = 'Roedd y cyfrinair presennol yn anghywir.';
$messages['passwordinconsistency'] = 'Nid yw\'r cyfrineiriau yn cymharu, ceisiwch eto.';
$messages['crypterror'] = 'Methwyd cadw\'r cyfrinair newydd. Ffwythiant amgodi ar goll.';
$messages['connecterror'] = 'Methwyd cadw\'r cyfrinair newydd. Gwall cysylltiad.';
$messages['internalerror'] = 'Methwyd cadw\'r cyfrinair newydd.';
$messages['passwordshort'] = 'Rhaid i\'r cyfrinair fod o leia $length llythyren o hyd.';
$messages['passwordweak'] = 'Rhaid i\'r cyfrinair gynnwys o leia un rhif a un cymeriad atalnodi.';
$messages['passwordtooweak'] = 'Mae\'r cyfrinair yn rhy wan.';
$messages['passwordnoseq'] = 'Ni ddylai\'r cyfrinair fod yn ddilyniant fel 123456 neu QWERTY.';
$messages['passwordnocommon'] = 'Ni ddylai\'r cyfrinair fod yn air cyffredin neu enw.';
$messages['passwordforbidden'] = 'Mae\'r cyfrinair yn cynnwys llythrennau wedi gwahardd.';
$messages['firstloginchange'] = 'Dyma eich mewngofnodiad cynta. Newidiwch eich cyfrinair.';
$messages['disablednotice'] = 'Mae gwaith cynnal a chadw ar y system ar hyn o bryd a nid yw\'n bosib newid y cyfrinair ar hyn o bryd. Fe ddylai fod popeth nol i\'r arfer yn fuan. Rydym yn ymddiheuro am yr anghyfleustra.';
$messages['passwinhistory'] = 'Defnyddiwyd y cyfrinair hwn o\'r blaen.';
$messages['samepasswd'] = 'Rhaid i\'r cyfrinair newydd fod yn wahanol i\'r hen un.';
$messages['passwdexpirewarning'] = 'Rhybudd! Fe fydd eich cyfrinair yn dod i ben cyn hir, newidiwch e cyn $expirationdatetime.';
$messages['passwdexpired'] = 'Mae\'ch cyfrinair wedi dod i ben, rhaid i chi ei newid nawr!';
$messages['passwdconstraintviolation'] = 'Mae hwn yn torri cyfyngiad cyfrinair. Mae\'n bosib fod y cyfrinair yn rhy wan.';
$messages['pwned_mustnotbedisclosed'] = 'Ni all y cyfrinair fod yn <a href="https://haveibeenpwned.com/Passwords" target="_blank">air adnabyddus</a>.';
$messages['pwned_isdisclosed'] = 'Mae\'r cyfrinair hwn yn air sy\'n hysbys.';
$messages['pwned_fetcherror'] = 'Methwyd gwirio cryfder y cyfrinair.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Ændre adgangskode ';
$labels['curpasswd'] = 'Nuværende adgangskode:';
$labels['newpasswd'] = 'Ny adgangskode:';
$labels['confpasswd'] = 'Bekræft ny adgangskode:';
$messages['nopassword'] = 'Indtast venligst en ny adgangskode.';
$messages['nocurpassword'] = 'Indtast venligst nuværende adgangskode.';
$messages['passwordincorrect'] = 'Nuværende adgangskode er forkert.';
$messages['passwordinconsistency'] = 'Adgangskoderne er ikke ens, prøv igen.';
$messages['crypterror'] = 'Kunne ikke gemme den nye adgangskode. Krypteringsfunktion mangler.';
$messages['connecterror'] = 'Kunne ikke gemme den nye adgangskode. Fejl ved forbindelsen.';
$messages['internalerror'] = 'Kunne ikke gemme den nye adgangskode.';
$messages['passwordshort'] = 'Adgangskoden skal være mindst $length tegn lang.';
$messages['passwordweak'] = 'Adgangskoden skal indeholde mindst et tal og et tegnsætningstegn (-.,)';
$messages['passwordtooweak'] = 'Adgangskoden er for svag';
$messages['passwordnoseq'] = 'Adgangskoden bør ikke være en række som 123456 eller QWERTY.';
$messages['passwordnocommon'] = 'Adgangskoden bør ikke være et almindeligt ord eller navn.';
$messages['passwordforbidden'] = 'Adgangskoden indeholder forbudte tegn.';
$messages['firstloginchange'] = 'Dette er første gang du logger ind, ændre venligst din adgangskode';
$messages['disablednotice'] = 'Systemet vedligeholdes i øjeblikket og det er pt. ikke muligt at skifte kodeord. Alt burde være oppe igen om lidt. Vi beklager ulejligheden. ';
$messages['passwinhistory'] = 'Kodeordet har tidligere været anvendt. ';
$messages['samepasswd'] = 'Det nye kodeord skal være forskelligt fra det gamle. ';
$messages['passwdexpirewarning'] = 'Advarsel, Dit kodeord udløber snart. Du skal ændre det før $expirationdatetime.';
$messages['passwdexpired'] = 'Dit kodeord er udløbet, du skal ændre det nu!';
$messages['passwdconstraintviolation'] = 'Password er i strid med reglerne. Det er sikkert for svagt.';
$messages['pwned_mustnotbedisclosed'] = 'Adgangskoden må ikke være <a href="$href" target="_blank">almindeligt brugt</a>.';
$messages['pwned_isdisclosed'] = 'Denne adgangskode er almindeligt brugt.';
$messages['pwned_fetcherror'] = 'Kunne ikke bekræfte adgangskodens styrken.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Passwort ändern';
$labels['curpasswd'] = 'Aktuelles Passwort';
$labels['newpasswd'] = 'Neues Passwort';
$labels['confpasswd'] = 'Passwort Wiederholung';
$messages['nopassword'] = 'Bitte geben Sie ein neues Passwort ein';
$messages['nocurpassword'] = 'Bitte geben Sie Ihr aktuelles Passwort an';
$messages['passwordincorrect'] = 'Das aktuelle Passwort ist nicht korrekt';
$messages['passwordinconsistency'] = 'Das neue Passwort und dessen Wiederholung stimmen nicht überein';
$messages['crypterror'] = 'Neues Passwort nicht gespeichert: Verschlüsselungsfunktion fehlt';
$messages['connecterror'] = 'Neues Passwort nicht gespeichert: Verbindungsfehler';
$messages['internalerror'] = 'Neues Passwort nicht gespeichert';
$messages['passwordshort'] = 'Passwort muss mindestens $length Zeichen lang sein.';
$messages['passwordweak'] = 'Passwort muss mindestens eine Zahl und ein Sonderzeichen enthalten.';
$messages['passwordtooweak'] = 'Das Passwort ist zu schwach.';
$messages['passwordnoseq'] = 'Das Passwort sollte keine Sequenz wie 123456 oder QWERTZ sein.';
$messages['passwordnocommon'] = 'Passwort sollte kein allgemeines Wort oder Name sein.';
$messages['passwordforbidden'] = 'Passwort enthält unzulässige Zeichen.';
$messages['firstloginchange'] = 'Dies ist Ihre erste Anmeldung. Bitte ändern Sie Ihr Passwort.';
$messages['disablednotice'] = 'Das System befindet sich derzeit im Wartungszustand und eine Passwortänderung ist im Moment nicht möglich. Der normale Betrieb sollte bald wieder hergestellt sein. Wir bitten um Entschuldigung für die Unannehmlichkeiten.';
$messages['passwinhistory'] = 'Dieses Passwort wurde bereits einmal verwendet.';
$messages['samepasswd'] = 'Das neue Passwort muss sich von dem Alten unterscheiden.';
$messages['passwdexpirewarning'] = 'Achtung! Ihr Passwort läuft am $expirationdatetime ab. Ändern Sie es rechtzeitig.';
$messages['passwdexpired'] = 'Ihr Passwort ist abgelaufen, bitte ändern Sie es jetzt!';
$messages['passwdconstraintviolation'] = 'Passwortrichtlinien nicht erfüllt. Das Passwort ist wahrscheinlich zu schwach.';
$messages['pwned_mustnotbedisclosed'] = 'Das Passwort darf nicht <a href="$href" target="_blank">allgemein bekannt sein</a>.';
$messages['pwned_isdisclosed'] = 'Dieses Passwort ist allgemein bekannt.';
$messages['pwned_fetcherror'] = 'Die Überprüfung der Passwortstärke ist fehlgeschlagen.';
@@ -0,0 +1,42 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Passwort ändern';
$labels['curpasswd'] = 'Aktuelles Passwort:';
$labels['newpasswd'] = 'Neues Passwort:';
$labels['confpasswd'] = 'Neues Passwort bestätigen:';
$messages['nopassword'] = 'Bitte geben Sie ein neues Passwort ein.';
$messages['nocurpassword'] = 'Bitte geben Sie Ihr aktuelles Passwort ein.';
$messages['passwordincorrect'] = 'Aktuelles Passwort ist falsch.';
$messages['passwordinconsistency'] = 'Passwörter stimmen nicht überein, bitte versuchen Sie es erneut.';
$messages['crypterror'] = 'Neues Passwort konnte nicht gespeichert werden. Verschlüsselungsfunktion fehlt.';
$messages['connecterror'] = 'Neues Passwort konnte nicht gespeichert werden. Verbindungsfehler.';
$messages['internalerror'] = 'Neues Passwort konnte nicht gespeichert werden.';
$messages['passwordshort'] = 'Passwort muss mindestens $length Zeichen lang sein.';
$messages['passwordweak'] = 'Passwort muss mindestens eine Zahl und ein Sonderzeichen enthalten.';
$messages['passwordtooweak'] = 'Das Passwort ist zu schwach.';
$messages['passwordnoseq'] = 'Das Passwort sollte keine Sequenz wie 123456 oder QWERTY sein.';
$messages['passwordnocommon'] = 'Passwort sollte kein allgemeines Wort oder Name sein.';
$messages['passwordforbidden'] = 'Passwort enthält unzulässige Zeichen.';
$messages['firstloginchange'] = 'Das ist Ihre erste Anmeldung. Bitte ändern Sie Ihr Passwort.';
$messages['disablednotice'] = 'Das System befindet sich derzeit im Wartungszustand und eine Passwortänderung ist im Moment nicht möglich. Alles sollte bald wieder normal sein. Wir bitten um Entschuldigung für die Unannehmlichkeiten.';
$messages['passwinhistory'] = 'Dieses Passwort wurde bereits zu einem früheren Zeitpunkt verwendet.';
$messages['samepasswd'] = 'Das neue Passwort muss sich von dem Alten unterscheiden.';
$messages['passwdexpirewarning'] = 'Achtung! Ihr Passwort läuft am $expirationdatetime ab. Ändern Sie es rechtzeitig.';
$messages['passwdexpired'] = 'Ihr Passwort ist abgelaufen, ändern Sie es jetzt!';
$messages['passwdconstraintviolation'] = 'Passwortbeschränkungsverletzung. Passwort wahrscheinlich zu schwach.';
$messages['pwned_isdisclosed'] = 'Dieses Passwort ist allgemein bekannt.';
$messages['pwned_fetcherror'] = 'Die Überprüfung der Passwortstärke ist fehlgeschlagen.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Αλλαγή κωδικού';
$labels['curpasswd'] = 'Τρέχων κωδικός πρόσβασης:';
$labels['newpasswd'] = 'Νέος κωδικός πρόσβασης:';
$labels['confpasswd'] = 'Επιβέβαιωση κωδικού πρόσβασης:';
$messages['nopassword'] = 'Εισάγετε ένα νέο κωδικό.';
$messages['nocurpassword'] = 'Εισάγετε τον τρέχοντα κωδικό σας.';
$messages['passwordincorrect'] = 'Ο τρέχων κωδικός είναι λάθος.';
$messages['passwordinconsistency'] = 'Οι κωδικοί πρόσβασης δεν ταιριάζουν, προσπαθήστε ξανά.';
$messages['crypterror'] = 'Δεν μπόρεσε να αποθηκευτεί ο νέος κωδικός πρόσβασης. Η λειτουργία κρυπτογράφησης λείπει.';
$messages['connecterror'] = 'Δεν μπορεσε να αποθηκευτεί ο νέος κωδικός πρόσβασης. Σφάλμα σύνδεσης.';
$messages['internalerror'] = 'Δεν μπορεσε να αποθηκευτεί ο νέος κωδικός πρόσβασης. ';
$messages['passwordshort'] = 'Ο κωδικός πρόσβασης πρέπει να είναι τουλάχιστον $length χαρακτήρων.';
$messages['passwordweak'] = 'Ο κωδικός πρόσβασης πρέπει να περιλαμβάνει τουλάχιστον έναν αριθμό και ένα σημείο στίξης. ';
$messages['passwordtooweak'] = 'Το συνθηματικό είναι πολύ ασθενές.';
$messages['passwordnoseq'] = 'Το συνθηματικό δεν πρέπει να είναι μια ακολουθία όπως 123456 ή QWERTY.';
$messages['passwordnocommon'] = 'Το συνθηματικό δεν πρέπει να είναι μια κοινή λέξη ή όνομα.';
$messages['passwordforbidden'] = 'Ο κωδικός πρόσβασης περιέχει μη επιτρεπτούς χαρακτήρες. ';
$messages['firstloginchange'] = 'Αυτή είναι η πρώτη σας είσοδος. Παρακαλώ αλλάξτε το συνθηματικό σας.';
$messages['disablednotice'] = 'Το σύστημα βρίσκεται υπό συντήρηση και η αλλαγή του κωδικού πρόσβασης δεν είναι δυνατή αυτή τη στιγμή. Τα πάντα θα πρέπει να επανέλθουν σε κανονική λειτουργία σύντομα. Ζητούμε συγγνώμη για την όποια ταλαιπωρία.';
$messages['passwinhistory'] = 'Αυτό το συνθηματικό έχει ήδη χρησιμοποιηθεί.';
$messages['samepasswd'] = 'Το νέο συνθηματικό πρέπει να είναι διαφορετικό από το παλιό.';
$messages['passwdexpirewarning'] = 'Προσοχή! Το συνθηματικό σας θα λήξει σύντομα, αλλάξτε το πριν από $expirationdatetime.';
$messages['passwdexpired'] = 'Το συνθηματικό σας έληξε, πρέπει να το αλλάξετε τώρα!';
$messages['passwdconstraintviolation'] = 'Παραβίαση περιορισμών συνθηματικού. Το συνθηματικό είναι πιθανώς πολύ ασθενές.';
$messages['pwned_mustnotbedisclosed'] = 'Ο κωδικός πρόσβασης δεν πρέπει να είναι <a href="$href" target="_blank">ευρέως γνωστός</a>.';
$messages['pwned_isdisclosed'] = 'Αυτός ο κωδικός είναι ευρέως γνωστός.';
$messages['pwned_fetcherror'] = 'Αποτυχία επαλήθευσης της δύναμης του κωδικού πρόσβασης.';
@@ -0,0 +1,29 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['curpasswd'] = 'Current Password:';
$labels['newpasswd'] = 'New Password:';
$labels['confpasswd'] = 'Confirm New Password:';
$messages['nopassword'] = 'Please input new password.';
$messages['nocurpassword'] = 'Please input current password.';
$messages['passwordincorrect'] = 'Current password incorrect.';
$messages['passwordinconsistency'] = 'Passwords do not match, please try again.';
$messages['crypterror'] = 'Could not save new password. Encryption function missing.';
$messages['connecterror'] = 'Could not save new password. Connection error.';
$messages['internalerror'] = 'Could not save new password.';
$messages['passwordshort'] = 'Password must be at least $length characters long.';
$messages['passwordweak'] = 'Password must include at least one number and one punctuation character.';
$messages['passwordforbidden'] = 'Password contains forbidden characters.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Change password';
$labels['curpasswd'] = 'Current Password:';
$labels['newpasswd'] = 'New Password:';
$labels['confpasswd'] = 'Confirm New Password:';
$messages['nopassword'] = 'Please enter a new password.';
$messages['nocurpassword'] = 'Please enter the current password.';
$messages['passwordincorrect'] = 'Current password is incorrect.';
$messages['passwordinconsistency'] = 'Passwords do not match. Please try again.';
$messages['crypterror'] = 'New password could not be saved. The encryption function is missing.';
$messages['connecterror'] = 'New password could not be saved. There is a connection error.';
$messages['internalerror'] = 'New password could not be saved.';
$messages['passwordshort'] = 'Password must be at least $length characters long.';
$messages['passwordweak'] = 'Password must include at least one number and one symbol.';
$messages['passwordtooweak'] = 'Password too weak.';
$messages['passwordnoseq'] = 'Password should not be a sequence like 123456 or QWERTY.';
$messages['passwordnocommon'] = 'Password should not be a common word or name.';
$messages['passwordforbidden'] = 'Password contains forbidden characters.';
$messages['firstloginchange'] = 'This is your first login. Please change your password.';
$messages['disablednotice'] = 'The system is currently under maintenance and password change is not possible at the moment. Everything should be back to normal soon. We apologise for any inconvenience.';
$messages['passwinhistory'] = 'This password has already been used previously.';
$messages['samepasswd'] = 'The new password has to be different from the old one.';
$messages['passwdexpirewarning'] = 'Warning! Your password will expire soon, change it before $expirationdatetime.';
$messages['passwdexpired'] = 'Your password has expired, you have to change it now!';
$messages['passwdconstraintviolation'] = 'Password constraint violation. Password probably too weak.';
$messages['pwned_mustnotbedisclosed'] = 'Password must not be <a href="$href" target="_blank">commonly known</a>.';
$messages['pwned_isdisclosed'] = 'This password is commonly known.';
$messages['pwned_fetcherror'] = 'Failed to verify the password strength.';
@@ -0,0 +1,44 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Change password';
$labels['curpasswd'] = 'Current Password:';
$labels['newpasswd'] = 'New Password:';
$labels['confpasswd'] = 'Confirm New Password:';
$messages['nopassword'] = 'Please input new password.';
$messages['nocurpassword'] = 'Please input current password.';
$messages['passwordincorrect'] = 'Current password incorrect.';
$messages['passwordinconsistency'] = 'Passwords do not match, please try again.';
$messages['crypterror'] = 'Could not save new password. Encryption function missing.';
$messages['connecterror'] = 'Could not save new password. Connection error.';
$messages['internalerror'] = 'Could not save new password.';
$messages['passwordshort'] = 'Password must be at least $length characters long.';
$messages['passwordweak'] = 'Password must include at least one number and one punctuation character.';
$messages['passwordtooweak'] = 'Password too weak.';
$messages['passwordnoseq'] = 'Password should not be a sequence like 123456 or QWERTY.';
$messages['passwordnocommon'] = 'Password should not be a common word or name.';
$messages['passwordforbidden'] = 'Password contains forbidden characters.';
$messages['firstloginchange'] = 'This is your first login. Please change your password.';
$messages['disablednotice'] = 'The system is currently under maintenance and password change is not possible at the moment. Everything should be back to normal soon. We apologize for any inconvenience.';
$messages['passwinhistory'] = 'This password has already been used previously.';
$messages['samepasswd'] = 'New password have to be different from the old one.';
$messages['passwdexpirewarning'] = 'Warning! Your password will expire soon, change it before $expirationdatetime.';
$messages['passwdexpired'] = 'Your password has expired, you have to change it now!';
$messages['passwdconstraintviolation'] = 'Password constraint violation. Password probably too weak.';
$messages['pwned_mustnotbedisclosed'] = 'Password must not be <a href="$href" target="_blank">commonly known</a>.';
$messages['pwned_isdisclosed'] = 'This password is commonly known.';
$messages['pwned_fetcherror'] = 'Failed to verify the password strength.';
@@ -0,0 +1,29 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['curpasswd'] = 'Nuna pasvorto:';
$labels['newpasswd'] = 'Nova pasvorto:';
$labels['confpasswd'] = 'Konfirmi novan pasvorton:';
$messages['nopassword'] = 'Bonvole tajpu novan pasvorton.';
$messages['nocurpassword'] = 'Bonvole tajpu nunan pasvorton.';
$messages['passwordincorrect'] = 'Nuna pasvorto nekorekta.';
$messages['passwordinconsistency'] = 'Pasvortoj ne kongruas, bonvole provu denove.';
$messages['crypterror'] = 'Pasvorto ne konserveblas: funkcio de ĉifrado mankas.';
$messages['connecterror'] = 'Pasvorto ne konserveblas: eraro de konekto.';
$messages['internalerror'] = 'Nova pasvorto ne konserveblas.';
$messages['passwordshort'] = 'Pasvorto longu almenaŭ $length signojn.';
$messages['passwordweak'] = 'La pasvorto enhavu almenaŭ unu ciferon kaj unu interpunktan signon.';
$messages['passwordforbidden'] = 'La pasvorto enhavas malpermesitajn signojn.';
@@ -0,0 +1,42 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Cambiar contraseña';
$labels['curpasswd'] = 'Contraseña actual: ';
$labels['newpasswd'] = 'Contraseña nueva:';
$labels['confpasswd'] = 'Confirmar contraseña nueva:';
$messages['nopassword'] = 'Por favor, ingrese la nueva contraseña.';
$messages['nocurpassword'] = 'Por favor, ingrese la contraseña actual.';
$messages['passwordincorrect'] = 'Contraseña actual incorrecta.';
$messages['passwordinconsistency'] = 'Las contraseñas no coinciden, por favor intente nuevamente.';
$messages['crypterror'] = 'No se pudo guardar la nueva contraseña. No se encuentra la función de encriptación.';
$messages['connecterror'] = 'No se pudo guardar la nueva contraseña. Error de conexión.';
$messages['internalerror'] = 'No se pudo guardar la nueva contraseña.';
$messages['passwordshort'] = 'La contraseña debe tener al menos $length carácteres.';
$messages['passwordweak'] = 'La contraseña debe incluir por lo menos un número y un signo de puntuación.';
$messages['passwordtooweak'] = 'La contraseña es muy débil.';
$messages['passwordnoseq'] = 'La contraseña no puede ser una secuencia como 123456 or QWERTY.';
$messages['passwordnocommon'] = 'La contraseña no puede ser una palabra o nombre común.';
$messages['passwordforbidden'] = 'La contraseña contiene carácteres ilegales.';
$messages['firstloginchange'] = 'Esta es la primera vez que ingresa. Por favor cambie su contraseña.';
$messages['disablednotice'] = 'El sistema se encuentra en mantenimiento actualmente y el cambio de contraseña no es posible en este momento. Todo volverá a la normalidad pronto. Lamentamos los inconvenientes.';
$messages['passwinhistory'] = 'La contraseña ya ha sido usada previamente.';
$messages['samepasswd'] = 'La nueva contraseña tiene que ser diferente a la anterior.';
$messages['passwdexpirewarning'] = 'Alerta! Su contraseña expirará pronto, cambiela antes de $expirationdatetime.';
$messages['passwdexpired'] = 'Su contraseña ha expirado, tiene que cambiarla ahora!';
$messages['passwdconstraintviolation'] = 'Violación de restricción de contraseña. Probablemente la contraseña sea demasiado débil.';
$messages['pwned_isdisclosed'] = 'Esta contraseña es comúnmente conocida.';
$messages['pwned_fetcherror'] = 'No se pudo verificar la seguridad de la contraseña.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Cambiar contraseña';
$labels['curpasswd'] = 'Contraseña actual:';
$labels['newpasswd'] = 'Nueva contraseña:';
$labels['confpasswd'] = 'Confirmar contraseña:';
$messages['nopassword'] = 'Por favor ingresá una nueva contraseña.';
$messages['nocurpassword'] = 'Por favor ingresá la contraseña actual.';
$messages['passwordincorrect'] = 'Contraseña actual incorrecta.';
$messages['passwordinconsistency'] = 'Las contraseñas no coinciden, por favor intentalo de nuevo.';
$messages['crypterror'] = 'No se pudo guardar la contraseña nueva. Falta la función de cifrado.';
$messages['connecterror'] = 'No se pudo guardar la contraseña nueva. Error de conexión';
$messages['internalerror'] = 'No se pudo guardar la contraseña nueva.';
$messages['passwordshort'] = 'Tu contraseña debe tener una longitud mínima de $length.';
$messages['passwordweak'] = 'Tu nueva contraseña debe incluir al menos un número y un signo de puntuación.';
$messages['passwordtooweak'] = 'La contraseña es demasiado débil.';
$messages['passwordnoseq'] = 'La contraseña no debe ser una secuencia como 123456 o QWERTY.';
$messages['passwordnocommon'] = 'La contraseña no debe ser ni una palabra común ni un nombre.';
$messages['passwordforbidden'] = 'La contraseña contiene caracteres no válidos.';
$messages['firstloginchange'] = 'Este es tu primer inicio de sesión. Por favor, cambia tu contraseña.';
$messages['disablednotice'] = 'Actualmente el sistema se encuentra en mantenimiento y el cambio de contraseña no es posible en este momento. Todo debería volver a la normalidad pronto. Te pedimos disculpas por el inconveniente.';
$messages['passwinhistory'] = 'La contraseña ya ha sido usada con anterioridad.';
$messages['samepasswd'] = 'La nueva contraseña debe ser diferente de la anterior.';
$messages['passwdexpirewarning'] = '¡Advertencia! Tu contraseña vencerá pronto, cambiala antes del $expirationdatetime.';
$messages['passwdexpired'] = 'Tu contraseña expiró. ¡Tenés que cambiarla ahora!';
$messages['passwdconstraintviolation'] = 'Violación de restricción de contraseña. Probablemente tu contraseña es demasiado débil.';
$messages['pwned_mustnotbedisclosed'] = 'La constraseña no debe ser <a href="$href" target="_blank">comúnmente conocida</a>.';
$messages['pwned_isdisclosed'] = 'La contraseña es comúnmente conocida.';
$messages['pwned_fetcherror'] = 'No se pudo verificar la seguridad de la contraseña.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Cambiar contraseña';
$labels['curpasswd'] = 'Contraseña actual:';
$labels['newpasswd'] = 'Contraseña nueva:';
$labels['confpasswd'] = 'Confirmar contraseña:';
$messages['nopassword'] = 'Por favor, introduzca una contraseña nueva.';
$messages['nocurpassword'] = 'Por favor, introduzca la contraseña actual.';
$messages['passwordincorrect'] = 'La contraseña actual es incorrecta.';
$messages['passwordinconsistency'] = 'Las contraseñas no coinciden. Por favor, inténtelo de nuevo.';
$messages['crypterror'] = 'No se pudo guardar la contraseña nueva. Falta la función de cifrado.';
$messages['connecterror'] = 'No se pudo guardar la contraseña nueva. Error de conexión.';
$messages['internalerror'] = 'No se pudo guardar la contraseña nueva.';
$messages['passwordshort'] = 'La contraseña debe tener al menos $length caracteres.';
$messages['passwordweak'] = 'La contraseña debe incluir al menos un número y un signo de puntuación.';
$messages['passwordtooweak'] = 'La contraseña es demasiado débil.';
$messages['passwordnoseq'] = 'La contraseña no debería ser una secuencia tipo 123456 o QWERTY.';
$messages['passwordnocommon'] = 'La contraseña no debería ser un nombre o palabra común.';
$messages['passwordforbidden'] = 'La contraseña introducida contiene caracteres no permitidos.';
$messages['firstloginchange'] = 'Este es su primer inicio de sesión. Por favor, cambie su contraseña.';
$messages['disablednotice'] = 'El sistema actualmente está en mantenimiento y ahora no se puede cambiar la contraseña. Todo debería volver a la normalidad pronto. Disculpa las molestias.';
$messages['passwinhistory'] = 'Esta contraseña ya se ha usado previamente.';
$messages['samepasswd'] = 'La nueva contraseña tiene que ser diferente a la antigua.';
$messages['passwdexpirewarning'] = '¡ Atención! Su nueva contraseña expirará pronto, cámbiela antes de $expirationdatetime.';
$messages['passwdexpired'] = 'Su contraseña ha expirado, tiene que cambiarla ahora.';
$messages['passwdconstraintviolation'] = 'Violación de restricción de contraseña Contraseña probablemente demasiado débil.';
$messages['pwned_mustnotbedisclosed'] = 'La constraseña no debe ser <a href="$href" target="_blank">comúnmente conocida</a>.';
$messages['pwned_isdisclosed'] = 'La contraseña es comúnmente conocida.';
$messages['pwned_fetcherror'] = 'Fallo al verificar la fortaleza de la contraseña.';
@@ -0,0 +1,34 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Muuda parooli';
$labels['curpasswd'] = 'Vana parool:';
$labels['newpasswd'] = 'Uus parool:';
$labels['confpasswd'] = 'Uus parool uuesti:';
$messages['nopassword'] = 'Palun sisesta uus parool.';
$messages['nocurpassword'] = 'Palun sisesta vana parool.';
$messages['passwordincorrect'] = 'Vana parool on vale.';
$messages['passwordinconsistency'] = 'Paroolid ei kattu, palun proovi uuesti.';
$messages['crypterror'] = 'Serveris ei ole parooli krüpteerimiseks vajalikku funktsiooni.';
$messages['connecterror'] = 'Parooli salvestamine nurjus. Ühenduse tõrge.';
$messages['internalerror'] = 'Uue parooli andmebaasi salvestamine nurjus.';
$messages['passwordshort'] = 'Parool peab olema vähemalt $length märki pikk.';
$messages['passwordweak'] = 'Parool peab sisaldama vähemalt üht numbrit ja märki.';
$messages['passwordtooweak'] = 'Parool on liiga nõrk.';
$messages['passwordforbidden'] = 'Parool sisaldab keelatud märki.';
$messages['firstloginchange'] = 'See on sinu esimene sisselogimine, palun muuda oma parooli.';
$messages['pwned_isdisclosed'] = 'Parool on liiga tavaline.';
$messages['pwned_fetcherror'] = 'Parooli tugevuse kontrollimine ebaõnnestus.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Aldatu pasahitza';
$labels['curpasswd'] = 'Oraingo pasahitza:';
$labels['newpasswd'] = 'Pasahitz berria:';
$labels['confpasswd'] = 'Baieztatu pasahitz berria:';
$messages['nopassword'] = 'Sartu pasahitz berria.';
$messages['nocurpassword'] = 'Sartu oraingo pasahitza.';
$messages['passwordincorrect'] = 'Oraingo pasahitza ez da zuzena.';
$messages['passwordinconsistency'] = 'Pasahitz berria ez datoz bat, saiatu berriz.';
$messages['crypterror'] = 'Ezin izan da pasahitz berria gorde. Ez da zifratze funtziorik aurkitu.';
$messages['connecterror'] = 'Ezin izan da pasahitz berria gorde. Konexio arazoak egon dira.';
$messages['internalerror'] = 'Ezin izan da pasahitz berria gorde.';
$messages['passwordshort'] = 'Gutxienez $length karakteretakoa izan behar du pasahitzak.';
$messages['passwordweak'] = 'Gutxienez zenbaki bat eta puntuazio karaktere bat izan behar du pasahitzak.';
$messages['passwordtooweak'] = 'Pasahitz ahulegia';
$messages['passwordnoseq'] = 'Pasahitza ez luke horrelako sekuentzia izan behar: 123456 edo QWERTY';
$messages['passwordnocommon'] = 'Pasahitza ez luke hitz arrunta edo izen bat izan behar.';
$messages['passwordforbidden'] = 'Galarazitako karaktereak daude pasahitzean.';
$messages['firstloginchange'] = 'Zure lehenengo sarrera da. Pasahitza aldatu mesedez.';
$messages['disablednotice'] = 'Sistema mantentze lanetan dago eta oraintxe bertan ezin da pasahitzik aldatu. Laster denak bere onera itzuli beharko luke. Barkatu eragozpenenak.';
$messages['passwinhistory'] = 'Pasahitz hori aurretik erabili izan da.';
$messages['samepasswd'] = 'Pasahitz berria ezin da izan aurrekoaren berdina.';
$messages['passwdexpirewarning'] = 'Kontuz! Zure pasahitza laster iraungiko da, aldatu $expirationdatetime baino lehen.';
$messages['passwdexpired'] = 'Zure pasahitza iraungi da, aldatu behar duzu orain!';
$messages['passwdconstraintviolation'] = 'Pasahitzen murriztapen-bortxaketa. Seguru aski ahulegia da.';
$messages['pwned_mustnotbedisclosed'] = 'Pasahitza ez da <a href="$href" target="_blank">ezaguna</a> izan behar.';
$messages['pwned_isdisclosed'] = 'Pasahitz hori ezaguna da.';
$messages['pwned_fetcherror'] = 'Pasahitzaren sendotasunaren probak huts egin du.';
@@ -0,0 +1,29 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['curpasswd'] = 'رمز عبور کنونی';
$labels['newpasswd'] = 'رمز عبور جدید';
$labels['confpasswd'] = 'تایید رمز عبور جدید';
$messages['nopassword'] = 'لطفا رمز عبور جدیدی وارد کنید';
$messages['nocurpassword'] = 'لطفا رمز عبور کنونی را وارد کنید';
$messages['passwordincorrect'] = 'رمز عبور کنونی اشتباه است';
$messages['passwordinconsistency'] = 'رمزهای عبور با هم مطابقت ندارند، لطفا دوباره سعی کنید';
$messages['crypterror'] = 'امکان ذخیره رمز عبور جدید وجود ندارد. تابع رمزگذاری یافت نشد';
$messages['connecterror'] = 'امکان ذخیره رمز عبور جدید وجود ندارد. لطفا دوباره سعی کنید';
$messages['internalerror'] = 'امکان ذخیره رمز عبور جدید وجود ندارد';
$messages['passwordshort'] = 'طول رمز عبور می بایست حداقل به طول $length کاراکتر باشد';
$messages['passwordweak'] = 'رمز عبور می بایست دارای حداقل یک عدد و یک کاراکتر علامت گذاری باشد';
$messages['passwordforbidden'] = 'رمز عبور شامل کاراکترهای غیر مجاز است';
@@ -0,0 +1,31 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'تغییر گذرواژه';
$labels['curpasswd'] = 'گذرواژه فعلی:';
$labels['newpasswd'] = 'گذرواژه جدید:';
$labels['confpasswd'] = 'تایید گذرواژه جدید:';
$messages['nopassword'] = 'لطفا گذرواژه جدید را وارد نمایید.';
$messages['nocurpassword'] = ' لطفا گذرواژه فعلی را وارد نمایید.';
$messages['passwordincorrect'] = 'گذرواژه فعلی اشتباه است.';
$messages['passwordinconsistency'] = 'گذرواژه‌ها با هم مطابقت ندارند، دوباره سعی نمایید.';
$messages['crypterror'] = 'گذرواژه جدید نمی‌تواند ذخیره شود. نبود تابع رمزگذاری.';
$messages['connecterror'] = 'گذرواژه جدید نمی‌تواند ذخیره شود. خطای ارتباط.';
$messages['internalerror'] = 'گذرواژه جدید نتوانست ذخیره نشد.';
$messages['passwordshort'] = 'گذرواژه باید حداقل $length کاراکتر طول داشته باشد.';
$messages['passwordweak'] = 'گذرواژه باید شامل حداقل یک عدد و یک کاراکتر نشانه‌ای باشد.';
$messages['passwordforbidden'] = 'گذرواژه شامل کاراکترهای غیرمجاز است.';
$messages['firstloginchange'] = 'این اولین ورود شما است، لطفا گذرواژه خود را تغییر دهید.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Vaihda salasana';
$labels['curpasswd'] = 'Nykyinen salasana:';
$labels['newpasswd'] = 'Uusi salasana:';
$labels['confpasswd'] = 'Vahvista uusi salasana:';
$messages['nopassword'] = 'Syötä uusi salasana.';
$messages['nocurpassword'] = 'Syötä nykyinen salasana.';
$messages['passwordincorrect'] = 'Nykyinen salasana on väärin.';
$messages['passwordinconsistency'] = 'Salasanat eivät täsmää, yritä uudelleen.';
$messages['crypterror'] = 'Uuden salasanan tallennus epäonnistui. Kryptausfunktio puuttuu.';
$messages['connecterror'] = 'Uuden salasanan tallennus epäonnistui. Yhteysongelma.';
$messages['internalerror'] = 'Uuden salasanan tallennus epäonnistui.';
$messages['passwordshort'] = 'Salasanassa täytyy olla vähintään $length merkkiä.';
$messages['passwordweak'] = 'Salasanan täytyy sisältää vähintään yksi numero ja yksi välimerkki.';
$messages['passwordtooweak'] = 'Salasana on liian heikko.';
$messages['passwordnoseq'] = 'Salasana ei saa olla yleinen ketju kuten 123456 tai QWERTY.';
$messages['passwordnocommon'] = 'Salasana ei saa olla yleinen sana tai nimi.';
$messages['passwordforbidden'] = 'Salasana sisältää virheellisiä merkkejä.';
$messages['firstloginchange'] = 'Tämä on ensimmäinen kirjautumiskertasi. Vaihda salasanasi.';
$messages['disablednotice'] = 'Järjestelmä on parhaillaan huoltotilassa, joten salasanaa ei voi vaihtaa juuri nyt. Pahoittelemme aiheutunutta vaivaa. Kaiken pitäisi olla pian käytettävissä normaaliin tapaan.';
$messages['passwinhistory'] = 'Tämä salasana on jo ollut käytössä aikaisemmin.';
$messages['samepasswd'] = 'Uuden salasanan pitää olla eri kuin vanha salasana.';
$messages['passwdexpirewarning'] = 'Varoitus! Salasanasi vanhenee pian, vaihda se ennen $expirationdatetime.';
$messages['passwdexpired'] = 'Salasanasi on vanhentunut ja se pitää vaihtaa nyt!';
$messages['passwdconstraintviolation'] = 'Salasanan rajoitevirhe. Salasana on todennäköisesti liian heikko.';
$messages['pwned_mustnotbedisclosed'] = 'Salasana ei saa olla <a href="$href" target="_blank">yleisesti tunnettu</a>.';
$messages['pwned_isdisclosed'] = 'Salasana on yleisesti tunnettu.';
$messages['pwned_fetcherror'] = 'Salasanan vahvuutta ei voitu varmistaa.';
@@ -0,0 +1,32 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Broyt loyniorð';
$labels['curpasswd'] = 'Nú verandi loyniorð:';
$labels['newpasswd'] = 'Nýtt loyniorð:';
$labels['confpasswd'] = 'Endurtak nýggja loyniorð:';
$messages['nopassword'] = 'Vinarliga skriva inn nýtt loyniorð.';
$messages['nocurpassword'] = 'Vinarliga skriva inn núverandi loyniorð.';
$messages['passwordincorrect'] = 'Verandi loyniorð er skeift.';
$messages['passwordinconsistency'] = 'Loyniorðini eru ikki líka, vinarliga royn aftur.';
$messages['crypterror'] = 'Kann ikki goyma nýggja loyniorð. Brongling manglar.';
$messages['connecterror'] = 'Kann ikki goyma nýtt loyniorð. Sambands feilur.';
$messages['internalerror'] = 'Kundi ikki goyma nýggja loyniorðið.';
$messages['passwordshort'] = 'Loyniorði má hvørfall verða $length tekin langt.';
$messages['passwordweak'] = 'Loyniorði má innihalda minst eitt nummar og eitt punktum tekin.';
$messages['passwordforbidden'] = 'Loyniorð inniheldur ólóglig tekin.';
$messages['firstloginchange'] = 'Hetta er tín fyrsta innriting. Vinarliga broyt títt loyniorð.';
$messages['disablednotice'] = 'Skipanin er í verandi stunduni dagførd. Av tí sama, er ikki loyvt at broyta loyniorði í løtuni. Alt skuldi verið aftur til tað vanliga skjótt. Tað muga tygum orsaka. ';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Changer le mot de passe';
$labels['curpasswd'] = 'Mot de passe actuel :';
$labels['newpasswd'] = 'Nouveau mot de passe :';
$labels['confpasswd'] = 'Confirmer le nouveau mot de passe :';
$messages['nopassword'] = 'Veuillez saisir le nouveau mot de passe.';
$messages['nocurpassword'] = 'Veuillez saisir le mot de passe actuel.';
$messages['passwordincorrect'] = 'Le mot de passe actuel est erroné.';
$messages['passwordinconsistency'] = 'Les mots de passe ne correspondent pas, veuillez réessayer.';
$messages['crypterror'] = 'Impossible denregistrer le nouveau mot de passe. La fonction de chiffrement est manquante.';
$messages['connecterror'] = 'Impossible denregistrer le nouveau mot de passe. Erreur de connexion.';
$messages['internalerror'] = 'Impossible denregistrer le nouveau mot de passe.';
$messages['passwordshort'] = 'Le mot de passe doit comporter au moins $length caractères.';
$messages['passwordweak'] = 'Le mot de passe doit comporter au moins un chiffre et un signe de ponctuation.';
$messages['passwordtooweak'] = 'Le mot de passe est trop faible.';
$messages['passwordnoseq'] = 'Le mot de passe ne devrait pas être une séquence comme 123456, QWERTY ou AZERTY.';
$messages['passwordnocommon'] = 'Le mot de passe ne devrait pas être un nom commun ou un nom.';
$messages['passwordforbidden'] = 'Le mot de passe contient des caractères interdits.';
$messages['firstloginchange'] = 'Ceci est votre première connexion. Veuillez changer votre mot de passe.';
$messages['disablednotice'] = 'Le système est en cours de maintenance et les changements de mot de passe sont impossibles pour linstant. Tout devrait redevenir normal sous peu. Nous regrettons tout inconvénient que cette situation pourrait occasionner.';
$messages['passwinhistory'] = 'Ce mot de passe a déjà été utilisé précédemment.';
$messages['samepasswd'] = 'Le nouveau mot de passe doit être différent de lancien.';
$messages['passwdexpirewarning'] = 'Avertissement! Votre mot de passe arrivera prochainement à expiration. Changez-le avant le $expirationdatetime.';
$messages['passwdexpired'] = 'Votre mot de passe est expiré, vous devez le changer maintenant';
$messages['passwdconstraintviolation'] = 'Contrainte non respectée. Le mot de passe est probablement trop faible.';
$messages['pwned_mustnotbedisclosed'] = 'Le mot de passe ne doit pas être <a href="$href" target="_blank">notoire</a>.';
$messages['pwned_isdisclosed'] = 'Ce mot de passe est connu par ailleurs.';
$messages['pwned_fetcherror'] = 'Échec de vérification de la robustesse du mot de passe.';
@@ -0,0 +1,36 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Wachtwurd feroarje';
$labels['curpasswd'] = 'Aktueel wachtwurd:';
$labels['newpasswd'] = 'Nij wachtwurd:';
$labels['confpasswd'] = 'Nij wachtwurd befêstigje:';
$messages['nopassword'] = 'Fier in nij wachtwurd yn.';
$messages['nocurpassword'] = 'Fier aktueel wachtwurd yn:';
$messages['passwordincorrect'] = 'Ferkeard aktueel wachtwurd.';
$messages['passwordinconsistency'] = 'Wachtwurden komme net oerien, besykje it nochris.';
$messages['crypterror'] = 'Koe nij wachtwurd net bewarje. Fersifering funksje ûntbrekt.';
$messages['connecterror'] = 'Koe nij wachtwurd net bewarje. Ferbining flater.';
$messages['internalerror'] = 'Koe nij wachtwurd net bewarje.';
$messages['passwordshort'] = 'Wachtwurd moat op syn minst $length tekens lang.';
$messages['passwordweak'] = 'Wachtwurd moat op syn minst ien nûmer en ien lêstekens karakter befetsje.';
$messages['passwordforbidden'] = 'Wachtwurd befettet ferbeane tekens.';
$messages['firstloginchange'] = 'Dit is jo earste oanmelding. Wizigje asjobleaft jo wachtwurd.';
$messages['disablednotice'] = 'It systeem is op dit stuit ûnder ûnderhâld en wachtwurd feroaring is net mooglik. Alles soe gau werom wêze moatte nei it normale. Sorry foar it ûngemak.';
$messages['passwinhistory'] = 'Dit wachtwurd is al earder brûkt.';
$messages['samepasswd'] = 'Nij wachtwurd moat oars wêze as it âlde.';
$messages['passwdexpirewarning'] = 'Warskôging! Jo wachtwurd sil ynkoarten ferrinne, feroarje it foar $expirationdatetime.';
$messages['passwdexpired'] = 'Jo wachtwurd is ferrûn, jo moatte it no feroarje!';
@@ -0,0 +1,42 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Athraigh an focal faire';
$labels['curpasswd'] = 'An focal faire reatha:';
$labels['newpasswd'] = 'An focal faire nua:';
$labels['confpasswd'] = 'Deimhnigh an focal faire nua:';
$messages['nopassword'] = 'Cuir isteach focal faire nua.';
$messages['nocurpassword'] = 'Cuir isteach d\'fhocal faire reatha.';
$messages['passwordincorrect'] = 'Níl an focal faire reatha ceart.';
$messages['passwordinconsistency'] = 'Ní hionann na focail faire. Déan arís é.';
$messages['crypterror'] = 'Níorbh fhéidir an focal faire nua a chur i dtaisce. Tá an fheidhm chriptiúcháin in easnamh.';
$messages['connecterror'] = 'Níorbh fhéidir an focal faire nua a chur i dtaisce. Tharla earráid leis an gceangal.';
$messages['internalerror'] = 'Níorbh fhéidir an focal faire nua a chur i dtaisce.';
$messages['passwordshort'] = 'Ní mór $length gcarachtar ar a laghad a bheith sa bhfocal faire.';
$messages['passwordweak'] = 'Ní mór aon uimhir amháin agus aon chomhartha poncaíochta amháin a bheith sa bhfocal faire.';
$messages['passwordtooweak'] = 'Tá an focal faire rólag.';
$messages['passwordnoseq'] = 'Níor cheart don bhfocal faire a bheith ina sraith amhail 123456 nó QWERTY.';
$messages['passwordnocommon'] = 'Níor cheart focal nó ainm coitianta a roghnú mar fhocal faire.';
$messages['passwordforbidden'] = 'Tá carachtair nach gceadaítear san fhocal faire.';
$messages['firstloginchange'] = 'Is é seo an chéad uair duit síniú isteach. Athraigh d\'fhocal faire.';
$messages['disablednotice'] = 'Tá an córas á chothabháil faoi láthair agus ní féidir an focal faire a athrú ag an am seo. Ba cheart go mbeadh gach rud mar is gnách sula i bhfad. Is dona linn aon mhíchaoithiúlacht.';
$messages['passwinhistory'] = 'Baineadh feidhm as an bhfocal faire seo cheana.';
$messages['samepasswd'] = 'Ní mór don bhfocal faire nua bheith éagsúil ón seanfhocal faire.';
$messages['passwdexpirewarning'] = 'Rabhadh! Rachaidh d\'fhocal faire in éag go luath. Athraigh é roimh $expirationdatetime.';
$messages['passwdexpired'] = 'D\'éag d\'fhocal faire. Ní mór duit é a athrú anois!';
$messages['passwdconstraintviolation'] = 'Sárú ar na rialacha do na focail faire. Is dócha go bhfuil an focal faire rólag.';
$messages['pwned_isdisclosed'] = 'Tá fios ag an iomarca daoine ar an bhfocal faire sin.';
$messages['pwned_fetcherror'] = 'Theip ar an gcóras a fhíorú cé chomh láidir is atá an focal faire.';
@@ -0,0 +1,31 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Cambiar contrasinal';
$labels['curpasswd'] = 'Contrasinal actual:';
$labels['newpasswd'] = 'Contrasinal novo:';
$labels['confpasswd'] = 'Confirmar contrasinal:';
$messages['nopassword'] = 'Por favor, introduce un contrasinal novo.';
$messages['nocurpassword'] = 'Por favor, introduce o contrasinal actual.';
$messages['passwordincorrect'] = 'O contrasinal actual é incorrecto.';
$messages['passwordinconsistency'] = 'Os contrasinais non cadran. Por favor, inténtao outra vez.';
$messages['crypterror'] = 'Non foi posíbel gardar o contrasinal novo. Falta a función de cifrado.';
$messages['connecterror'] = 'Non foi posíbel gardar o contrasinal novo. Erro de conexión';
$messages['internalerror'] = 'Non foi posíbel gardar o contrasinal novo.';
$messages['passwordshort'] = 'O contrasinal debe ter polo menos $length caracteres.';
$messages['passwordweak'] = 'O contrasinal debe incluir polo menos un número e un signo de puntuación.';
$messages['passwordforbidden'] = 'O contrasinal contén caracteres non permitidos.';
$messages['firstloginchange'] = 'É a primeira vez que se conecta. Por favor, troque o seu contrasinal.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'שנה סיסמה';
$labels['curpasswd'] = 'סיסמה נוכחית:';
$labels['newpasswd'] = 'סיסמה חדשה:';
$labels['confpasswd'] = 'אימות הסיסמה החדשה:';
$messages['nopassword'] = 'נא להקליד סיסמה חדשה';
$messages['nocurpassword'] = 'נא להקיש הסיסמה הנוכחית';
$messages['passwordincorrect'] = 'הוקשה סיסמה נוכחית שגויה';
$messages['passwordinconsistency'] = 'הסיסמאות שהוקשו אינן תואמות, נא לנסות שנית.';
$messages['crypterror'] = 'לא נשמרה הסיסמה החדשה. חסר מנגנון הצפנה.';
$messages['connecterror'] = 'לא נשמרה הסיסמה החדשה. שגיאת תקשורת.';
$messages['internalerror'] = 'לא ניתן לשמור על הסיסמה החדשה.';
$messages['passwordshort'] = 'הסיסמה צריכה להיות לפחות בעלת $length תווים';
$messages['passwordweak'] = 'הסיסמה חייבת לכלול לפחות סיפרה אחת ולפחות סימן פיסוק אחד.';
$messages['passwordtooweak'] = 'הסיסמה חלשה מדי';
$messages['passwordnoseq'] = 'אסור שהסיסמה תהיה סדרה של תוים קשורים או בעלי משמעות כמו למשל 123456 או QUWERTY';
$messages['passwordnocommon'] = 'אסור שהסיסמה תהיה מילה נפוצה או שם/כינוי.';
$messages['passwordforbidden'] = 'הסיסמה מכילה תווים אסורים.';
$messages['firstloginchange'] = 'זוהי כניסתך הראשונה. אנא שנה את סיסמתך.';
$messages['disablednotice'] = 'לא ניתן לשנות סיסמה כעת כי המערכת התחזוקה. המערכת תחזור בקרוב לפעולה רגילה. אנו מתנצלים על אי הנוחות.';
$messages['passwinhistory'] = 'הסיסמה היתה בשימוש מקודם';
$messages['samepasswd'] = 'הסיסמה החדשה צריכה להיות שונה מהישנה';
$messages['passwdexpirewarning'] = 'אזהרה! הסיסמה תפוג בקרוב. יש לשנותה לפני expirationdatetime$.';
$messages['passwdexpired'] = 'פג תוקפה של הסיסמה. יש לשנותה כעת!';
$messages['passwdconstraintviolation'] = 'סיסמה לא חוקית. כנראה חלשה מדי.';
$messages['pwned_mustnotbedisclosed'] = 'אסור שהסיסמה תהיה כזו שהרבה נוהגים להשתמש בה למשל תאריך לידה או 1234.';
$messages['pwned_isdisclosed'] = 'הרבה משתמשים נוהגים להשתמש בסיסמה זו';
$messages['pwned_fetcherror'] = 'לא ניתן לודא שחוזק הסיסמה תואם לנדרש';
@@ -0,0 +1,39 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Promjena zaporke';
$labels['curpasswd'] = 'Važeća zaporka:';
$labels['newpasswd'] = 'Nova zaporka:';
$labels['confpasswd'] = 'Potvrda nove zaporke:';
$messages['nopassword'] = 'Molimo unesite novu zaporku.';
$messages['nocurpassword'] = 'Molimo unesite trenutnu zaporku.';
$messages['passwordincorrect'] = 'Trenutna zaporka je nevažeća.';
$messages['passwordinconsistency'] = 'Zaporke su različite, pokušajte ponovo.';
$messages['crypterror'] = 'Nemoguće promijeniti zaporku. Nedostaje enkripcijska funkcija.';
$messages['connecterror'] = 'Nemoguće promijeniti zaporku. Greška prilikom spajanja.';
$messages['internalerror'] = 'Nemoguće promijeniti zaporku.';
$messages['passwordshort'] = 'Zaporka mora sadržavati barem $length znakova.';
$messages['passwordweak'] = 'Zaporka mora sadržavati barem jednu znamenku i jedan interpunkcijski znak.';
$messages['passwordtooweak'] = 'Preslaba zaporka.';
$messages['passwordnoseq'] = 'Zaporka ne smije biti niz poput 123456 ili QWERTZ';
$messages['passwordnocommon'] = 'Zaporka ne bi smjela biti uobičajena riječ ili ime.';
$messages['passwordforbidden'] = 'Zaporka sadrži nedozvoljene znakove.';
$messages['firstloginchange'] = 'Ovo je vaša prva prijava u sustav. Molimo promijenite vašu zaporku.';
$messages['disablednotice'] = 'Sustav je trenutno u fazi održavanja i promjena zaporke trenutno nije moguća. Uskoro bi sve trebalo raditi ispravno. Ispričavamo se zbog neugodnosti.';
$messages['passwinhistory'] = 'Zaporka je bila prije u uporabi.';
$messages['samepasswd'] = 'Nova zaporka mora biti drukčija od stare.';
$messages['passwdexpirewarning'] = 'Upozorenje! Vaša će zaporka uskoro isteći, promijenite je prije $expirationdatetime.';
$messages['passwdexpired'] = 'Vaša je zaporka istekla, morate je odmah promijeniti!';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Jelszó módosítás';
$labels['curpasswd'] = 'Jelenlegi jelszó:';
$labels['newpasswd'] = 'Új jelszó:';
$labels['confpasswd'] = 'Új jelszó mégegyszer:';
$messages['nopassword'] = 'Kérjük adja meg az új jelszót.';
$messages['nocurpassword'] = 'Kérjük adja meg a jelenlegi jelszót.';
$messages['passwordincorrect'] = 'Érvénytelen a jelenlegi jelszó.';
$messages['passwordinconsistency'] = 'A beírt jelszavak nem azonosak. Próbálja újra.';
$messages['crypterror'] = 'Hiba történt a kérés feldolgozása során.';
$messages['connecterror'] = 'Az új jelszó mentése nem sikerült. Hiba a kapcsolatban';
$messages['internalerror'] = 'Hiba történt a kérés feldolgozása során.';
$messages['passwordshort'] = 'A jelszónak legalább $length karakter hosszúnak kell lennie.';
$messages['passwordweak'] = 'A jelszónak mindenképpen kell tartalmaznia egy számot és egy írásjelet.';
$messages['passwordtooweak'] = 'A jelszó túl gyenge.';
$messages['passwordnoseq'] = 'A jelszavak nem lehetnek olyan karaktereksorozatok mint például az 123456 vagy a QWERTY.';
$messages['passwordnocommon'] = 'A jelszó nem lehet egy általános szó vagy név.';
$messages['passwordforbidden'] = 'A jelszó tiltott karaktert is tartalmaz.';
$messages['firstloginchange'] = 'Ez az első belépésed. Változtass jelszót.';
$messages['disablednotice'] = 'A rendszer jelenleg karbantartás alatt van és a jelszó módosítás nem lehetséges ebben a pillanatban. Minden visszaáll normálisra hamarosan. A kellemetlenségért elnézést kérünk.';
$messages['passwinhistory'] = 'A megadott jelszó volt már használva.';
$messages['samepasswd'] = 'Az új jelszó nem lehet azonos a régi jelszóval.';
$messages['passwdexpirewarning'] = 'Figyelem! A jelszavad hamarosan lejár, változtasd meg még $expirationdatetime elött.';
$messages['passwdexpired'] = 'A jelszavad lejárt, adj meg újat.';
$messages['passwdconstraintviolation'] = 'Jelszó szabály megsértése. A jelszó valószínűleg túl gyenge.';
$messages['pwned_mustnotbedisclosed'] = 'A jelszó nem lehet <a href="$href" target="_blank">általánosan használtként ismert</a>.';
$messages['pwned_isdisclosed'] = 'Ez a jelszó általánosan használtként ismert.';
$messages['pwned_fetcherror'] = 'Nem sikerült a jelszó erősségének ellenőrzése.';
@@ -0,0 +1,32 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Փոխել գաղտնաբառը';
$labels['curpasswd'] = 'Ներկա գաղտնաբառ`';
$labels['newpasswd'] = 'Նոր գաղտնաբառ`';
$labels['confpasswd'] = 'Կրկնեք նոր գաղտնաբառը`';
$messages['nopassword'] = 'Ներմուցեք նոր գաղտնաբառը։';
$messages['nocurpassword'] = 'Ներմուցեք առկա գաղտնաբառը։';
$messages['passwordincorrect'] = 'Առկա գաղտնաբառը սխալ է։';
$messages['passwordinconsistency'] = 'Նոր գաղտնաբառերը չեն համընկնում, կրկին փորձեք։';
$messages['crypterror'] = 'Նոր գաղտնաբառի պահպանումը ձախողվեց։ Բացակայում է գաղտնագրման ֆունկցիան։';
$messages['connecterror'] = 'Նոր գաղտնաբառի պահպանումը ձախողվեց։ Կապի սխալ։';
$messages['internalerror'] = 'Նոր գաղտնաբառի պահպանումը ձախողվեց։';
$messages['passwordshort'] = 'Գաղտնաբառերը պետք է լինեն առնվազն $length նիշ երկարությամբ։';
$messages['passwordweak'] = 'Գաղտնաբառերը պետք է պարունակեն առնվազն մեկ թիվ և մեկ կետադրական նիշ։';
$messages['passwordforbidden'] = 'Գաղտնաբառը պարունակում է արգելված նիշ։';
$messages['firstloginchange'] = 'Սա ձեր առաջին մուտքն է։ Խնդրում ենք փոխել գաղտնաբառը։';
$messages['disablednotice'] = 'Ներկա պահին համակարգը գտնվում է վերականգնման փուլում, և այս պահին գաղտնաբառը հնարավոր չէ փոխել: Ամեն ինչ շուտով կվերականգնվի: Խնդրում ենք Ձեր ներողամտությունը, պատճառված անհարմարության համար:';
@@ -0,0 +1,37 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Cambiar contrasigno';
$labels['curpasswd'] = 'Contrasigno actual:';
$labels['newpasswd'] = 'Nove contrasigno:';
$labels['confpasswd'] = 'Confirmar nove contrasigno:';
$messages['nopassword'] = 'Entra un nove contrasigno.';
$messages['nocurpassword'] = 'Entra le contrasigno actual.';
$messages['passwordincorrect'] = 'Le contrasigno actual es incorrecte.';
$messages['passwordinconsistency'] = 'Le contrasignos non es identic. Essaya lo de novo.';
$messages['crypterror'] = 'Impossibile salveguardar le nove contrasigno. Le function de cryptographia manca.';
$messages['connecterror'] = 'Impossibile salveguardar le nove contrasigno. Error de connexion.';
$messages['internalerror'] = 'Impossibile salveguardar le nove contrasigno.';
$messages['passwordshort'] = 'Le contrasigno debe haber al minus $length characteres.';
$messages['passwordweak'] = 'Le contrasigno debe includer al minus un numero e un character de punctuation.';
$messages['passwordforbidden'] = 'Le contrasigno contine characteres interdicte.';
$messages['firstloginchange'] = 'Iste es vostre prime session. Per favor, cambia vostre contrasigno.';
$messages['disablednotice'] = 'Le systema es sub mantenentia e non es possibile cambiar le contrasigno in iste momento. Le systema retornara al functionamento normal bentosto. Nos offere nostre excusas pro omne inconveniente.';
$messages['passwinhistory'] = 'Iste contrasigno jam esseva usate previemente.';
$messages['samepasswd'] = 'Un nove contrasigno debe esser differente del ancian.';
$messages['passwdexpirewarning'] = 'Attention! Vostre contrasigno expirara proximemente, cambia lo ante $expirationdatetime.';
$messages['passwdexpired'] = 'Vostre contrasigno ha expirate, vos debe cambiar lo ora!';
$messages['passwdconstraintviolation'] = 'Le contrasigno non satisface le requisitos. Probabilemente es troppo insecur.';
@@ -0,0 +1,37 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Ubah sandi';
$labels['curpasswd'] = 'Sandi saat ini:';
$labels['newpasswd'] = 'Sandi Baru:';
$labels['confpasswd'] = 'Konfirmasi Sandi Baru:';
$messages['nopassword'] = 'Masukkan sandi baru.';
$messages['nocurpassword'] = 'Masukkan sandi saat ini.';
$messages['passwordincorrect'] = 'Sandi saat ini salah.';
$messages['passwordinconsistency'] = 'Sandi tidak cocok, harap coba lagi.';
$messages['crypterror'] = 'Tidak dapat menyimpan sandi baru. Fungsi enkripsi tidak ditemukan.';
$messages['connecterror'] = 'Tidak dapat menyimpan sandi baru. Koneksi error.';
$messages['internalerror'] = 'Tidak dapat menyimpan sandi baru.';
$messages['passwordshort'] = 'Panjang password minimal $length karakter';
$messages['passwordweak'] = 'Sandi harus menyertakan setidaknya satu angka dan satu tanda baca.';
$messages['passwordforbidden'] = 'Sandi mengandung karakter terlarang.';
$messages['firstloginchange'] = 'Ini login pertama Anda. Harap ubah sandi Anda.';
$messages['disablednotice'] = 'Sistem saat ini sedang dalam pemeliharaan dan perubahan sandi tidak mungkin saat ini. Semua mestinya segera kembali normal. Kami mohon maaf untuk ketidaknyamanan ini.';
$messages['passwinhistory'] = 'Kata sandi sudah pernah digunakan';
$messages['samepasswd'] = 'Kata sandi harus berbeda dengan yang sebelumnya';
$messages['passwdexpirewarning'] = 'Peringatan! Masa kata sandi segera berakhir, ganti sebelum $expirationdatetime.';
$messages['passwdexpired'] = 'Kata sandi kadaluarsa, harus diganti sekarang.';
$messages['passwdconstraintviolation'] = 'Kata sandi melanggar aturan. Mungkin kata sandi terlalu lemah.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Breyta lykilorði';
$labels['curpasswd'] = 'Núverandi lykilorð:';
$labels['newpasswd'] = 'Nýtt lykilorð:';
$labels['confpasswd'] = 'Staðfesta nýtt lykilorð:';
$messages['nopassword'] = 'Settu inn nýtt lykilorð.';
$messages['nocurpassword'] = 'Settu inn núverandi lykilorð.';
$messages['passwordincorrect'] = 'Núverandi lykilorð er ekki rétt.';
$messages['passwordinconsistency'] = 'Lykilorðin samsvara ekki, reyndu aftur.';
$messages['crypterror'] = 'Gat ekki vistað nýtt lykilorð. Dulritunareiginleika vantar.';
$messages['connecterror'] = 'Gat ekki vistað nýtt lykilorð. Villa í tengingu.';
$messages['internalerror'] = 'Gat ekki vistað nýtt lykilorð.';
$messages['passwordshort'] = 'Lykilorð þarf að vera að minnsta kosti $length stafa langt.';
$messages['passwordweak'] = 'Lykilorð þarf að innihalda a.m.k. einn tölustaf og eitt greinamerki.';
$messages['passwordtooweak'] = 'Lykilorðið er of veikt.';
$messages['passwordnoseq'] = 'Lykilorð ætti ekki að vera runa á borð við 123456 eða QWERTY.';
$messages['passwordnocommon'] = 'Lykilorð ætti ekki að vera algengt orð eða nafn.';
$messages['passwordforbidden'] = 'Lykilorð inniheldur óleyfilega stafi.';
$messages['firstloginchange'] = 'Þetta er í fyrsta skipti sem þú skráir þig inn. Endilega breyttu lykilorðinu þínu.';
$messages['disablednotice'] = 'Kerfið er í viðhaldsfasa og því er ekki hægt að breyta lykilorðum sem stendur. Allt ætti að vera komið í samt lag innan stundar. Við biðjumst afsökunar á þeim óþægindum sem af þessu geta hlotist.';
$messages['passwinhistory'] = 'Þetta lykilorð hefur áður verið notað.';
$messages['samepasswd'] = 'Nýja lykilorðið verður að vera frábrugðið hinu gamla.';
$messages['passwdexpirewarning'] = 'Aðvörun! Lykilorðið þitt rennur út innan skamms, breyttu því fyrir $expirationdatetime.';
$messages['passwdexpired'] = 'Lykilorðið þitt er runnið út, þú verður að breyta því núna!';
$messages['passwdconstraintviolation'] = 'Lykilorðið rakst á skilyrði. Líklega er það of veikt.';
$messages['pwned_mustnotbedisclosed'] = 'Lykilorð má ekki vera <a href="$href" target="_blank">almennt þekkt</a>.';
$messages['pwned_isdisclosed'] = 'Þetta lykilorð er almennt þekkt.';
$messages['pwned_fetcherror'] = 'Mistókst að sannreyna styrk lykilorðsins.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Modifica la Password';
$labels['curpasswd'] = 'Password corrente:';
$labels['newpasswd'] = 'Nuova password:';
$labels['confpasswd'] = 'Conferma la nuova Password:';
$messages['nopassword'] = 'Per favore inserire la nuova password.';
$messages['nocurpassword'] = 'Per favore inserire la password corrente.';
$messages['passwordincorrect'] = 'La password corrente non è corretta.';
$messages['passwordinconsistency'] = 'Le password non coincidono, per favore reinserire.';
$messages['crypterror'] = 'Impossibile salvare la nuova password. Funzione di crittografia mancante.';
$messages['connecterror'] = 'Impossibile salvare la nuova password. Errore di connessione.';
$messages['internalerror'] = 'Impossibile salvare la nuova password.';
$messages['passwordshort'] = 'La password deve essere lunga almeno $length caratteri.';
$messages['passwordweak'] = 'La password deve includere almeno una cifra decimale e un carattere di punteggiatura.';
$messages['passwordtooweak'] = 'La password è troppo debole.';
$messages['passwordnoseq'] = 'La password non deve essere una sequenza come 123456 o QWERTY.';
$messages['passwordnocommon'] = 'La password non deve contenere parole comuni o nomi.';
$messages['passwordforbidden'] = 'La password contiene caratteri proibiti.';
$messages['firstloginchange'] = 'Questo è il tuo primo accesso. Si prega di cambiare la propria password.';
$messages['disablednotice'] = 'Il sistema è attualmente in manutenzione e pertanto al momento non è possibile effettuare il cambio della password. Presto tutto tornerà alla normalità. Ci scusiamo per il disagio.';
$messages['passwinhistory'] = 'Questa password è già stata usata precedentemente';
$messages['samepasswd'] = 'La nuova password deve essere differente da una usata precedentemente.';
$messages['passwdexpirewarning'] = 'Attenzione! La tua password scadrà a breve, cambiala prima del $expiretiondatetime.';
$messages['passwdexpired'] = 'La tua password è scaduta, devi cambiarla adesso.';
$messages['passwdconstraintviolation'] = 'La password non soddisfa i requisiti di sicurezza.';
$messages['pwned_mustnotbedisclosed'] = 'La password non deve essere <a href="$href" target="_blank">nota</a>.';
$messages['pwned_isdisclosed'] = 'Questa password è nota.';
$messages['pwned_fetcherror'] = 'Verifica robustezza password fallita.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'パスワードの変更';
$labels['curpasswd'] = '現在のパスワード:';
$labels['newpasswd'] = '新しいパスワード:';
$labels['confpasswd'] = '新しいパスワード (確認):';
$messages['nopassword'] = '新しいパスワードを入力してください。';
$messages['nocurpassword'] = '現在のパスワードを入力してください。';
$messages['passwordincorrect'] = '現在のパスワードが間違っています。';
$messages['passwordinconsistency'] = 'パスワードが一致しません。もう一度やり直してください。';
$messages['crypterror'] = 'パスワードを保存できませんでした。暗号化関数がみあたりません。';
$messages['connecterror'] = '新しいパスワードを保存できませんでした。接続エラーです。';
$messages['internalerror'] = '新しいパスワードを保存できませんでした。';
$messages['passwordshort'] = 'パスワードは少なくとも $length 文字の長さが必要です。';
$messages['passwordweak'] = 'パスワードは少なくとも数字の 1 文字と記号の 1 文字を含んでいなければなりません。';
$messages['passwordtooweak'] = '弱すぎるパスワードです。';
$messages['passwordnoseq'] = 'パスワードは123456やQWERTYの様な連続にしてはなりません。';
$messages['passwordnocommon'] = 'パスワードはありふれた単語や名前にしてはなりません。';
$messages['passwordforbidden'] = 'パスワードに禁止された文字が含まれています。';
$messages['firstloginchange'] = 'これは初めてのログインです。パスワードを変更してください。';
$messages['disablednotice'] = 'このシステムは今は保守中で、現在のところパスワードの変更はできません。しばらくすれば、通常の状態に復帰するはずです。ご迷惑を掛けて申し訳ありません。';
$messages['passwinhistory'] = 'このパスワードは以前に使用しています。';
$messages['samepasswd'] = '新しいパスワードは以前のものと異なっていなければなりません。';
$messages['passwdexpirewarning'] = '警告! パスワードの有効期限がすぐに切れます、$expirationdatetimeよりも前に変更してください。';
$messages['passwdexpired'] = 'パスワードの期限が切れています、今すぐ変更しなければなりません!';
$messages['passwdconstraintviolation'] = 'パスワードの制限に違反しました。おそらくパスワードがの強度が弱すぎます。';
$messages['pwned_mustnotbedisclosed'] = 'パスワードは<a href="$href" target="_blank">よく知られた言葉</a>であってはなりません。';
$messages['pwned_isdisclosed'] = 'このパスワードはよく知られた言葉です。';
$messages['pwned_fetcherror'] = 'パスワードの強度の検証に失敗しました。';
@@ -0,0 +1,20 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Beddel awal uffir';
$labels['curpasswd'] = 'Awal uffir amiran';
$labels['newpasswd'] = 'Awal uffir amaynut:';
$labels['confpasswd'] = 'Sentem awal uffir:';
@@ -0,0 +1,29 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['curpasswd'] = 'ពាក្យ​សម្ងាត់​បច្ចុប្បន្ន៖';
$labels['newpasswd'] = 'ពាក្យ​សម្ងាត់​ថ្មី៖';
$labels['confpasswd'] = 'បញ្ជាក់​ពាក្យ​សម្ងាត់​ថ្មី៖';
$messages['nopassword'] = 'សូម​បញ្ចូល​ពាក្យ​សម្ងាត់​ថ្មី។';
$messages['nocurpassword'] = 'សូម​បញ្ចូល​ពាក្យ​សម្ងាត់​បច្ចុប្បន្ន​ឲ្យ​បាន​ត្រូវ។';
$messages['passwordincorrect'] = 'ពាក្យ​សម្ងាត់​បច្ចុប្បន្ន​គឺ​មិន​ត្រូវ​ឡើយ។';
$messages['passwordinconsistency'] = 'ពាក្យ​សម្ងាត់​មិន​ត្រូវ​គ្នា​ទេ សូម​ព្យាយាម​ម្ដង​ទៀត។';
$messages['crypterror'] = 'មិន​អាច​រក្សា​ទុក​ពាក្យ​សម្ងាត់​ថ្មី​បាន​ទេ។ បាត់​មុខងារ​កូដនីយកម្ម។';
$messages['connecterror'] = 'មិន​អាច​រក្សា​ទុក​ពាក្យ​សម្ងាត់​ថ្មី​បាន​ទេ។ ការ​តភ្ជាប់​មាន​បញ្ហា។';
$messages['internalerror'] = 'មិន​អាច​រក្សា​ទុក​ពាក្យ​សម្ងាត់​ថ្មី​បាន​ទេ។';
$messages['passwordshort'] = 'ពាក្យ​សម្ងាត់​ត្រូវ​តែ​មាន​យ៉ាង​តិច $length តួ។';
$messages['passwordweak'] = 'ពាក្យ​សម្ងាត់​ត្រូវ​តែ​មាន​បញ្ចូល​យ៉ាង​ហោច​ណាស់​លេខ​មួយ​តួ និង​អក្សរ​សញ្ញា​មួយ​តួ។';
$messages['passwordforbidden'] = 'ពាក្យ​សម្ងាត់​មាន​អក្សរ​ដែល​ត្រូវហាម​ឃាត់។';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = '암호 변경';
$labels['curpasswd'] = '현재 암호:';
$labels['newpasswd'] = '새로운 암호:';
$labels['confpasswd'] = '새로운 암호 확인:';
$messages['nopassword'] = '새로운 암호를 입력하세요.';
$messages['nocurpassword'] = '현재 사용 중인 암호를 입력해주세요.';
$messages['passwordincorrect'] = '현재 사용 중인 암호가 올바르지 않습니다.';
$messages['passwordinconsistency'] = '암호가 일치하지 않습니다. 다시 시도해주세요.';
$messages['crypterror'] = '새로운 암호를 저장할 수 없습니다. 암호화 기능이 누락되었습니다.';
$messages['connecterror'] = '새로운 암호를 저장할 수 없습니다. 연결 오류입니다.';
$messages['internalerror'] = '새로운 암호를 저장할 수 없습니다.';
$messages['passwordshort'] = '암호는 문자가 $length개 이상이어야 합니다.';
$messages['passwordweak'] = '암호는 숫자 및 특수문자를 각각 한 개 이상 포함해야 합니다.';
$messages['passwordtooweak'] = '암호가 너무 취약합니다.';
$messages['passwordnoseq'] = '암호는 123456 또는 QWERTY 같은 연속된 문구가 아니어야 합니다.';
$messages['passwordnocommon'] = '암호는 자주 쓰이는 단어 또는 이름을 포함할 수 없습니다.';
$messages['passwordforbidden'] = '암호가 금지된 문자을 포함하고 있습니다.';
$messages['firstloginchange'] = '처음 로그인하셨습니다. 암호를 변경해주세요.';
$messages['disablednotice'] = '시스템이 현재 유지보수 중이며 암호 변경이 일시적으로 불가능합니다. 모든 것이 조만간 정상화 될 예정입니다. 불편을 끼쳐드려 죄송합니다.';
$messages['passwinhistory'] = '이 암호는 이미 이전에 사용됐습니다.';
$messages['samepasswd'] = '새로운 암호는 예전 암호와 달라야 합니다.';
$messages['passwdexpirewarning'] = '경고! 암호가 곧 만료됩니다. $expirationdatetime 이전에 변경하십시오.';
$messages['passwdexpired'] = '암호가 만료됐습니다. 지금 변경하셔야 합니다!';
$messages['passwdconstraintviolation'] = '암호 제약 위반. 암호가 취약한 것 같습니다.';
$messages['pwned_mustnotbedisclosed'] = '<a href="$href" target="_blank">흔히 알려지지</a> 않은 암호여야 합니다.';
$messages['pwned_isdisclosed'] = '이것은 흔히 알려진 암호입니다.';
$messages['pwned_fetcherror'] = '암호 복잡성을 검증하는데 실패함.';
@@ -0,0 +1,34 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Şîfreyê biguherîne';
$labels['curpasswd'] = 'Şîfreya niha:';
$labels['newpasswd'] = 'Şîfreya nû:';
$labels['confpasswd'] = 'Şîfreya nû bipejirîne:';
$messages['nopassword'] = 'Şîfreya nû binivîse.';
$messages['nocurpassword'] = 'Şîfreya niha binivîse.';
$messages['passwordincorrect'] = 'Şîfreya niha xelet e.';
$messages['passwordinconsistency'] = 'Şîfre hevdu nagirin, dîsa biceribîne.';
$messages['crypterror'] = 'Şîfreya nû nehat tomarkirin. Fonksiyona şîfrekirinê hat jibîrkirin.';
$messages['connecterror'] = 'Şîfreya nû nehat tomarkirin. Çewtiya girêdanê.';
$messages['internalerror'] = 'Şîfre nehat tomarkirin.';
$messages['passwordshort'] = 'Divê şîfre ji $length karakteran kêmtir nebe.';
$messages['passwordweak'] = 'Divê di şîfreyê de herî kêm hejmarek û karakterekî xalbendiyê hebe.';
$messages['passwordtooweak'] = 'Şîfre pir hêsan e.';
$messages['passwordnoseq'] = 'Divê şîfre ne rêzek mîna 123456 an QWERTY be.';
$messages['passwordnocommon'] = 'Divê şîfre ne peyvek an navek hevpar be.';
$messages['passwordforbidden'] = 'Şîfre karakterên qedexe dihewîne.';
$messages['firstloginchange'] = 'Ev têketina te ya yekemîn e. Ji kerema xwe şîfreya xwe biguherîne.';
@@ -0,0 +1,28 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'گۆڕینی تێپەڕەوشە';
$labels['curpasswd'] = 'تێپەڕەوشەی ئێستا:';
$labels['newpasswd'] = 'تێپەڕەوشەی نوێ:';
$labels['confpasswd'] = 'پشتڕاستکردنەوەی تێپەڕەوشەی نوێ:';
$messages['nopassword'] = 'تکایە تێپەڕەوشەی نوێ بنووسە.';
$messages['nocurpassword'] = 'تکایە تێپەڕەوشەی ئێستا بنووسە.';
$messages['passwordincorrect'] = 'تێپەڕەوشەی ئێستا نادروستە.';
$messages['passwordinconsistency'] = 'تێپەڕەوشەکان هاویەک نین، تکایە دووبارە هەوڵبدەوە.';
$messages['connecterror'] = 'نەتوانرا تێپەڕەوشەی نوێ پاشەکەوت بکرێت. هەڵەی پەیوەندیکردن.';
$messages['internalerror'] = 'نەتوانرا تێپەڕەوشەی نوێ پاشەکەوت بکرێت.';
$messages['passwordforbidden'] = 'تێپەڕەوشە نووسەی ڕێپێنەدراوی تێدایە.';
$messages['firstloginchange'] = 'ئەمە یەکەم چوونەژوورەوەتە. تکایە تێپەڕەوشەکەت بگۆڕە.';
@@ -0,0 +1,29 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['curpasswd'] = 'Aktuellt Passwuert:';
$labels['newpasswd'] = 'Neit Passwuert:';
$labels['confpasswd'] = 'Neit Passwuert bestätegen:';
$messages['nopassword'] = 'Gëff wann ech gelift en neit Passwuert an.';
$messages['nocurpassword'] = 'Gëff wann ech gelift dat aktuellt Passwuert an.';
$messages['passwordincorrect'] = 'Aktuellt Passwuert net korrekt.';
$messages['passwordinconsistency'] = 'D\'Passwierder passen net, probéier wann ech gelift nach eng Kéier.';
$messages['crypterror'] = 'Passwuert konnt net gespäichert ginn. Verschlësselungs-Funktioun feelt.';
$messages['connecterror'] = 'Passwuert konnt net gespäichert ginn. Connectiouns-Feeler.';
$messages['internalerror'] = 'Neit Passwuert konnt net gespäichert ginn.';
$messages['passwordshort'] = 'D\'Passwuert muss mindestens $length Zeeche laang sinn.';
$messages['passwordweak'] = 'D\'Passwuert muss mindestens eng Zuel an ee Sazzeechen enthalen.';
$messages['passwordforbidden'] = 'D\'Passwuert enthält verbueden Zeechen.';
@@ -0,0 +1,42 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Keisti slaptažodį';
$labels['curpasswd'] = 'Dabartinis slaptažodis:';
$labels['newpasswd'] = 'Naujasis slaptažodis:';
$labels['confpasswd'] = 'Pakartokite naująjį slaptažodį:';
$messages['nopassword'] = 'Prašom įvesti naująjį slaptažodį.';
$messages['nocurpassword'] = 'Prašom įvesti dabartinį slaptažodį.';
$messages['passwordincorrect'] = 'Dabartinis slaptažodis neteisingas.';
$messages['passwordinconsistency'] = 'Slaptažodžiai nesutapo. Bandykite dar kartą.';
$messages['crypterror'] = 'Nepavyko įrašyti naujojo slaptažodžio. Trūksta šifravimo funkcijos.';
$messages['connecterror'] = 'Nepavyko įrašyti naujojo slaptažodžio. Ryšio klaida.';
$messages['internalerror'] = 'Nepavyko įrašyti naujojo slaptažodžio.';
$messages['passwordshort'] = 'Slaptažodis turi būti sudarytas bent iš $length simbolių.';
$messages['passwordweak'] = 'Slaptažodyje turi būti bent vienas skaitmuo ir vienas skyrybos ženklas.';
$messages['passwordtooweak'] = 'Slaptažodis pernelyg silpnas.';
$messages['passwordnoseq'] = 'Slaptažodis neturėtų būti seka, kaip, pavyzdžiui, 123456 ar QWERTY.';
$messages['passwordnocommon'] = 'Slaptažodis neturėtų būti įprastas žodis ar pavadinimas.';
$messages['passwordforbidden'] = 'Slaptažodyje rasta neleistinų simbolių.';
$messages['firstloginchange'] = 'Tai yra pirmasis jūsų prisijungimas. Prašau, pasikeiskite savo slaptažodį.';
$messages['disablednotice'] = 'Sistema šiuo metu tvarkoma ir slaptažodžio pakeitimas negalimas. Netrukus viskas turėtų grįžti į įprastą būseną. Atsiprašome dėl nepatogumų.';
$messages['passwinhistory'] = 'Šis slaptažodis jau buvo naudotas anksčiau.';
$messages['samepasswd'] = 'Naujas slaptažodis turi būti kitoks nei senasis.';
$messages['passwdexpirewarning'] = 'Įspėjimas! Jūsų slaptažodis greitai nustos galioti, pakeiskite jį iki $expirationdatetime.';
$messages['passwdexpired'] = 'Jūsų slaptažodis nebegalioja, jūs turite pakeisti jį dabar!';
$messages['passwdconstraintviolation'] = 'Slaptažodžio apribojimų pažeidimas. Tikriausiai, slaptažodis pernelyg silpnas.';
$messages['pwned_isdisclosed'] = 'Šis slaptažodis yra plačiai žinomas.';
$messages['pwned_fetcherror'] = 'Nepavyko patikrinti slaptažodžio stiprumo.';
@@ -0,0 +1,42 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Mainīt paroli';
$labels['curpasswd'] = 'Pašreizējā parole:';
$labels['newpasswd'] = 'Jaunā parole:';
$labels['confpasswd'] = 'Apstiprināt jauno paroli:';
$messages['nopassword'] = 'Lūdzu ievadiet jauno paroli.';
$messages['nocurpassword'] = 'Lūdzu ievadiet pašreizējo paroli.';
$messages['passwordincorrect'] = 'Pašreizējā parole nav pareiza.';
$messages['passwordinconsistency'] = 'Paroles nesakrīt. Lūdzu, ievadiet vēlreiz.';
$messages['crypterror'] = 'Nevarēja saglabāt jauno paroli. Trūkst kriptēšanas funkcijas.';
$messages['connecterror'] = 'Nevarēja saglabāt jauno paroli. Savienojuma kļūda.';
$messages['internalerror'] = 'Nevarēja saglabāt jauno paroli.';
$messages['passwordshort'] = 'Jaunajai parolei jābūt vismaz $length simbolu garai.';
$messages['passwordweak'] = 'Jaunajai parolei jāsatur vismaz viens cipars un speciālais simbols.';
$messages['passwordtooweak'] = 'Parole ir pārāk nedroša.';
$messages['passwordnoseq'] = 'Parolei nevajadzētu būt vienkāršai secībai kā, piemēram, 123456 vai QWERTY.';
$messages['passwordnocommon'] = 'Parolei nevajadzētu būt parastam vārdam vai nosaukumam.';
$messages['passwordforbidden'] = 'Parole satur neatļautus simbolus.';
$messages['firstloginchange'] = 'Jūs autorizējaties pirmo reizi. Lūdzu nomainite savu paroli.';
$messages['disablednotice'] = 'Sistēma uz doto brīdi atrodas apkopes režīmā un paroles maiņa nav iespējama. Lūdzu mēginiet vēlāk. Atvainojamies par sagādātajām neērtībām.';
$messages['passwinhistory'] = 'Šī parole agrāk jau ir tikusi izmantota.';
$messages['samepasswd'] = 'Jaunā parole nedrīkst būt tāda pati kā vecā.';
$messages['passwdexpirewarning'] = 'UZMANĪBU! Jūsu parolei drīz beigsies derīguma termiņš, lūdzu nomainiet to pirms $expirationdatetime.';
$messages['passwdexpired'] = 'Jūsu parolei ir beidzies derīguma termiņš un Jums tā tagad ir jānomaina.';
$messages['passwdconstraintviolation'] = 'Paroles veidošanas nosacījumu pārkāpums. Parole, iespējams, pārāk nedroša.';
$messages['pwned_isdisclosed'] = 'Šī ir vispārzināma parole.';
$messages['pwned_fetcherror'] = 'Neizdevās pārbaudīt paroles drošumu.';
@@ -0,0 +1,37 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Променете лозинка';
$labels['curpasswd'] = 'Сегашна лозинка';
$labels['newpasswd'] = 'Нова лозинка';
$labels['confpasswd'] = 'Потврдете ја вашата лозинка';
$messages['nopassword'] = 'Ве молиме внесете нова лозинка';
$messages['nocurpassword'] = 'Ве молиме внесете ја вашата сегашна лозинка.';
$messages['passwordincorrect'] = 'Сегашната лозинка е неточна.';
$messages['passwordinconsistency'] = 'Лозинките не се совпаѓаат, ве молиме обидете се повторно.';
$messages['crypterror'] = 'Новата лозинка не е зачувана. функцијата за енкрипција недостига.';
$messages['connecterror'] = 'Сегашната лозинка неможе да се зачува. Грешка при поврзувањето. ';
$messages['internalerror'] = 'Сегашната лозинка неможе да се зачува.';
$messages['passwordshort'] = 'Лозинката мора да биде минимум $length карактери.';
$messages['passwordweak'] = 'Лозинката мора да содржи барем една бројка и еден интерпункциски знак.';
$messages['passwordforbidden'] = 'Лозинката содржи забранети карактери.';
$messages['firstloginchange'] = 'Ова е вашето последно логирање. Ве молиме променете ја вашата лозинка.';
$messages['disablednotice'] = 'Системот се ажурира и не е возможна промена на лозинка во моментов. Ве молиме обидете се покасно. Се извинуваме за непријатностите. ';
$messages['passwinhistory'] = 'Лозинката е предходно употребувана.';
$messages['samepasswd'] = 'Новата лозинка мора да биде различна од старата.';
$messages['passwdexpirewarning'] = 'Предупредување ! Вашата лозинка наскоро истекува, ве молиме изменете ја пред $expirationdatetime.';
$messages['passwdexpired'] = 'Вашата лозинка е истечена, морате да ја промените ! ';
$messages['passwdconstraintviolation'] = 'Пасвордот е наришен. Пасвордот веројатно е слаб';
@@ -0,0 +1,31 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'രഹസ്യവാക്ക് മാറ്റുക';
$labels['curpasswd'] = 'ഇപ്പോഴത്തെ രഹസ്യവാക്ക്';
$labels['newpasswd'] = 'പുതിയ രഹസ്യവാക്ക്';
$labels['confpasswd'] = 'പുതിയ രഹസ്യവാക്ക് സ്ഥിരീകരിക്കുക';
$messages['nopassword'] = 'ദയവായി പുതിയ രഹസ്യവാക്ക് നൽകുക';
$messages['nocurpassword'] = 'ദയവായി ഇപ്പോഴത്തെ രഹസ്യവാക്ക് നൽകുക';
$messages['passwordincorrect'] = 'ഇപ്പോഴത്തെ രഹസ്യവാക്ക് തെറ്റാണ്.';
$messages['passwordinconsistency'] = 'രഹസ്യവാക്കുകൾ ചേരുന്നില്ല, ദയവായി വീണ്ടും ശ്രമിക്കുക';
$messages['crypterror'] = 'പുതിയ രഹസ്യവാക്ക് സൂക്ഷിക്കാൻ സാധിച്ചില്ല. എൻക്രിപ്ഷൻ ഫങ്ങ്ഷൻ ലഭ്യമല്ല.';
$messages['connecterror'] = 'പുതിയ രഹസ്യവാക്ക് സൂക്ഷിക്കാൻ സാധിച്ചില്ല. ബന്ധം സ്ഥാപിക്കുന്നതിൽ പിഴവ്.';
$messages['internalerror'] = 'പുതിയ രഹസ്യവാക്ക് സൂക്ഷിക്കാൻ സാധിച്ചില്ല.';
$messages['passwordshort'] = 'രഹസ്യവാക്കിനു് കുറഞ്ഞത് $length അക്ഷരങ്ങൾ നീളം വേണം';
$messages['passwordweak'] = 'രഹസ്യവാക്കിൽ കുറഞ്ഞത് ഒരു സംഖ്യയും, ഒരു പ്രത്യേക അക്ഷരവും വേണം';
$messages['passwordforbidden'] = 'രഹസ്യവാക്കിൽ അനുവദനീയമല്ലാത്ത അക്ഷരങ്ങൾ ഉണ്ട്';
$messages['firstloginchange'] = 'ഇത് താങ്കളുടെ ആദ്യത്തെ പ്രവേശനമാണ്. ദയവായി താങ്കളുടെ രഹസ്യവാക്ക് മാറ്റുക.';
@@ -0,0 +1,31 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Нууц үг солих';
$labels['curpasswd'] = 'Одоогийн нууц үг:';
$labels['newpasswd'] = 'Шинэ нууц үг:';
$labels['confpasswd'] = 'Шинэ нууц үгийг батлах';
$messages['nopassword'] = 'Шинэ нууц үгээ оруулна уу.';
$messages['nocurpassword'] = 'Одоогийн нууц үгээ оруулна уу.';
$messages['passwordincorrect'] = 'Одоогийн нууц үг таарахгүй байна.';
$messages['passwordinconsistency'] = 'Нууц үгнүүд хоорондоо таарахгүй байна, дахин оролдоно уу.';
$messages['crypterror'] = 'Шинэ нууц үгийг хадгалж чадсангүй. Шифрлэлтийн функц олдоогүй.';
$messages['connecterror'] = 'Шинэ нууц үгийг хадгалж чадсангүй. Холболтын алдаа.';
$messages['internalerror'] = 'Шинэ нууц үгийг хадгалж чадахгүй байна.';
$messages['passwordshort'] = 'Нууц үг хамгийн богинодоо $length урттай байх ёстой.';
$messages['passwordweak'] = 'Нууц үг дор хаяж нэг тоо ба нэг цэг, таслал зэрэг тэмдэгт агуулах ёстой.';
$messages['passwordforbidden'] = 'Нууц үг зөвшөөрөгдөөгүй тэмдэгт агуулж байна.';
$messages['firstloginchange'] = 'Энэ бол таны анхны нэвтрэлт. Нууц үгээ солино уу.';
@@ -0,0 +1,42 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Bytt passord';
$labels['curpasswd'] = 'Nåværende passord:';
$labels['newpasswd'] = 'Nytt passord:';
$labels['confpasswd'] = 'Bekreft nytt passord';
$messages['nopassword'] = 'Vennligst skriv inn nytt passord';
$messages['nocurpassword'] = 'Vennligst skriv inn nåværende passord';
$messages['passwordincorrect'] = 'Nåværende passord er feil.';
$messages['passwordinconsistency'] = 'Passordene er ikke like, vennligst prøv igjen.';
$messages['crypterror'] = 'Kunne ikke lagre nytt passord. Krypteringsfunksjonen mangler.';
$messages['connecterror'] = 'Kunne ikke lagre nytt passord. Tilkoblingsfeil.';
$messages['internalerror'] = 'Kunne ikke lagre nytt passord';
$messages['passwordshort'] = 'Passordet må minimum inneholde $length tegn.';
$messages['passwordweak'] = 'Passordet må inneholde minst ett tall og ett tegnsettingssymbol.';
$messages['passwordtooweak'] = 'Passordet er for svakt.';
$messages['passwordnoseq'] = 'Passordet burde ikke være en setning slik som 123456 eller QWERTY.';
$messages['passwordnocommon'] = 'Passordet burde ikke være et ord eller navn.';
$messages['passwordforbidden'] = 'Passordet inneholder forbudte tegn.';
$messages['firstloginchange'] = 'Dette er din første innlogging. Vennligst bytt ditt passord.';
$messages['disablednotice'] = 'Systemet er under vedlikehold og man kan ikke endre passord for øyeblikket. Alt skal være tilbake til normalt snart. Vi beklager de ulempene dette måtte medføre.';
$messages['passwinhistory'] = 'Dette passordet er benyttet tidligere.';
$messages['samepasswd'] = 'Det nye passordet må være anderledes fra det gamle.';
$messages['passwdexpirewarning'] = 'Advarsel! Ditt passord løper snart ut, bytt det før $expirationdatetime.';
$messages['passwdexpired'] = 'Ditt passord har løpt ut, du må bytte det nå!';
$messages['passwdconstraintviolation'] = 'Brudd på passordbegrensning. Passordet er sannsynligvis for svakt.';
$messages['pwned_isdisclosed'] = 'Dette passordet er allment kjent.';
$messages['pwned_fetcherror'] = 'Feilet i verifiseringen av passordstyrke.';
@@ -0,0 +1,32 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Wijzig wachtwoord';
$labels['curpasswd'] = 'Huidig wachtwoord:';
$labels['newpasswd'] = 'Nieuw wachtwoord:';
$labels['confpasswd'] = 'Bevestig nieuw wachtwoord:';
$messages['nopassword'] = 'Voeg aub nieuw wachtwoord in.';
$messages['nocurpassword'] = 'Voeg aub huidig wachtwoord in.';
$messages['passwordincorrect'] = 'Huidig wachtwoord incorrect.';
$messages['passwordinconsistency'] = 'Wachtwoorden komen niet overeen, probeer nogmaals.';
$messages['crypterror'] = 'Nieuw wachtwoord niet bewaard. Encryptie-functie ontbreekt.';
$messages['connecterror'] = 'Nieuw wachtwoord niet bewaard. Verbindingsfout.';
$messages['internalerror'] = 'Nieuw wachtwoord niet bewaard.';
$messages['passwordshort'] = 'Wachtwoord moet ten minste $length tekens lang zijn.';
$messages['passwordweak'] = 'Wachtwoord moet ten minste één getal en één leesteken bevatten.';
$messages['passwordforbidden'] = 'Wachtwoord bevat ongeldige tekens.';
$messages['firstloginchange'] = 'Dit is uw eerste login. Gelieve uw wachtwoord te wijzigen.';
$messages['disablednotice'] = 'Het systeem is momenteel in onderhoud en het wijzigen van een wachtwoord is momenteel niet mogelijk. Alles zou binnenkort terug normaal moeten werken. We verontschuldigen ons voor het ongemak.';
@@ -0,0 +1,42 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Wijzig wachtwoord';
$labels['curpasswd'] = 'Huidig wachtwoord:';
$labels['newpasswd'] = 'Nieuw wachtwoord:';
$labels['confpasswd'] = 'Bevestig nieuw wachtwoord:';
$messages['nopassword'] = 'Vul uw nieuwe wachtwoord in.';
$messages['nocurpassword'] = 'Vul uw huidige wachtwoord in.';
$messages['passwordincorrect'] = 'Huidig wachtwoord is onjuist.';
$messages['passwordinconsistency'] = 'Wachtwoorden komen niet overeen, probeer het opnieuw.';
$messages['crypterror'] = 'Nieuwe wachtwoord kan niet opgeslagen worden; de server mist een versleutelfunctie.';
$messages['connecterror'] = 'Nieuwe wachtwoord kan niet opgeslagen worden; verbindingsfout.';
$messages['internalerror'] = 'Uw nieuwe wachtwoord kan niet worden opgeslagen.';
$messages['passwordshort'] = 'Het wachtwoord moet minimaal $length tekens lang zijn.';
$messages['passwordweak'] = 'Het wachtwoord moet minimaal één cijfer en één leesteken bevatten.';
$messages['passwordtooweak'] = 'Uw wachtwoord is niet sterk genoeg.';
$messages['passwordnoseq'] = 'Uw wachtwoord mag geen opeenvolging zijn zoals 123456 of AZERTY.';
$messages['passwordnocommon'] = 'Uw wachtwoord mag geen veel voorkomende naam of tekst zijn.';
$messages['passwordforbidden'] = 'Het wachtwoord bevat tekens die niet toegestaan zijn.';
$messages['firstloginchange'] = 'Dit is uw eerste aanmelding. Verander uw wachtwoord alstublieft.';
$messages['disablednotice'] = 'Het systeem is momenteel in onderhoud en wachtwoord wijzigen is op dit moment dus niet mogelijk. Alles werkt binnenkort weer naar behoren. Onze excuses voor het ongemak.';
$messages['passwinhistory'] = 'Dit wachtwoord is al eerder gebruikt.';
$messages['samepasswd'] = 'Het nieuwe paswoord dient verschillend ten opzichte van de oude te zijn.';
$messages['passwdexpirewarning'] = 'Waarschuwing! je wachtwoord verloopt binnenkort, Wijzig het voor $expirationdatetime.';
$messages['passwdexpired'] = 'Je wachtwoord is verlopen, je dient het nu te wijzigen!';
$messages['passwdconstraintviolation'] = 'Wachtwoord voldoet niet aan beleid. Waarschijnlijk te zwak.';
$messages['pwned_isdisclosed'] = 'Dit wachtwoord is algemeen bekend.';
$messages['pwned_fetcherror'] = 'De wachtwoordsterkte kon niet geverifieerd worden.';
@@ -0,0 +1,29 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['curpasswd'] = 'Noverande passord:';
$labels['newpasswd'] = 'Nytt passord:';
$labels['confpasswd'] = 'Bekreft nytt passord';
$messages['nopassword'] = 'Venlegast skriv inn nytt passord.';
$messages['nocurpassword'] = 'Venlegast skriv inn noverande passord.';
$messages['passwordincorrect'] = 'Noverande passord er feil.';
$messages['passwordinconsistency'] = 'Passorda er ikkje like, venlegast prøv igjen.';
$messages['crypterror'] = 'Kunne ikkje lagre nytt passord. Krypteringsfunksjonen manglar.';
$messages['connecterror'] = 'Kunne ikkje lagre nytt passord. Tilkoblingsfeil.';
$messages['internalerror'] = 'Kunne ikkje lagre nytt passord.';
$messages['passwordshort'] = 'Passordet må minimum innehalde $length teikn.';
$messages['passwordweak'] = 'Passordet må innehalde minst eitt tal og eitt skilleteikn.';
$messages['passwordforbidden'] = 'Passordet inneheld forbodne teikn.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Zmiana hasła';
$labels['curpasswd'] = 'Aktualne hasło:';
$labels['newpasswd'] = 'Nowe hasło:';
$labels['confpasswd'] = 'Potwierdź hasło:';
$messages['nopassword'] = 'Wprowadź nowe hasło.';
$messages['nocurpassword'] = 'Wprowadź aktualne hasło.';
$messages['passwordincorrect'] = 'Błędne aktualne hasło, spróbuj ponownie.';
$messages['passwordinconsistency'] = 'Hasła nie pasują, spróbuj ponownie.';
$messages['crypterror'] = 'Nie udało się zapisać nowego hasła. Brak funkcji kodującej.';
$messages['connecterror'] = 'Nie udało się zapisać nowego hasła. Błąd połączenia.';
$messages['internalerror'] = 'Nie udało się zapisać nowego hasła.';
$messages['passwordshort'] = 'Hasło musi posiadać co najmniej $length znaków.';
$messages['passwordweak'] = 'Hasło musi zawierać co najmniej jedną cyfrę i znak interpunkcyjny.';
$messages['passwordtooweak'] = 'Hasło jest zbyt słabe.';
$messages['passwordnoseq'] = 'Hasło nie powinno być sekwencją typu 123456 albo QWERTY.';
$messages['passwordnocommon'] = 'Hasło nie może być zwykłym słowem lub nazwą.';
$messages['passwordforbidden'] = 'Hasło zawiera niedozwolone znaki.';
$messages['firstloginchange'] = 'To jest twoje pierwsze logowanie. Proszę zmień hasło.';
$messages['disablednotice'] = 'System jest w trakcie konserwacji i zmiana hasła w tym momencie nie jest możliwa. Wszystko powinno wrócić do normy w niedługim czasie. Przepraszamy za wszelkie niedogodności';
$messages['passwinhistory'] = 'To hasło było już wcześniej użyte';
$messages['samepasswd'] = 'Nowe hasło musi być różne od poprzednich.';
$messages['passwdexpirewarning'] = 'Uwaga! Twoje hasło wkrótce wygaśnie, zmień je przed $expirationdatetime.';
$messages['passwdexpired'] = 'Twoje hasło wygasło, musisz je zmienić.';
$messages['passwdconstraintviolation'] = 'Naruszenie ograniczeń hasła. Prawdopodobnie jest zbyt słabe.';
$messages['pwned_mustnotbedisclosed'] = 'Hasło nie może być <a href="$href" target="_blank">powszechnie znane</a>.';
$messages['pwned_isdisclosed'] = 'To hasło jest powszechnie znane.';
$messages['pwned_fetcherror'] = 'Nie udało się zweryfikować siły hasła.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Alterar a senha';
$labels['curpasswd'] = 'Senha atual:';
$labels['newpasswd'] = 'Nova senha:';
$labels['confpasswd'] = 'Confirmar nova senha:';
$messages['nopassword'] = 'Por favor, informe a nova senha.';
$messages['nocurpassword'] = 'Por favor, informe a senha atual.';
$messages['passwordincorrect'] = 'Senha atual incorreta.';
$messages['passwordinconsistency'] = 'Senhas não combinam, por favor tente novamente.';
$messages['crypterror'] = 'Não foi possível gravar a nova senha. Função de criptografia ausente.';
$messages['connecterror'] = 'Não foi possível gravar a nova senha. Erro de conexão.';
$messages['internalerror'] = 'Não foi possível gravar a nova senha.';
$messages['passwordshort'] = 'A senha precisa ter ao menos $length caracteres.';
$messages['passwordweak'] = 'A senha precisa conter ao menos um número e um caractere de pontuação.';
$messages['passwordtooweak'] = 'Senha fraca demais.';
$messages['passwordnoseq'] = 'Senha não deve ser uma sequência como 123456 ou QWERTY.';
$messages['passwordnocommon'] = 'Senha não deve ser uma palavra comum ou nome.';
$messages['passwordforbidden'] = 'A senha contém caracteres proibidos.';
$messages['firstloginchange'] = 'Este é o seu primeiro acesso. Por favor altere sua senha.';
$messages['disablednotice'] = 'O sistema está em manutenção e a senha não pode ser alterada no momento. Tudo voltará ao normal em breve. Pedimos desculpas pelo inconveniente.';
$messages['passwinhistory'] = 'Esta senha já foi usada antes.';
$messages['samepasswd'] = 'A nova senha deve ser diferente da antiga.';
$messages['passwdexpirewarning'] = 'Atenção! Sua senha vai expirar em breve, altere ela antes de $expirationdatetime.';
$messages['passwdexpired'] = 'Sua senha expirou, você precisa alterá-la agora!';
$messages['passwdconstraintviolation'] = 'Restrição de senha violada. Senha provavelmente muito fraca.';
$messages['pwned_mustnotbedisclosed'] = 'A senha não deve ser <a href="$href" target="_blank">vulgarmente conhecida</a>.';
$messages['pwned_isdisclosed'] = 'Esta senha é vulgarmente conhecida.';
$messages['pwned_fetcherror'] = 'Falha ao verificar a força da senha.';
@@ -0,0 +1,43 @@
<?php
/*
+-----------------------------------------------------------------------+
| Localization file of the Roundcube Webmail Password plugin |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/
$labels['changepasswd'] = 'Alterar senha';
$labels['curpasswd'] = 'Senha actual:';
$labels['newpasswd'] = 'Nova senha:';
$labels['confpasswd'] = 'Confirmar senha:';
$messages['nopassword'] = 'Introduza a nova senha.';
$messages['nocurpassword'] = 'Introduza a senha atual.';
$messages['passwordincorrect'] = 'Senha atual incorreta.';
$messages['passwordinconsistency'] = 'As senhas não coincidem, tente novamente.';
$messages['crypterror'] = 'Não foi possível guardar a nova senha. Função de criptografia em falta.';
$messages['connecterror'] = 'Não foi possível guardar a nova senha. Erro de ligação.';
$messages['internalerror'] = 'Não foi possível guardar a nova senha.';
$messages['passwordshort'] = 'A senha deve ter pelo menos $length caracteres';
$messages['passwordweak'] = 'A senha deve incluir pelo menos um número e um sinal de pontuação.';
$messages['passwordtooweak'] = 'Senha demasiado fraca';
$messages['passwordnoseq'] = 'A senha não deve ser uma sequência como 123456 ou QWERTY.';
$messages['passwordnocommon'] = 'A senha não deve ser uma palavra ou nome comum.';
$messages['passwordforbidden'] = 'A senha contém caracteres não suportados.';
$messages['firstloginchange'] = 'Este é o seu primeiro acesso. Por favor, altere a sua senha.';
$messages['disablednotice'] = 'O sistema está em manutenção e a alteração da password não é possível neste momento. Tudo deve volta ao normal em breve. Pedimos desculpas por qualquer inconveniente.';
$messages['passwinhistory'] = 'Esta senha já foi usada anteriormente.';
$messages['samepasswd'] = 'A nova senha tem de ser diferente da antiga.';
$messages['passwdexpirewarning'] = 'Aviso! A sua senha irá expirar em breve. Deve alterá-la antes de $expirationdatetime.';
$messages['passwdexpired'] = 'A sua senha expirou. Tem de alterá-la agora!';
$messages['passwdconstraintviolation'] = 'Violação da limitação de senha. Senha provavelmente muito fraca.';
$messages['pwned_mustnotbedisclosed'] = 'A password não deve ser <a href="$href" target="_blank">vulgarmente conhecida</a>.';
$messages['pwned_isdisclosed'] = 'Esta senha é vulgarmente conhecida.';
$messages['pwned_fetcherror'] = 'Falha ao verificar a força da senha.';

Some files were not shown because too many files have changed in this diff Show More