Php ldap создать пользователя

ldap_add

Массив, который определяет информацию о записи. Значения в записи индексируются индивидуальными атрибутами. В случае множественных значений для атрибута, они индексируются с использованием целых чисел, начиная с 0.

$entry [ «attribute1» ] = «value» ;
$entry [ «attribute2» ][ 0 ] = «value1» ;
$entry [ «attribute2» ][ 1 ] = «value2» ;
?>

Массив управляющих констант LDAP для отправки в запросе.

Возвращаемые значения

Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.

Список изменений

Версия Описание
8.1.0 Параметр ldap теперь ожидает экземпляр LDAP\Connection ; ранее ожидался ресурс (resource) ldap link .
8.0.0 controls теперь допускает значение null; ранее значение по умолчанию было [] .
7.3.0 Добавлена поддержка параметра controls

Примеры

Пример #1 Полный пример с проверкой подлинности привязки

$ds = ldap_connect ( «localhost» ); // предположим, что сервер LDAP находится тут

if ( $ds ) // привязка к соответствующему dn для возможности обновления
$r = ldap_bind ( $ds , «cn=root, o=My Company, c=US» , «secret» );

// подготовить данные
$info [ «cn» ] = «John Jones» ;
$info [ «sn» ] = «Jones» ;
$info [ «objectclass» ] = «person» ;

// добавить данные
$r = ldap_add ( $ds , «cn=John Jones, o=My Company, c=US» , $info );

ldap_close ( $ds );
> else echo «Невозможно соединиться с сервером LDAP» ;
>
?>

Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Смотрите также

User Contributed Notes 23 notes

Here is how to add a user with a hashed MD5 password to OpenLDAP. I used this technique to migrate Drupal accounts into OpenLDAP for a single-sign-on solution.

The trick to it is to tell OpenLDAP the hash type (e.g. ) before the password, and also to base64 encode the BINARY hashed result. You cannot just base64 encode what is returned by PHP’s md5() or sha() hash functions, because they return a hexadecimal text string. First you must use pack(«H*», $hash_result) to make that a binary string, THEN you can base64 encode it.

Here is complete code for connecting and adding a user with a hashed password. You don’t have to use , you could pick a different hash if that is what you have. The output from one of these hashed passwords will look like this: bdwD04RS9xMDGVi1n/H36Q==

Finally some caveats: This technique will not work if you hashed the password using a salt value (but Drupal does not). This technique will also certainly not work with active directory, where passwords can definitely only be set over SSL connections and hashing probably works differently.

$ds = ldap_connect($serverAddress);
if ($ds) ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); // otherwise PHP defaults to ldap v2 and you will get a Syntax Error!
$r = ldap_bind($ds, $managerDN, $managerPassword);
$ldaprecord[‘cn’] = $newuser_username;
$ldaprecord[‘givenName’] = $newuser_firstname;
$ldaprecord[‘sn’] = $newuser_surname;
// put user in objectClass inetOrgPerson so we can set the mail and phone number attributes
$ldaprecord[‘objectclass’][0] = «person»;
$ldaprecord[‘objectclass’][1] = «organizationalPerson»;
$ldaprecord[‘objectclass’][2] = «inetOrgPerson»;
$ldaprecord[‘mail’] = $newuser_email_address;
$ldaprecord[‘telephoneNumber’] = $newuser_phone_number;
// and now the tricky part, base64 encode the binary hash result:
$ldaprecord[‘userPassword’] = » . base64_encode(pack(‘H*’,$newuser_md5hashed_password));
// If you have the plain text password instead, you could use:
// $ldaprecord[‘userPassword’] = » . base64_encode(pack(‘H*’,md5($newuser_plaintext_password)));
$r = ldap_add($ds, $base_user_dn, $ldaprecord);
> else

This solution works for us.
In the form the CN and pwdtxt are randomly generated from strict rules.
This script creates 50-60 users i AD pr.day! and never even had a glitch!

## From form
$CN = $_POST [ ‘CN’ ];
$givenName = $_POST [ ‘givenName’ ];
$SN = $_POST [ ‘SN’ ];
$mail = $_POST [ ‘mail’ ];
$Phone = $_POST [ ‘Phone’ ];
$pwdtxt = $_POST [ ‘pwdtxt’ ];

$AD_server = «localhost:390» ; // Local Stunnel —> http://www.stunnel.org/
$AD_Auth_User = «administrator@student.somwhere.com» ; //Administrative user
$AD_Auth_PWD = «duppiduppdupp» ; //The password

$dn = ‘CN=’ . $CN . ‘,OU=Brukere,DC=student,DC=somwhere,DC=com’ ;

## Create Unicode password
$newPassword = «\»» . $pwdtxt . «\»» ;
$len = strlen ( $newPassword );
$newPassw = «» ;

## CONNNECT TO AD
$ds = ldap_connect ( $AD_server );
if ( $ds ) ldap_set_option ( $ds , LDAP_OPT_PROTOCOL_VERSION , 3 ); // IMPORTANT
$r = ldap_bind ( $ds , $AD_Auth_User , $AD_Auth_PWD ); //BIND

$ldaprecord [ ‘cn’ ] = $CN ;
$ldaprecord [ ‘givenName’ ] = $givenName ;
$ldaprecord [ ‘sn’ ] = $SN ;
$ldaprecord [ ‘objectclass’ ][ 0 ] = «top» ;
$ldaprecord [ ‘objectclass’ ][ 1 ] = «person» ;
$ldaprecord [ ‘objectclass’ ][ 1 ] = «organizationalPerson» ;
$ldaprecord [ ‘objectclass’ ][ 2 ] = «user» ;
$ldaprecord [ ‘mail’ ] = $mail ;
$ldaprecord [ ‘telephoneNumber’ ] = $Phone ;
$ldaprecord [ «unicodepwd» ] = $newPassw ;
$ldaprecord [ «sAMAccountName» ] = $CN ;
$ldaprecord [ «UserAccountControl» ] = «512» ;
//This is to prevent the user from beeing disabled. —>
http : //support.microsoft.com/default.aspx?scid=kb;en-us;305144

$r = ldap_add ( $ds , $dn , $ldaprecord );

> else <
echo «cannot connect to LDAP server at $AD_server .» ;
>

?>

This is code example creates a user i AD.
We use this on an internal web page to create
temporary users that kan access the wireless network.
We have a .pl script that deletes the users after 24H.

Try this script if you don’t know how to add an user in the AD Win2K.
To have more informations about the attributes, open the adsiedit console in the Support Tools for Win2K.

$adduserAD[«cn»][0] =
$adduserAD[«instancetype»][0] =
$adduserAD[«samaccountname»][0] =
$adduserAD[«objectclass»][0] = «top»;
$adduserAD[«objectclass»][1] = «person»;
$adduserAD[«objectclass»][2] = «organizationalPerson»;
$adduserAD[«objectclass»][3] = «user»;
$adduserAD[«displayname»][0] =
$adduserAD[«name»][0] =
$adduserAD[«givenname»][0] =
$adduserAD[«sn»][0] =
$adduserAD[«company»][0] =
$adduserAD[«department»][0] =
$adduserAD[«title»][0] =
$adduserAD[«description»][0] =
$adduserAD[«mail»][0] =
$adduserAD[«initials»][0] =
$adduserAD[«samaccountname»][0] =
$adduserAD[«userprincipalname»][0] =
$adduserAD[«profilepath»][0] =
$adduserAD[«manager»][0] = ***Use DistinguishedName***

if (!($ldap = ldap_connect(«localhost»))) <
die («Could not connect to LDAP server»);
>
if (!($res = @ldap_bind($ldap, «user@pc.com», $password))) <
die («Could not bind to the LDAP account»);
>
if (!(ldap_add($ldap, «CN=New User,OU=OU Users,DC=pc,DC=com», $adduserAD))) echo «There is a problem to create the account
echo «Please contact your administrator !»;
exit;
>
ldap_unbind($ldap);

When adding/editing attributes for a user, keep in mind that the ‘memberof’ attribute is a special case. The memberOf attribute is not an accessible attribute of the user schema. To add someone to a group, you have to add the user in the group, and not the group in the user. You can do this by accessing the group attribute ‘member’:

$group_name = «CN=MyGroup,OU=Groups,DC=example,DC=com» ;
$group_info [ ‘member’ ] = $dn ; // User’s DN is added to group’s ‘member’ array
ldap_mod_add ( $connect , $group_name , $group_info );

jharnett at artschool dot com:
For active user in AD u must change «useraccountcontrol» to 512, 512 = enabled, 514 = disabled

I created a simple function that can be called to create global distribution groups in Active Directory:

function ldap_createGroup ( $object_name , $dn , $members , $ldap_conn )
$addgroup_ad [ ‘cn’ ]= » $object_name » ;
$addgroup_ad [ ‘objectClass’ ][ 0 ] = «top» ;
$addgroup_ad [ ‘objectClass’ ][ 1 ] = «group» ;
$addgroup_ad [ ‘groupType’ ]= «2» ;
$addgroup_ad [ ‘member’ ]= $members ;
$addgroup_ad [ «sAMAccountName» ] = $object_name ;

ldap_add ( $ldap_conn , $dn , $addgroup_ad );

if( ldap_error ( $ldap_conn ) == «Success» )
return true ;
else
return false ;
>
?>

You can call this function using the follow code:

$ldap_conn = ldap_bind ();
$object_name = «Test Group» ;
$dn = «CN keyword»>. $object_name . «,OU=PathToAddGroupTo,OU=All Users,DC=YOURDOMAIN,DC=COM» ;
$members [] = «CN=User1,OU=PathToAddGroupTo,OU=All Users,DC=YOURDOMAIN,DC=COM» ;
$members [] = «CN=User2,OU=PathToAddGroupTo,OU=All Users,DC=YOURDOMAIN,DC=COM» ;

ldap_createGroup ( $object_name , $dn , $members , $ldap_conn );
?>

The other function I created is ldap_bind(), and this can be used to bind to an LDAP server:

function ldap_bind ()
$ldap_addr = ‘192.168.1.1’ ; // Change this to the IP address of the LDAP server
$ldap_conn = ldap_connect ( $ldap_addr ) or die( «Couldn’t connect!» );
ldap_set_option ( $ldap_conn , LDAP_OPT_PROTOCOL_VERSION , 3 );
$ldap_rdn = «domain_name\\user_account» ;
$ldap_pass = «user_password» ;

// Authenticate the user against the domain controller
$flag_ldap = ldap_bind ( $ldap_conn , $ldap_rdn , $ldap_pass );
return $ldap_conn ;
>
?>

Источник

Создаем пользователя AD через веб-интерфейс

Создаем пользователя AD через веб-интерфейс

2012-11-29 в 7:57, admin , рубрики: active directory, ldap, php, Веб-разработка, метки: active directory, ldap, PHP

Создаем пользователя AD через веб интерфейс

Не каждый веб-разработчик столкнется с AD хотя бы потому, что модуль для работы с ldap через php должен сперва настроить какой-нибудь администратор сервера. Но иногда это все-таки происходит — в фирме есть хороший админ и потребность в централизованном управлении сотрудниками.

Если сказать очень упрощенно, то именно этим AD и занимается — хранит информацию о сотрудниках и выдает ее разным приложениям и сервисам как база данных, допустим, MySQL. Для настройки и управления AD тоже может быть целый отдельный сотрудник, но реализация доступа через веб-интерфейс предсказуемо ляжет на веб-программиста. И тут могут возникнуть определенные трудности.

Если осознать общие принципы работы AD и реализовать, например, вывод структуры компании в браузер для человека, знакомого с базами данных, будет достаточно просто, то вот организовать ввод уже посложнее. Дело в том, что настоящие специалисты по AD в работе используют десктопные приложения, консоль и VBScript (кажется), и манипулируют пользователями, как объектами, а php-программисту доступны только некоторые функции и передача пользователя в виде массива данных. Определить, какие ключи нужно записать, и в каком формате должны быть значения — задача не самая тривиальная. Поскольку в сети для функции ldap_add() есть всего один пример использования.

Поэтому актуальным является создание еще одного примера — более подробного и со всем «обвесом», чтобы проверить работу можно было без всяких существенных правок.

Будем считать, что сервер у нас уже настроен, доступы получены, и нашему пользователю предоставлены права на запись. Первый этап — подключение — описан в руководствах достаточно подробно:

/* Connection parameters */ $ldap_host = "xxx.local"; # domain controller or ip-address $ldap_port = "389"; # port for connection $ldap_user ="admin@xxx.local"; # AD-user $ldap_pass = "123321";# AD-user's password /* Open connection */ $connect = ldap_connect( $ldap_host, $ldap_port); ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($connect, LDAP_OPT_REFERRALS, 0); $bind = ldap_bind($connect, $ldap_user, $ldap_pass); 

Теперь проверим вывод и построим иерархическое дерево подразделений нашей компании:

    ‘; $result .= ‘
  • ‘.$specific_ou; $result .= build_tree($connect, $specific_ou, $specific_dn); $result .= »; $result .= ‘

В вывод сразу добавляем элементы формы, которые понадобятся нам на следующем этапе. Функция вызывает саму себя, что позволит пройти любой уровень вложенности.
Если все работает, напишем простую форму добавления сотрудника:

/* Output */ echo ' 

Сотрудник


Должность


Номер мобильного телефона

Подразделение

';

А теперь — важная часть: проверка и обработка ввода

/* Input check */ $errors = ''; /* EXAMPLE OF CORRECT POST new_emp: 1 family_name: Фамилия first_name: Имя fathers_name: Отчество position: Врач tel_num: +7(999) 999-9999 dep: Группа по организации Лабораторной диагностики */ if(isset($_POST['new_emp'])) < foreach($_POST as $key =>$value) < if('' == $value) '; break;> else > if(!isset($_POST['dep'])) ';> /* Creating employee */ if('' == $errors) < $trans_family_name = translit($family_name); $trans_first_name = translit($first_name); $trans_fathers_name = translit($fathers_name); $account = $trans_family_name.substr($trans_first_name, 0, 1).substr($trans_fathers_name, 0, 1); $dn = 'CN='.$family_name.' '.$first_name.' '.$fathers_name.','.$dep; //Getting manager $filter = '(&(objectClass=user)(objectCategory=PERSON))'; $sr = ldap_search($connect, $dep, $filter); $info = ldap_get_entries($connect, $sr); //echo Arratomy($info); $manager = $info[0]['manager'][0]; $department = explode(',', $dep); $department = str_replace('OU=', '', $department[0]); $newuser['cn'] = $family_name.' '.$first_name.' '.$fathers_name; $newuser["objectclass"][0] = "top"; $newuser["objectclass"][1] = "person"; $newuser["objectclass"][2] = "organizationalPerson"; $newuser["objectclass"][3] = "user"; $newuser['displayname'] = $family_name.' '.$first_name.' '.$fathers_name; $newuser['givenname'] = $first_name.' '.$fathers_name; $newuser['name'] = $family_name.' '.$first_name.' '.$fathers_name; $newuser['sn'] = $family_name; $newuser['description'] = $position; $newuser['mobile'] = $tel_num; $newuser['samAccountName'] = $account; $newuser['userPrincipalName'] = $account.'@xxx.local'; $newuser['title'] = $position; $newuser['department'] = $department; $newuser['manager'] = $manager; $newuser['useraccountcontrol'] = 0x0002; // Account disabled $newuser['pwdLastSet'] = 0; // User must change password $newuser['userPassword'] = '123321'; //echo '

New AD user

'.Arratomy($newuser); $result = ldap_add($connect, $dn, $newuser); if($result) ';> else > if('' != $errors) ОшибкиКонечно, может случиться так, что вам не потребуется заполнять столько атрибутов пользователя, или наоборот — что их потребуется намного больше. Однако, такой набор уже гораздо яснее показывает, с чем придется столкнуться.
Критически важными являются переменные:
 $dn = 'CN=Фамилия Имя Отчество,OU=!Users_all,DC=xxx,DC=local'; // Distinguished name $newuser['cn'] = $family_name.' '.$first_name.' '.$fathers_name; $newuser["objectclass"][0] = "top"; $newuser["objectclass"][1] = "person"; $newuser["objectclass"][2] = "organizationalPerson"; $newuser["objectclass"][3] = "user"; $newuser['samAccountName'] = $account; $newuser['userPrincipalName'] = $account.'@xxx.local'; 

Без всего остального, как правило, можно обойтись.

Источник

Читайте также:  Read image file in python
Оцените статью