Проект, которым я управлял, столкнулся с проблемой обновления содержимого LDAP. Мой сайт использует ldap для составления списка пользователей. Новые пользователи больше не отображаются, но старые пользователи.
Я проследил проблему до ее корней, но я не знаю, что происходит не так. Основные части PHP выглядят так:
public function getMember($type){
$memeber ="";
if($type == "week1"){
$group = $this->ldap->getGroupInfo(1006);
$member = $group["users"];
}else if ($type == "all"){
$group = $this->ldap->getGroupInfo(1008);
$member = $group["users"];
}
var_dump($member[116]);
$i = 0;
foreach($member as &$registered){
$i++;
$uid = $this->ldap->getUidFromUserName($registered);
print_r($uid);
$newInfo = array();
print_r($registered);
if($uid != ""){
$userInfos = $this->ldap->getUserInfo($uid);
$newInfo["uID"] = $uid;
$newInfo["userName"] = $userInfos["userName"];
$newInfo["groups"] = $userInfos["groups"];
$userName = $newInfo["userName"];
} else { false;
}
} }
print_r($member);
$member = array_filter($member);
return $member;
var_dump(&members[116]);
out put show: string 'johnr' (length=5)
johnr - добавленный мною пользователь, которого нет в списке. Это означает, что мой php выше захватывает пользователя. Обычно число, которое появляется, содержит uid, и все эти $ newinfo [...] = ...
Информация. Это не так.
johnr
идентификатор группы 1006 только для информации.
print_r($uid);
показывает UID, но только тех, кто появляется в списке. Значение UID Джона не в этом.
Теперь, если вы посмотрите вниз, там print_r($member);
, который выводит [111] => [112] => [113] => [114] => [115] => [116] => [117] => [118] => [119] => [120] => [121] => [122] => [123] => [124] => )
, все эти числа которого являются только что добавленными номерами массивов новых пользователей (для Джона 116), что должно быть напечатано для каждого из этих номеров массивов, что-то вроде [92] => Array ( [uID] => 2003 [userName] => testr [groups] => Array ( [0] => 1006 )
ПРИМЕЧАНИЕ. Это то, что показано на остальной части печати для всех участников. выше это просто вырезка из print_r для тех, кто не отображается в списке.
Я сделал ldapUserSearch, и информация ldif johnr
account такая же, как и рабочая. Я также сделал ldapGroupSearch и johnr
так же, как рабочие пользователи.
Еще одна интересная мысль: если вы измените код php if if на if($uid != "" || $uid == ""){
, php покажет тех пользователей, которые не отображаются, но имеют нулевое значение. Так что это как-то связано с $uid
. но у johnr есть идентификатор 2099, так что я точно не знаю, почему его нет.
Надеюсь, этого достаточно, чтобы получить помощь. Если у вас есть какие-либо вопросы, пожалуйста, прокомментируйте их ниже, и я сделаю все возможное, чтобы ответить на них.
------ ------ Редактировать /
оказывается, что он не получает uID, имя пользователя или группу из ldap для johnr
, но для каждого рабочего имени ...
он может превратить элемент в массив, так что johnr
будет отображаться там, но после этого johnr
не будет иметь свойств, которые он должен иметь.
Все свойства в ldapUserSearch одинаковы для работающих и неработающих пользователей. Также эти неработающие пользователи находятся в тех же группах, что и работающие.
функция getUidFromUserName
выглядит следующим образом:
public function getUidFromUserName($username) {
if(isset($this->userNames[$username]))
return $this->userNames[$username];
$this->lookupUsers();
if(isset($this->userNames[$username]))
return $this->userNames[$username];
else
return false;
}
Дополнительная информация. Все рабочие и не
рабочие аккаунты отображаются в passwd и в группе с рабочими стандартами.
Я нахожусь на сервере Linux, если нужна эта информация.
Что в LDAP может вызвать такую проблему?