2011-06-20 15 views
1

私はPerl Subversionプリコミットフックを持っています。これにより、ユーザがSubversionリポジトリ内の特定のポイントを変更または追加する権限を持っているかどうかを確認できます。これは、次のような制御ファイルを使用します。Perl Net :: LDAPでユーザグループをチェックする:

ご覧のとおり、アクセス許可を設定するときにグループと使用グループを定義できます。私は同じことをするためにLDAPグループを使うことができたらうんざりだと思った。こうすることで、Windowsの管理者は、どのグループにいるのかを知ることができ、Facebookのステータスを最新の状態に保つ時間が増えます。

私はLDAPは、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> 

が、今、私は、ユーザーがあるグループは、私が持っているものを見つける必要があります。ユーザーの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を行う必要があるが、何で?私は文法でちょうど混乱しています。

答えて

2

すべての権利、それは私にしばらく時間がかかったが、私はそれを考え出した...

をいくつかのサンプルコードがあった場合、それが参考にされているだろうが、いくつかのLDAP文書を読んだ後、私は私ができる見つけました

(sAMAccountName=$user) 

だから私はこれを試してみました:

my $results = $ldap->search(filter => USER_DN . "=$svnUser", 
          attrs => "memberOf"); 

私は、これはのmemberOfの属性のみを返すだろうと思ったが、なかった、このような何かを行います。実際、この特定のユーザーが3つのグループのメンバーであることはわかっていましたが、単一のメンバーの配列を返しました。

Net::LDAP::Searchというオブジェクトが返されていることに気がついたので、そのモジュールを検索してメソッドを見つける必要がありました。そこから、pop_entryメソッドを使用してNet::LDAP::Entryオブジェクトを取得できることがわかりました。さて、別のCPANページを見つけることができます。

そこから、私はでget_valueメソッドを実行し、その人が属するグループを表すDNの配列を取得できます。 Subversionが使用するグループの名前を解析できるようになりました。

これは、プレコミットスクリプトでWindowsグループを使用して、自分のリポジトリに書き込み権限を設定できるようになったことを意味します。これにより、維持管理がはるかに容易になります。

関連する問題