У меня есть ловушка предварительной фиксации Perl Subversion, которая позволяет мне проверить, есть ли у пользователя разрешения на изменение или добавление к определенной точке в хранилище Subversion. Он использует контрольный файл, который выглядит следующим образом:
[GROUP SERVER]
users = bob, ted, carol, alice
[GROUP CLIENT]
users = tom, dick, harry
[FILE Client Developers don't touch the Server]
file = proj/server
users = @CLIENT
permission = read-only
[FILE Server people don't touch the Client]
file = proj/client
users = @SERVER
permission = read-only
[FILE Let Tom Do everything]
file = .*
users = tom
permission = read-write
Как видите, я могу определять группы и использовать группы при настройке разрешений. Я думал, что это будет крик, если я смогу использовать группы LDAP, чтобы сделать то же самое. Таким образом, наши администраторы Windows могут выяснить, кто в какой группе, что дает мне больше времени для обновления моего статуса на Facebook.
У меня настроен LDAP как в Subversion:
<Location /mfx>
DAV svn
SVNParentPath /subversion/svn_repos
AuthType basic
AuthName "Source Repository"
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPURL "ldap://ldapserver:3268/dc=mycompany,dc=com?sAMAccountName" NONE
AuthLDAPBindDN "CN=SubVersion,OU=Users,OU=Accounts,DC=mycompany,DC=com"
AuthLDAPBindPassword "Swordfish"
Require valid-user
</Location>
У меня нормально работает соединение с нашим сервером LDAP, но теперь мне нужно выяснить, в каких группах находится этот пользователь. У меня есть имя Subversion пользователя в $svnUser
, и теперь мне нужно найти этого пользователя в нашей базе данных LDAP и проверьте различные группы, в которых они находятся (что является значением memberOf в их записи LDAP). Однако я понятия не имею, как это сделать.
Пока мой код выглядит так:
#! /usr/bin/env perl
#
use strict;
use warnings;
use feature qw(say);
use constant {
LDAP_URL => "ldapserver",
LDAP_PORT => 3268,
LDAP_SCHEME => "ldap",
BIND_DN => "CN=SubVersion,OU=Users,OU=Accounts,DC=mycompany,DC=com",
BIND_PWORD => "Swordfish",
USER_DN => "sAMAccountName",
};
use Net::LDAP;
#
# Create LDAP Connection
#
my $ldap = Net::LDAP->new(LDAP_URL, port=> LDAP_PORT, scheme=> LDAP_SCHEME);
my $message;
$message = $ldap->bind(BIND_DN, password => BIND_PWORD);
if ($message->code != 0) {
die qq(Error in LDAP Binding: ) . $message->error_desc;
}
Теперь мне нужно сделать $ldap->search
, но на чем? Я просто озадачен синтаксисом.