Как выбрать пользователя из Active Directory, зная его логин?

DDT

Новичок
2 Cup

см выше:

1. не могу достучаться до samaccountname. Где его найти?
2. вот моя cn:
[cn] => Array
(
[count] => 1
[0] => Виктор О. Водовозов
)

вообще-то ее мне и надо получить :)

-~{}~ 09.08.05 14:13:

2 Кром.

>Многих полей просто нет. А пример подключения есть на php.net/ldap

Вот пример с php.net:
$ds=ldap_connect("localhost");

Я меня же еще только указан порт:
$ds=ldap_connect("localhost", 389);

Может ты говоришь о LDAP сервере, а не о ActiveDirectory сервере?
 

Cup

Guest
Кром

>USERNAME ну и заодно USERDNSDOMAIN на машине пользователя.
>Это сделать вообще впринципе можно?

Тут речь вообще о другом.

ну а все таки... я недавно занимаюсь php, есть какой нибудь механизм, чтобы эти переменные узнать?
 

Cup

Guest
$sr=ldap_list($ds,$ldap["dc"], "cn="*");
if ($sr!=FALSE)
{
$entry = ldap_get_entries($ds, $sr);
$i=0;
while ( ldap_get_values($ds, $entry[$i],"sAMAccountName")!=$login & $entry["count"]<$i)
{
$i=$i+1;
}
$name=ldap_get_values($ds, $entry[$i],"sAMAccountName";
}

Что нить подобное...

-~{}~ 09.08.05 14:33:

DDT
смотри $_ENV

вот и я так думал.
Нифига... это переменные окружения сервера.
А как пользователя узнать?
 

DDT

Новичок
PHP:
$sr = ldap_list($conn, "dc=domen,dc=ru", "cn=*");
if($sr!=FALSE)
{
  $ent = ldap_get_entries($conn, $sr);
  echo(ldap_get_values($conn, $ent[0], "sAMAccountName")."<br>");	
}
$sr является ссылкой на ресурс
$ent - массив результатов

А вот ldap_get_values ругается:
Warning: ldap_get_values(): supplied argument is not a valid ldap result entry resource

Как же надо?
 

Кром

Новичок
>ну а все таки... я недавно занимаюсь php, есть какой нибудь механизм, чтобы эти переменные узнать?

Cup тебе нужен mod_ntlm, а здесь ты не по делу влез.

>Может ты говоришь о LDAP сервере, а не о ActiveDirectory сервере?

Я говорю о LDAP сервере. Что ты понимаешь под ActiveDirectory сервером, я не знаю.

-~{}~ 09.08.05 14:55:

>Как же надо?

Ты сейчас не тем занимешься. Оставь в покое ldap_get_values и иди узнавать где лежат логины пользователей.
 

DDT

Новичок
2 Кром

>Я говорю о LDAP сервере. Что ты понимаешь под ActiveDirectory сервером, я не знаю.

AD-сервер - это Windows 2003 server с установленной службой Active Directory. На нем авторизуются юзера домена при входе в домен. А LDAP сервер стоит отдельно - в нем храниться адресная книга для почты. Вот.

-~{}~ 09.08.05 15:57:

>Оставь в покое ldap_get_values и иди узнавать где лежат логины пользователей.

Он (админ) к сожалению этого не знает. Он юниксоид по большей части :)
 

Кром

Новичок
AD-сервер - это Windows 2003 server с установленной службой Active Directory. На нем авторизуются юзера домена при входе в домен. А LDAP сервер стоит отдельно - в нем храниться адресная книга для почты. Вот.
Ты путаешь понятия.
Active Directory - это база данных, называемая службой каталогов, которая может строиться на основе того же "Windows Server 2003". Сервер позволяет осуществлять досуп к данным.
При этом, для досупа к ней используют различные API, например Active Directory Service Interfaces (ADSI) или Lightweight Directory Access Protocol (LDAP).

Поэтому, говорить, что "AD-сервер - это Windows 2003 server с установленной службой Active Directory, а LDAP сервер стоит отдельно", совершенно неправильно.


>Он (админ) к сожалению этого не знает. Он юниксоид по большей части

Кто то же должен это знать. Тот кто добавляет туда пользователей, осуществляет интеграцию с OE, обслуживает базу и т.д.
 

DDT

Новичок
>Тот кто добавляет туда пользователей, осуществляет интеграцию с OE

Добавить юзера - одно, нажав три кнопки, а вот знать куда что записалось, да еще у Микрософта - вот это совсем другое :)

>Ты путаешь понятия.

По крайней мере у этих сервакоа адреса в сети разные и юзера авторизуются через вин2003

-~{}~ 09.08.05 16:20:

Мне сказали про MS Resourse Kit. Попробую посмотреть что это такое.

Но это уже не РНР :( - это уже другая песня :)
 

Кром

Новичок
>Добавить юзера - одно, нажав три кнопки, а вот знать куда что записалось, да еще у Микрософта - вот это совсем другое

Человек который умеет нажать три кнопки, это не администратор. Это эникейщик. Найди администратора.

>По крайней мере у этих сервакоа адреса в сети разные и юзера авторизуются через вин2003

У мальчика Вовы и мальчика Пети тоже разные имена. Вова использует Windows, а Петя Linux. Как ни странно от этого один из них не становится девочкой.
 

DDT

Новичок
:)

-~{}~ 09.08.05 16:53:

2 Кром.

>Оставь в покое ldap_get_values и иди узнавать где лежат логины пользователей.

Узнал! Логины точно лежат в sAMAccountname.

Повторяю вопрос из выше:
PHP:
$sr = ldap_list($conn, "dc=domen,dc=ru", "cn=*");
if($sr!=FALSE)
{
  $ent = ldap_get_entries($conn, $sr);
  echo(ldap_get_values($conn, $ent[0], "sAMAccountName")."<br>");    
}
$sr является ссылкой на ресурс
$ent - массив результатов

А вот ldap_get_values ругается:
Warning: ldap_get_values(): supplied argument is not a valid ldap result entry resource

Как же надо?
 

Кром

Новичок
>Узнал! Логины точно лежат в sAMAccountname.
Аллилуйя!

Теперь возьми скрипт, подставь свои значения и ищи нужные тебе поля:
PHP:
<?php

echo "<h3>LDAP query test</h3>";
echo "Connecting ...";
$ds=ldap_connect('server_name');
echo "connect result is " . $ds . "<br />";

if ($ds) 
{ 
	$r=ldap_bind($ds,'user_name@domain_name','pass');
	echo "Bind result is " . var_dump($r) . "<br />";
	$search_string =  "sn=*";
	$sr = ldap_search($ds, 'db_name', $search_string);  	
	echo "Number of entires returned is " . ldap_count_entries($ds, $sr) . "<br />";	
	$info = ldap_get_entries($ds, $sr);
	echo "<pre>";
	for ($i=0; $i<$info["count"]; $i++) 
	{
		print_r($info);		
	}	
	ldap_close($ds);
} 
else 
{
   echo "<h4>Unable to connect to LDAP server</h4>";
}

?>
 

DDT

Новичок
2 Кром.

>Теперь возьми скрипт, подставь свои значения и ищи нужные тебе поля

То же самое.

Нет во всем $info ни разу строчки samaccountname. Она там должна быть (логинился админом)?
 

Кром

Новичок
Да, должно быть. Если там его нет, значит какие то параметры не верны.

>логинился админом
Так ты и есть этот админ? :))
 

DDT

Новичок
2 Кром.
>Да, должно быть. Если там его нет, значит какие то параметры не верны.

Параметры у меня или на сервере вин2003?

>Так ты и есть этот админ? :))

Неа :) У меня есть реквизиты.

2 MiRacle
>измени в скрипте Кром-a фильтр с "sn=*" на "cn=*"

Попробую ...

-~{}~ 10.08.05 08:43:

Попробовал. Выбралась ко всем прочим еще одна запись, у которой нет sn:
[0] => Array
(
[objectclass] => Array
(
[count] => 1
[0] => organizationalRole
)

[0] => objectclass
[cn] => Array
(
[count] => 1
[0] => Manager
)

[1] => cn
[description] => Array
(
[count] => 1
[0] => Directory Manager
)

[2] => description
[count] => 3
[dn] => cn=Manager,dc=astra-korabel,dc=ru
)

Вот, собственно, и все :(

Попробую ldap_get_values().
 

Кром

Новичок
>Параметры у меня или на сервере вин2003?

У тебя. Параметры подключения. Сервер, база, логин, пароль.

>Попробую ldap_get_values().

Ты не понял, эта функция выбирает то же самое.
 

tulupov

Новичок
Я так понимаю, что нужно следующее ...

$who="ivanov" \\это имя входа, samaccountname
$connect = ldap_connect("computer.mydomain.myzone");
\\Контроллер домена в твоей сети

ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);
ldap_bind($connect, "User", "Password");
\\User и password из домена,
\\если доменная структура сложная - несколько поддоменов,
\\то Username должно выглядеть как DOMAIN\User
\\или [email protected]to

$info = ldap_get_entries($connect, ldap_search($connect, "DC=mydomain,DC=myzone", "(samaccountname=".$who.")"));

Получаешь массив $info он трёхмерный, то есть чтобы получить например полное показываемое имя (который при регистрации чела задаёт сис. админ) делаешь следующее:

echo $info[0]["displayname"][0]

Третья часть массива постоянная, вторая содержит поля типа "samaccountname","mail" и т.д.
первое поле - это если бы поиск по LDAP дал бы не одного пользователя ...
Вот в принципе и всё.

Пароли вы никак не вытащите, их можно только сменить. Да и с помощью LDAP этого сделать не удастся ...
Удачи
 
Сверху