Страница 1 из 2
Помогите разобраться с LDAP'ом

Добавлено:
21 янв 2008, 15:31
BDmV
При попытке найти объект по маске (cn=*) получаю
cn=Server1 SMS RPC, o=Org
cn=Server SMS RPC, o=Org
cn=Server-GW, o=Org
хотя, по идее, как я понимаю, под такой шаблон должны попасть и все юзера, имеющиеся в дереве.
Для поиска использую ldapbrowse282 и ldap_test.php из набора NVStat
Сервера NW6.0 SP4/SP5, LDAP последний 2007-10-04, eDir 8.6.2

Добавлено:
21 янв 2008, 16:35
v13
А каким юзером смотришь? анонимным?

Добавлено:
21 янв 2008, 17:05
BDmV
v13 писал(а):А каким юзером смотришь? анонимным?
Да.
Не ананимом я вообще законектится не могу..


Добавлено:
21 янв 2008, 17:10
v13
Анонимный пользователь использует не соврать бы права "public" на дерево.
Может элементарно не хватать прав.
Можно или создать пользователя с необходимыми правами и заходить им.
Если просто "попробовать" то зайди админом.
Пользователя надо вводить в ldap формате, типа:
cn=user,ou=someou,o=someorg
Использовать именно запятые!

Добавлено:
21 янв 2008, 17:14
BDmV
Так я ж дерево ldapbrowse'ом вижу нормально всё... А вот при попытке отсеять пользователей по имени, никого не вижу...
т.е. LDAP отказывается нормально искать.
Если я задаю маску (objectclass=inetOrgPerson) то мне выдаются все пользователи, а мне нужен юзер с конкретным именем

Добавлено:
21 янв 2008, 17:24
v13
фильтр cn=name должен работать если браузером всё видишь.
вот например я счас попробовал.
-bash-2.05b# ldapsearch -x -h nw1 cn=v13
# extended LDIF
#
# LDAPv3
# base <> with scope subtree
# filter: cn=v13
# requesting: ALL
#
# v13, myorg
dn: cn=v13,o=myorg
loginShell: /bin/sh
mail:
v13@spam.here
telephoneNumber: 30-13
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: Person
objectClass: Top
objectClass: ndsLoginProperties
description: sysadmin
cn: v13
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1

Добавлено:
21 янв 2008, 17:49
v13
Попробовал ldapbrowser-ом, действительно не показывает юзера, если юзер находится в ou.
Чтоб туда дойти фильтр не пускает.
А если юзер в корне, то нормально показывает.
Ну собственно ldapbrowser так и должен себя вести, всё логично.

Добавлено:
21 янв 2008, 17:55
BDmV
Я понимаю, что если дерево видит, то и искать должен, но он не ищет, тоесть ищет но не то.
И ищу я в o=Org...
А существуют ли, какие нить утилитки под нетварь для рабботы с ldap'ом?

Добавлено:
21 янв 2008, 18:13
v13
Ты определись что тебе нужно, искать или браузить.
Какая задача то.

Добавлено:
21 янв 2008, 18:43
BDmV
Мне надо NVStat пустить и путём исключения я прищёл к выводу, что логануться в NVStat я не могу из за того, что на запрос поиска по маске (&(cn=user1)(objectclass=inetOrgPerson)) Ldap ничего возвращает.
ЗЫ. Всё гениальное просто, мож и у меня где нить "галочки" не хватает.

поэтому и не работает.

Добавлено:
21 янв 2008, 18:44
Иван Левшин aka Ivan L.
Кгхм... Брать доку по едиректори и вдумчиво читать - что такое права, как они назначаются и вычисляются.
По ситуации - лично я предполагаю, что грабли:
1. В назначении прав по дереву - [Public], похоже, порезан (для справки - [Public] являются все НЕЗАРЕГИСТРИРОВАННЫЕ соединения. Т.е. тот же анонимус - именно паблик.
2. В конфигурации непосредственно лдап-сервера (это я про то, что зайти не можешь).
В общем, курить доку и править конфиг надо.

Добавлено:
21 янв 2008, 19:15
v13
BDmV писал(а):Мне надо NVStat пустить и путём исключения я прищёл к выводу, что логануться в NVStat я не могу из за того, что на запрос поиска по маске (&(cn=user1)(objectclass=inetOrgPerson)) Ldap ничего возвращает.

ЗЫ. Всё гениальное просто, мож и у меня где нить "галочки" не хватает.

поэтому и не работает.
На ближайшем юниксе попробуй комманду:
ldapsearch -x -h nwserver "(&(cn=user1)(objectclass=inetOrgPerson))"
или качни портированный ldapsearch.exe с инета
также неплохо бы включить дебаг ldap сервера да посмотреть что за запросы на него идут.

Добавлено:
21 янв 2008, 19:29
Ковалев Артем
Ну держи.
- Код: Выделить всё
#!/usr/local/bin/perl
use Net::LDAP;
use IO::Socket;
my $ldap_server ='10.11.0.31';
my $attrlist = ["cn","networkAddress"];
$ldap = Net::LDAP->new( $ldap_server ) or die "$@";
$mesg = $ldap->bind ; # an anonymous bind
$mesg = $ldap->search( # perform a search
base => "c=RU",
filter => "(&(objectclass=user)(cn=*))"
# attrs => $attrlist
);
$mesg->code && die $mesg->error;
foreach $entry ($mesg->entries) {
$entry->dump; next;
my $first = 0;
print "dn: ".$entry->dn."\n";
my @attrs = $entry->attributes;
foreach my $attr (@attrs) {
my $q;
my @value = $entry->get_value($attr);
foreach my $value (@value) {
if ($attr eq "networkAddress") {
$q = bin2str($value);
if ($first == 1) { next; }
$first = 1;
} else {
$q = $value;
}
print "$attr: $q\n";
}
}
print "---------------------------------------------------\n";
}
$mesg = $ldap->unbind; # take down session
exit;
sub bin2str {
my $bin = shift;
my $res = "";
my ($a0,$a1,$a,$b,$c,$d) = unpack("C6", $bin);
$res="$a\.$b\.$c\.$d";
return $res;
};
Этим я банально ищу юзеров по всему дереву. RU - это верхний объект моего дерева.

Добавлено:
22 янв 2008, 09:17
Мещеряков Андрей
v13 писал(а):Анонимный пользователь использует не соврать бы права "public" на дерево.
Может элементарно не хватать прав.
Можно или создать пользователя с необходимыми правами и заходить им.
Если просто "попробовать" то зайди админом.
Пользователя надо вводить в ldap формате, типа:
cn=user,ou=someou,o=someorg
Использовать именно запятые!
А вот и неправильно

Anonymous-u права на просмотр дерева даются явно. Причем как правило с того O, которое будет просматриваться. Потом его надо указать как прокси-пользователя для самого LDAPa. Описано где-то было.

Добавлено:
22 янв 2008, 10:32
Владимир Горяев
Закладку именно про то потерял, зато есть
вот что. Там есть кусок про разруливание прав для анонима и прокси-пользователя.