OpenWebmail’s LDAP 支援多OU登入

一般在設定LDAP的時候會利用多個ou來區分使用者
例如宜大就區分了admin、policy、club、teacher、unit、stu90……..等多個群組
可是發現在openwebmail的auth_ldap.conf中只能設定單一群組
也就是說非設定的ou就無法使用了….

這時候大概解說一下openwebmail使用ldap認證的幾個步驟
1. get_userinfo 確認有沒有這個使用者
2. get_userlist 取得使用者的些許資料
3. check_userpassword 使用者登入之密碼檢查
其實會感覺2有點多餘,但是因為這是opensource的code,要改也要花上很多時間
所以就以增加一些微調達成我們的目的就可以了

我們先在使用者的屬性中添加一筆資訊ou,其值為它的ou資訊
以實驗的例子r9643004來說,其ou就是stu96

然後我們將get_userlist的資訊貼到check_userpassword內
並且在全域宣告的時候加入一行宣告資訊
my $unit ;

然後check_userpassword的內容會變成這樣

my $ldap1 = Net::LDAP->new($ldapHost) or return(-3, "LDAP error $@");
$ldap->bind (dn=>"$cn, $dc1, $dc2, $dc3", password =>$pwd) or return(-3, "LDAP error $@");


my $list = $ldap1->search (
base => $ldapBase,
filter => "(uid=$user)",
attrs => ['ou']
) or return(-8, "LDAP error $@");
undef($ldap1); # disconnect


if ($list->count eq 0) {
return (-7, "User $user doesn't exist");
} else {
my $entry = $list->entry(0);
$unit = $entry->get_value("ou");
}


my $mesg = $ldap->bind (
dn => "uid=$user, ou=$unit, $dc1, $dc2, $dc3",
password => $password
);

之後密碼驗證的步驟就會先去抓取使用者的ou,再帶入bind資訊中
不過這一切的一切都是先有設定的帳號先登入查詢資訊 (這邊都是用Manager進行)

This entry was posted in Linux, OpenLDAP. Bookmark the permalink.