mirror of
https://github.com/nextcloud/server.git
synced 2026-06-09 08:44:07 -04:00
Merge pull request #29837 from nextcloud/fix/user_ldap-check-cache
This commit is contained in:
commit
388fa06695
3 changed files with 30 additions and 16 deletions
|
|
@ -91,7 +91,7 @@ class CheckUser extends Command {
|
|||
$uid = $input->getArgument('ocName');
|
||||
$this->isAllowed($input->getOption('force'));
|
||||
$this->confirmUserIsMapped($uid);
|
||||
$exists = $this->backend->userExistsOnLDAP($uid);
|
||||
$exists = $this->backend->userExistsOnLDAP($uid, true);
|
||||
if ($exists === true) {
|
||||
$output->writeln('The user is still available on LDAP.');
|
||||
if ($input->getOption('update')) {
|
||||
|
|
|
|||
|
|
@ -296,11 +296,10 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
|
|||
*
|
||||
* @param string|\OCA\User_LDAP\User\User $user either the Nextcloud user
|
||||
* name or an instance of that user
|
||||
* @return bool
|
||||
* @throws \Exception
|
||||
* @throws \OC\ServerNotAvailableException
|
||||
*/
|
||||
public function userExistsOnLDAP($user) {
|
||||
public function userExistsOnLDAP($user, bool $ignoreCache = false): bool {
|
||||
if (is_string($user)) {
|
||||
$user = $this->access->userManager->get($user);
|
||||
}
|
||||
|
|
@ -309,9 +308,11 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
|
|||
}
|
||||
$uid = $user instanceof User ? $user->getUsername() : $user->getOCName();
|
||||
$cacheKey = 'userExistsOnLDAP' . $uid;
|
||||
$userExists = $this->access->connection->getFromCache($cacheKey);
|
||||
if (!is_null($userExists)) {
|
||||
return (bool)$userExists;
|
||||
if (!$ignoreCache) {
|
||||
$userExists = $this->access->connection->getFromCache($cacheKey);
|
||||
if (!is_null($userExists)) {
|
||||
return (bool)$userExists;
|
||||
}
|
||||
}
|
||||
|
||||
$dn = $user->getDN();
|
||||
|
|
@ -389,13 +390,27 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
|
|||
}
|
||||
}
|
||||
|
||||
$marked = $this->ocConfig->getUserValue($uid, 'user_ldap', 'isDeleted', 0);
|
||||
if ((int)$marked === 0) {
|
||||
$this->logger->notice(
|
||||
'User '.$uid . ' is not marked as deleted, not cleaning up.',
|
||||
['app' => 'user_ldap']
|
||||
);
|
||||
return false;
|
||||
$marked = (int)$this->ocConfig->getUserValue($uid, 'user_ldap', 'isDeleted', 0);
|
||||
if ($marked === 0) {
|
||||
try {
|
||||
$user = $this->access->userManager->get($uid);
|
||||
if (($user instanceof User) && !$this->userExistsOnLDAP($uid, true)) {
|
||||
$user->markUser();
|
||||
$marked = 1;
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
$this->logger->debug(
|
||||
$e->getMessage(),
|
||||
['app' => 'user_ldap', 'exception' => $e]
|
||||
);
|
||||
}
|
||||
if ($marked === 0) {
|
||||
$this->logger->notice(
|
||||
'User '.$uid . ' is not marked as deleted, not cleaning up.',
|
||||
['app' => 'user_ldap']
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
$this->logger->info('Cleaning up after user ' . $uid,
|
||||
['app' => 'user_ldap']);
|
||||
|
|
|
|||
|
|
@ -204,11 +204,10 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface,
|
|||
*
|
||||
* @param string|\OCA\User_LDAP\User\User $user either the Nextcloud user
|
||||
* name or an instance of that user
|
||||
* @return boolean
|
||||
*/
|
||||
public function userExistsOnLDAP($user) {
|
||||
public function userExistsOnLDAP($user, bool $ignoreCache = false): bool {
|
||||
$id = ($user instanceof User) ? $user->getUsername() : $user;
|
||||
return $this->handleRequest($id, 'userExistsOnLDAP', [$user]);
|
||||
return $this->handleRequest($id, 'userExistsOnLDAP', [$user, $ignoreCache]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue