Distinguish wrong credentials from other problems (IMAP)

Verifying login data can fail for a number of reasons like temporary
connection failure to the IMAP server, Internal problems of the IMAP
server, or actually wrong username / password combination.

This change logs the reason for login failures, helping server admins to
diagnose login problems and better support their users.

Ideally, we would have an option to pass the reason upwards, so the
NextCloud login system can show appropriate errors to users attempting
to login.

Signed-off-by: Bjoern Kahl <mls@bjoern-kahl.de>
This commit is contained in:
Bjoern Kahl
2023-05-18 16:49:47 +00:00
parent 455726df6a
commit 69483900d1

View File

@@ -106,9 +106,29 @@ class IMAP extends Base {
$uid = mb_strtolower($uid);
$this->storeUser($uid, $groups);
return $uid;
} elseif ($errorcode === CURLE_COULDNT_CONNECT ||
$errorcode === CURLE_SSL_CONNECT_ERROR ||
$errorcode === 28) {
# This is not defined in PHP-8.x
# 28: CURLE_OPERATION_TIMEDOUT
\OC::$server->getLogger()->error(
'ERROR: Could not connect to imap server via curl: ' . curl_strerror($errorcode),
['app' => 'user_external']
);
} elseif ($errorcode === 9 ||
$errorcode === 67 ||
$errorcode === 94) {
# These are not defined in PHP-8.x
# 9: CURLE_REMOTE_ACCESS_DENIED
# 67: CURLE_LOGIN_DENIED
# 94: CURLE_AUTH_ERROR)
\OC::$server->getLogger()->error(
'ERROR: IMAP Login failed via curl: ' . curl_strerror($errorcode),
['app' => 'user_external']
);
} else {
\OC::$server->getLogger()->error(
'ERROR: Could not connect to imap server via curl: '.curl_error($ch),
'ERROR: IMAP server returned an error: ' . $errorcode . ' / ' . curl_strerror($errorcode),
['app' => 'user_external']
);
}