Страница 1 из 1

LDAP, networkAddress .. Как искать по этому полю из Perl ??

СообщениеДобавлено: 12 мар 2006, 19:29
skoltogyan
NW6.5 (edir и ldap)
Необходимо найти пользователя (из перл-скрипта), который залогинен с адреса:
10.1.1.1
Пониаю, что надо искать где-то так
$fltr = "(&(objectclass=user)(networkAddress=........

но не понимаю - в каком формате искать то, что ищу..
попробывал ldapbrowser-ом посмотреть как выглядит это поле...
НО в нем какая-то абракодабра...

Может кто уже эту задачу решал ?

СообщениеДобавлено: 13 мар 2006, 05:53
Андрей Тр. aka RH
Естьт вот такой вот ТИД -

Can the IP address returned by an LDAP query be decoded? - TID10087142http://support.novell.com/cg ... 087142.htm

однако обещанного там скрипта я как-то не обнаружил. Хотя, мне помнится, где-то такое было .. пример перекодировки адреса из того формата в нормальный текстовый. Наверняка при желании можно найти.

P.S. List Address 2.0 - http://www.novell.com/coolsolutions/tools/14325.html ?

СообщениеДобавлено: 14 мар 2006, 21:15
cooler13
Пять копеек к той же задаче!
Делаю поиск в eDir через LDAP.
Мой IP-адрес в LDAP выглядит так :(networkaddress=\31\23\AC\10\00\71). (первые два hex-значения \31\23 -- непонятно что, но для всех юзеров в Дереве эта приставка одинаковая; остальные четыре означают 172.16.0.113). Такой фильтр срабатывает замечательно.
Хотел сделать поиск ну например по такому фильтру (networkaddress=\31\23\AC\10\00*). Получаю от LDAP ошибку "INAPPROPRIATE_MATCHING", что приблизительно значит "Filter type not supported for the specified attribute". Что-бы такого придумать, даже не знаю. Ведь формально фильтр ПРАВИЛЬНЫЙ, если верить RFC2254 (http://rfc.net/rfc2254.html).

СообщениеДобавлено: 14 мар 2006, 21:21
cooler13
На PHP преобразование адреса 172.16.0.113 в формат для поиска в LDAP выглядит где-то так:
Код: Выделить всё
$ip="172.16.0.113";

$ippart=explode(".",$ip);
$filter="(networkAddress=\\31\\23\\"; // наша приставка загадочная
$filter.=sprintf("%02X",$ippart[0])."\\".sprintf("%02X",$ippart[1])."\\";
$filter.=sprintf("%02X",$ippart[2])."\\".sprintf("%02X",$ippart[3]).")";


В итоге $filter содержит значение "(networkaddress=\31\23\AC\10\00\71)"

На perle почти так-же : ).

А КАК ИСПОЛЬЗОВАТЬ ФИЛЬТР "(networkaddress=\31\23\AC\10\00*)"??? ГУУРУУ, ПОДСКАЖИТЕ !!! : )