Как проверить логин через LDAP в Perl? - PullRequest
1 голос
/ 05 декабря 2011

Я написал небольшой скрипт, который привязывается к серверу LDAP и извлекает всех пользователей и информацию о них. Теперь я хотел бы написать еще один, который привязывается к серверу LDAP, а затем проверяет заданный логин. Как я могу это сделать?

my $ldap = ldapConnect();
my $user = 'user';
my $pwd = 'pwd';
# TEST USER AND PWD BUT HOW?

sub ldapConnect {
my $ldap = Net::LDAP->new('192.168.*.*');
my $password = '***';
$ldap->bind('cn=Administrator,cn=Users,DC=***,DC=***', password=> $password);
return $ldap;
}

Ответы [ 2 ]

6 голосов
/ 05 декабря 2011
my $ldap = ldapConnect();        # Connect
my $search = $ldap->search(      # Search for the user
    base   => 'DC=***,DC=***',
    scope  => 'sub',
    filter => "(&(uid=$user))",
    attrs  => ['dn']
);
die "not found" if not $search->count;

# Get the user's dn and try to bind:
my $user_dn = $search->entry->dn; 
$ldap->bind( $user_dn, password => $pass );
print +($ldap->error ? "Bad credentials" : "Success!"), "\n";
6 голосов
/ 05 декабря 2011

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

В качестве альтернативы, как указывает David W. , если вам нужноПоиск DN для пользователя (потому что имя пользователя не DN), вы можете сначала привязать либо анонимно (если сервер LDAP настроен на это), либо как известный пользователь, поиск DN, а затем выполнить повторную привязку какпользователь, чей аккаунт вы пытаетесь проверить.Я предлагаю использовать непривилегированного пользователя для начального поиска, но, конечно, ваш административный пользователь тоже будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...