При попытке изменить пароль в Roundcube возникает ошибка.
В логах были зафиксированы две ошибки. Ошибка — 1.
roundcube: <gv6q21uo> PHP Error: Failed to load config from /usr/share/apache2/roundcubemail/plugins/password/config.inc.php in /usr/share/apache2/roundcubemail-1.0.4/program/lib/Roundcube/rcube_plugin.php on line 157 (POST /mail/?_task=settings&_action=plugin.password-save)
И ошибка — 2.
DB Error: [1305] FUNCTION roundcubemail.update_passwd does not exist (SQL Query: SELECT update_passwd('$1$NfV14NIM$LdEfsQJB0qHYTTgejf5Cz.', 'roman.zakharchits@centuries-international.com')) in /usr/share/apache2/roundcubemail-1.0.4/program/lib/Roundcube/rcube_db.php on line 542 (POST /mail/?_task=settings&_action=plugin.password-save)
Похоже дело в том, что либо что-то не так с содержимым файлом config.inc.php, либо по каким-то причинам к нему нет доступа. Решение проблемы было следующим. В каталоге /usr/share/apache2/roundcubemail/plugins/password/ есть файл config.inc.php.dist. Им надо заменить файл config.inc.php (предварительно сделав его копию!) и назначить ему нужные права (chown nginx:nginx, например). Со старого файла переписать в новый строчку с конфигурацией $config[‘password_db_dsn’].
На некоторых почтовых серверах файл config.inc.php может находится в другом каталоге.
После замены файла не факт, что всё заработает. В моём случае осталась ошибка — 2. В файле config.inc.php есть конфигурация $config[‘password_query’]. В новом скопированном файле она может быть неверной. Вариантов тут два. Скопировать значение со старого файла config.inc.php. Но мне это не помогло и я прописал такую строчку.
$config['password_query'] = 'UPDATE mailbox SET password=%c WHERE username=%u';
Есть ещё вот такой вариант, но он у меня не заработал:
//$config['password_query'] = "UPDATE vmail.mailbox SET password=%D,passwordlastchange=NOW() WHERE username=%u LIMIT 1";
После этого ошибки в логах пропали и пароль был успешно изменён. Ещё полезным будет проверить остальные переменные конфигурации config.inc.php, например, чтобы нельзя было делать короткий пароль вида 1234. Для этого надо отредактировать переменные:
//минимальная длина пароля $config['password_minimum_length'] = 8; //чтобы новый пароль обязательно содержал буквы и знаки $config['password_require_nonalpha'] = true;