Мне бы просто получить списой пользователей всего домена MYDOMAIN.RU :)
0. контроллер домена работает в Native mode. Разрешен ли анонимный доступ к просмотру каталога я незнаю как посмотреть. Да не надо мне это, т.к. см. пункт 1.
1. на контроллере завел учетную запись test с паролем 123
2. на контроллере делаю CSVED -b test mydomain.ru 123 -f output.txt
в результате вижу все чего надо
3. на юниксе поставил Net::LDAP со всеми депендами. Подозреваю что больше ничего и ненадо (керберос, самба, nss_ldap) чтобы решить эту задачу
4. между FreeBSD и контроллером фаервол разрешает обмен пакетами (сеанс с анонимным доступом)
#> tcpdump
A.B.C.D.2581 > W.X.Y.Z.389: S ...
W.X.Y.Z.389 > A.B.C.D.2581: S ...
A.B.C.D.2581 > W.X.Y.Z.389: . ack 1 ...
A.B.C.D.2581 > W.X.Y.Z.389: P 1:15(14) ack 1 ...
W.X.Y.Z.389 > A.B.C.D.2581: P 1:23(22) ack 15 ...
A.B.C.D.2581 > W.X.Y.Z.389: P 15:77(62) ack 23 ...
W.X.Y.Z.389 > A.B.C.D.2581: P 23:109(86) ack 77 ...
A.B.C.D.2581 > W.X.Y.Z.389: P 77:84(7) ack 109 ...
W.X.Y.Z.389 > A.B.C.D.2581: F 109:109(0) ack 84 ...
A.B.C.D.2581 > W.X.Y.Z.389: . ack 110 win 57920 ...
A.B.C.D.2581 > W.X.Y.Z.389: F 84:84(0) ack 110 ...
W.X.Y.Z.389 > A.B.C.D.2581: . ack 85 ...7. если подключатся с указанием пароля то выдается сообщение
The wrong password was supplied or the SASL credentials could not be processed
а если без него, то идет сначала пауза, буд-то все работает, а потом
программа молча завершается. Тут уже можно грешить на фильтр, котрый
я не умею правильно задавать...6. ну и наконец вот код программы.
#!/usr/bin/perl
use Net::LDAP;
use Net::LDAP::Util qw(ldap_error_text);
use strict;my $ldap = Net::LDAP->new('mydomain.ru') or die "$@";
#my $mesg = $ldap->bind('cn=test,dc=mydomain,dc=ru',password => '123', version => 3);
my $mesg = $ldap->bind();
$mesg->code && die ldap_error_text($mesg->code);my $mesg = $ldap->search(
base => "dc=mydomain, dc=ru",
filter => "objectClass=user"
);
$mesg->code && die ldap_error_text($mesg->code);#foreach my $entry ($mesg->all_entries) { $entry->dump; }
my $max = $mesg->count;
for( my $index = 0 ; $index < $max ; $index++){
my $entry = $mesg->entry($index);
my $dn = $entry->dn; # Obtain DN of this entrymy @attrs = $entry->attributes; # Obtain attributes for this entry.
foreach my $var (@attrs){
#get a list of values for a given attribute
my $attr = $entry->get_value( $var, asref => 1 );
if ( defined($attr) ){
foreach my $value ( @$attr ){
print "$var: $value\n"; # Print each value for the attribute.
}
}
}
}$ldap->unbind;
Без пароля он естественно не отдаст юзверей, поэтому раскомментируйте и исправьте строку
my $mesg = $ldap->bind('cn=test,cn=Users,dc=mydomain,dc=ru',password => '123', version => 3);
Пользователи в AD находятся в контейнере Users