Я использую PHP для запроса пользователей и их атрибутов в Active Directory. У меня проблема в том, что поле LDAP для Manager Manager не только возвращает имя пользователя, но и путь FQDN (полное доменное имя), как показано ниже:
CN=User Name,OU=Users,OU=companyBranchOffice,OU=companyName,DC=subdomain,DC=domain,DC=com
Результат сохраняется в строке $ depManager. Как я могу отфильтровать только имя пользователя (CN =)?
Заранее спасибо!
Есть моя простая (возможно, не оптимизированная) функция для извлечения информации из DN:
<?php
function getInfosFromDN($dn)
{
$regexCaptures = "/^(CN=.+),(OU=.+),(DC=.+)$/iU";
$CN = preg_replace($regexCaptures, "$1", $dn);
$OU = preg_replace($regexCaptures, "$2", $dn);
$DC = preg_replace($regexCaptures, "$3", $dn);
return array($CN, $OU, $DC);
}
list($CN, $OU, $DC) = getInfosFromDN("CN=User Name,OU=Users,OU=companyBranchOffice,OU=companyName,DC=subdomain,DC=domain,DC=com");
Там есть разные варианты.
CN=
и ,
Или вы можете использовать е. Zend \ Ldap \ Dn как это:
$dn = new \Zend\Ldap\Dn('CN=User Name,OU=Users,OU=companyBranchOffice,OU=companyName,DC=subdomain,DC=domain,DC=com');
echo current($dn->get(0));
// $dn->get(0) will return ['cn' => 'User Name']
// so current($dn->get(0)) will return 'User Name'
Отказ от ответственности: я один из сопровождающих Zend \ Ldap
Я полагаю, вы используете ldap_get_entries для получения атрибута sn / cn / ou / uid?
Возможно, вы можете поэкспериментировать с другими из них (в зависимости от вашей конфигурации, может быть, uid), чтобы получить только настоящее имя пользователя. Нет необходимости в preg_replacing.
Пример:
$sr = ldap_search($ds, $dn, $filter) or die ("bummer");
$results = ldap_get_entries($ds, $sr);
var_dump($results);
Теперь вы можете увидеть, есть ли в вашей базе данных какой-либо атрибут, содержащий значение только имени пользователя, а не всего DN. Если это не сработает, вы всегда можете сделать это вручную, как предложил Гийом.