Обновление проблемы LDAP / PHP для недавно добавленного пользователя - PullRequest
2 голосов
/ 13 сентября 2011

Проект, которым я управлял, столкнулся с проблемой обновления содержимого 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 может вызвать такую ​​проблему?

1 Ответ

0 голосов
/ 19 ноября 2011

Потратил слишком много часов на это ... Просто нужно было увеличить размер поиска в LDAP ... Я думаю, это то, что происходит, когда вам не разрешены инструменты администратора, вы не можете бороться с PHP, пытаясь исправить это, когда это не нужно исправлять. : D

...