一般在設定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進行)