我有一个 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 状态。
我在 Subversion 中配置了 LDAP:
<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 数据库中找到该用户,并且验证他们所在的各个组(这是他们 LDAP 记录中的memberOf值)。但是,我不知道该怎么做。
到目前为止,我的代码如下所示:
#! /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
,但是做什么?我只是被语法弄糊涂了。