1

Perl Subversion pre-commit フックを使用して、ユーザーが 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が、何についてですか?私は構文に困惑しています。

4

1 に答える 1

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メソッドを実行しsMAAccountName、その人物が属するグループを表す DN の配列を取得できます。Subversion が使用するグループの名前を解析できるようになりました。

これは、プレコミット スクリプトで Windows グループを使用して、リポジトリに書き込み権限を設定できるようになったことを意味します。これにより、メンテナンスがはるかに簡単になります。

于 2011-06-20T20:10:51.013 に答える