PHP + учетные записи пользователей домена Windows 2k3

mitrych

Guest
PHP + учетные записи пользователей домена Windows 2k3

Есть желание разобраться с работой такой вот связки (желание возникло не у меня а у начальства но тем не менее :) ). Все что я пока смог найти по данному вопросу это то что для такой связки необходим сервер LDAP, который видимо придется ставить отдельно. И как тогда работать с учетками пользователей, если они могут поменять например свой пароль? То есть необходимо работать напрямую с контроллером домена. Это во-первых. А во-вторых - никак не получается прикрутить к php dll-ку php_ldap.dll, вываливается ошибка:
Код:
Fatal error: Call to undefined function: ldap_connect() in E:\www\htdocs\ldap\index.php on line 18
Подобная ошибка вываливалась при попытке работать с БД Oracle, но там это решилось методом установки Oracle Client.
Посоветуйте что мне можно предпринять по поводу всего этого, т.к. я не очень представляю даже с чего можно начать.
 

Solovej

Новичок
<?
$connect = ldap_connect("ldap://192.168.x.x"); // must be a valid LDAP server!
ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);
$auth_user = "[email protected]";
$password = "parol";
$r = ldap_bind($connect, $auth_user, $password);
$sr = ldap_search($connect, 'DC=domainname, DC=com', 'CN=*');

$info = ldap_get_entries($connect, $sr);


?>
Получаешь массив, имена c именами полей:
objectclass
cn
sn
physicaldeliveryofficename
givenname
distinguishedname
instancetype
whencreated
whenchanged
displayname
usncreated
memberof
usnchanged
name
objectguid
useraccountcontrol
badpwdcount
codepage
countrycode
badpasswordtime
lastlogoff
lastlogon
pwdlastset
primarygroupid
objectsid
admincount
accountexpires
logoncount
samaccountname
samaccounttype
userprincipalname
objectcategory
lastlogontimestamp

$info[$ldap_i]["name"][0]:
 

Andreika

"PHP for nubies" reader
раньше таки довольно неплохо с учетками мона было работать из командной строки с помощью net.exe
если тока пхп под админом домена запускается %)

net user /domain - список юзеров
PHP:
$users = array();

exec('net user /domain',$out);

for ($i=4; $i<(count($out)-2); $i++) {

   $users =  array_merge($users,explode("\n",wordwrap(iconv("CP866", "Windows-1251", $out[$i]),25,"\n")));
}

print_r($users);
 

mitrych

Guest
Вот что мне выдает PHP при попытке обращения к любой LDAP-функции:
PHP:
Fatal error: Call to undefined function: ldap_connect() in index.php on line 23
Наскока я понимаю это есть следствие кривости рук настройщика вэб-сервера (то есть меня :) ). В php.ini строчка
PHP:
extension=php_ldap.dll
есть и раскоментирована. DLL-ки, необходимые для работы php_ldap.dll скопированы в %windowsroot%\System32 (у меня стоит WinXP SP2). Как я уже говорил такая же проблема была при попытке поюзать поддержку Oracle, но тогда это обошли установкой Oracle client. Есть у кого-нить мысли по поводу того как заставить PHP работать с php_ldap.dll?
 

tulupov

Новичок
У меня W2003 server+ IIS6
Заработало тогда, когда скопировал libeay32.dll и ssleay32.dll не в system32, а именно в system ...
php_ladp.dll нужно (само собой в php.ini прописать) положить в system32.

после этого со свистом!

Примечания по поводу приведённого исходника.
Пароль не потребуется, но user должен быть не залочен ...
Если без пароля, то доступ к LDAP только на чтение ...
В ldap_connect() можно указывать имя без ldap://, зато если порт у неё не стандартный, то его можно указать во второй переменной (не "ldap://mydomain.com:8888", а ldap_connect("mydomain.com","8888");

Вот, если что обращайтесь, перекопал много уже на эту тему ...
 

mitrych

Guest
Автор оригинала: tulupov
У меня W2003 server+ IIS6
Заработало тогда, когда скопировал libeay32.dll и ssleay32.dll не в system32, а именно в system ...
php_ladp.dll нужно (само собой в php.ini прописать) положить в system32.

после этого со свистом!

Примечания по поводу приведённого исходника.
Пароль не потребуется, но user должен быть не залочен ...
Если без пароля, то доступ к LDAP только на чтение ...
В ldap_connect() можно указывать имя без ldap://, зато если порт у неё не стандартный, то его можно указать во второй переменной (не "ldap://mydomain.com:8888", а ldap_connect("mydomain.com","8888");

Вот, если что обращайтесь, перекопал много уже на эту тему ...
Во-первых: у меня все это работает в виде WinXP+Apache.
Во-вторых: разложил DLL-ки как ты сказал, не помогло. В system и в system32 у меня щас лежат и libeay32.dll и ssleay32.dll и php_ladp.dll. Так что не найти их по-моему вообще нереально. :)

Кстати, тут еще не упоминалось, в секции
PHP:
;;;;;;;;;;;;;;;;;;;;;;;;; 
 ; Paths and Directories ; 
 ;;;;;;;;;;;;;;;;;;;;;;;;;
в php.ini опция extension_dir выглядит вот так:
PHP:
extension_dir = "./extensions/"
Может тут косяк?
 

tulupov

Новичок
Конечно
Указывай прямой путь, где твои экстеншены лежат!
что-то типа C:\PHP\ext\
 

mitrych

Guest
Автор оригинала: tulupov
Конечно
Указывай прямой путь, где твои экстеншены лежат!
что-то типа C:\PHP\ext\
нифига не помогает. щас в php.ini оно выглядит так:
PHP:
extension_dir = "C:/Program Files/PHP/extensions/"
 
Сверху