diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml
index 98f849eb81422..63c35a969b0db 100644
--- a/build/psalm-baseline.xml
+++ b/build/psalm-baseline.xml
@@ -5171,7 +5171,8 @@
$this->createUserFromBackend($uid, $password, $backend)
$this->createUserFromBackend($uid, $password, $backend)
-
+
+ checkPassword
checkPassword
countUsers
createUser
diff --git a/lib/private/User/Manager.php b/lib/private/User/Manager.php
index 1d58c68268c6b..8e441e2e41909 100644
--- a/lib/private/User/Manager.php
+++ b/lib/private/User/Manager.php
@@ -231,6 +231,20 @@ public function checkPasswordNoLogging($loginName, $password) {
}
}
+ // since http basic auth doesn't provide a standard way of handling non ascii password we allow password to be urlencoded
+ // we only do this decoding after using the plain password fails to maintain compatibility with any password that happens
+ // to contains urlencoded patterns by "accident".
+ $password = urldecode($password);
+
+ foreach ($this->backends as $backend) {
+ if ($backend->implementsActions(Backend::CHECK_PASSWORD)) {
+ $uid = $backend->checkPassword($loginName, $password);
+ if ($uid !== false) {
+ return $this->getUserObject($uid, $backend);
+ }
+ }
+ }
+
return false;
}