помогите пожалуйста примером у кого есть, какие параметры требует функция php ldap_rename(), не совсем понимаю что она требует, глядя на документацию тут http://php.net/manual/ru/function.ldap-rename.php и на комментарии в ней.
Какое бы значение не подставлял, пишет Invalid DN Syntax.
Необходимо с помощью этой функции (как я понимаю она для этого и создана) перенести пользователя из одной ветки в другую, к примеру из ou=people,ou=Department,ou=Org,o=main в ou=deleted,ou=Department,ou=Org,o=main при увольнении работника.
Рабочий пример.
<?php
$ldaprdn = 'cn=admin,dc=domain,dc=loc';
$ldappass = 'Pa$$word';
$ldapconn = ldap_connect("10.128.217.122")
or die("Could not connect to LDAP server.");
if($ldapconn)
{
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
$old_dn = 'cn=Василий Пушкин,l=Брест,o=Аутсорсинг,ou=Personnel,dc=domain,dc=loc';
$new_rdn = 'cn=Василий Пушкин';
$new_parent = 'l=Минск,o=Аутсорсинг,ou=Personnel,dc=domain,dc=loc';
ldap_rename($ldapconn, $old_dn, $new_rdn, $new_parent, TRUE);
ldap_close($ldapconn);
}
?>
RDN l=Минск,o=Аутсорсинг,ou=Personnel,dc=domain,dc=loc должен существовать в структуре LDAP-а до переноса объекта!
Переносит объект
dc=domain,dc=loc
|__ou=Personnel
|__o=Аутсорсинг
|__l=Брест
|__ cn=Василий Пушкин
в новое место
dc=domain,dc=loc
|__ou=Personnel
|__o=Аутсорсинг
|__l=Минск
|__ cn=Василий Пушкин
Где dc=domain,dc=loc - "корень" LDAP сервера.
Из мануала:
Замечание:
Эта функция в настоящее время работает только с LDAPv3. Возможно, вам придется использовать ldap_set_option() перед привязкой, используя LDAPv3. Эта функция доступна только при использовании OpenLDAP 2.xx или Netscape Directory SDK x.x.
Поскольку тестировалось на OpenLDAP 2.хх, то работает. В других случаях возможно придется пользоваться ldap_mod_replace
Нашёл решение! У меня заработало, т.к. в интернете почти нету примеров по этой функции, может кому в будущем пригодиться. Примеры для того, чтобы дойти до своего решения нашёл тут: https://hotexamples.com/ru/examples/-/-/ldap_rename/php-ldap_rename-function-examples.html
Моё решение было в виде:
в $dn вставил значение полного dn до объекта (начиная , который я хотел перенести, у меня это было 'uid=username,ou=people,ou=Department,ou=Org,o=main')
отрезал от этого dn uid=login, для того, чтобы перенести с таким же логином пользователя (это будет по функции $newrdn, в виде 'uid=username')
в $parent вставил значение dn до места, куда я хочу вставить запись, в моём случае это было 'ou=people,ou=Department,ou=Org,o=main'
функция имела вид:
ldap_rename($ds, $dn, $newrdn, $parent, true);
отрезал и сохранял кусочки dn так:
$parent = explode(',', $dn);
$newrdn = array_shift($parent);
$parent = join(',', $parent);
действительно была ошибка что я вписывал полные dn, начиная от самого корня, а это было не необходимо и функция работает с кусочками dn'a, разделяя 2-м и 3-м параметрами результирующий dn.
записал в том числе и для себя, если вдруг в будущем забуду и придётся вновь столкнуться с ldap.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости