2011-05-02 141 views
2

OPENLDAP supportedControl上市:1.3.6.1.4.1.42.2.27.8.5.1(密碼策略)OPENLDAP supportedControl密碼策略

使用.net DirectoryServices.Protocols,我已經用盡提供檢索響應信息的所有可能的方法通過這種控制。

我使用的是最新的OpenLDAP源建/在Cygwin環境與構建啓用的所有PPolicy相關配置,並配置和工作/測試PPolicy本地運行。

通過從目錄服務編程指南修改例如,鏈接: http://dunnry.com/blog/2006/05/11/DotNetDevGuideToDirectoryServicesCompanionSiteLaunched.aspx

,使用填充有配置爲請求

密碼策略DirectoryControl一個SearchRequest,讓我什麼都沒有。 一切看起來不錯的服務器源: http://www.openldap.org/devel/gitweb.cgi?p=openldap.git;a=blob_plain;f=servers/slapd/overlays/ppolicy.c;hb=HEAD

有沒有人有使用的.Net DirectoryControls在SearchRequest任何運氣?

下面是一些代碼,我一直在努力:

_authConnect.AuthType = AuthType.Basic; 
// credentials.UserName is a user DN format, w/password and null domain 
_authConnect.Credential = credentials; 
Debug.WriteLine("PV: " + _authConnect.SessionOptions.ProtocolVersion); 

var sr = //new ExtendedRequest(); 
     new SearchRequest(credentials.UserName, "(objectclass=*)", SearchScope.Base, null); 
     //new DsmlAuthRequest(credentials.UserName); 
     var isCritical = false; 
    var ppolicy = "1.3.6.1.4.1.42.2.27.8.5.1"; 
     // ppolicy request and response control is referred to by the same OID 
     sr.Controls.Add(new DirectoryControl(ppolicy, null, isCritical, true)); 
    sr.Controls.Add(new DirectoryControl(ppolicy, new byte[8], isCritical, false)); 

try 
{ 
    var response = (SearchResponse)_authConnect.SendRequest(sr); 
    DirectoryControl[] c = response.Controls; 
    if (c.Rank > 0 && c.GetLength(0) > 0) 
    { 
    Debug.WriteLine(c[0].Type + " value: " + c[0].GetValue()); 
    } 
    SearchResultEntry entry = response.Entries[0]; 
    c = entry.Controls; 
    if (c.Rank > 0 && c.GetLength(0) > 0) 
    { 
    Debug.WriteLine(c[0].Type + " value: " + c[0].GetValue()); 
    } 
    return true; 
} 
catch (LdapException ex) 
{ 
    Debug.WriteLine(ex.Message); 
} 
+0

是否確定了身份驗證使用設置授權狀態(使用綁定)被允許使用該請求控制? – 2011-08-05 16:30:07

+0

沒有從輸出「的slapd -d -1」表明存在一個權限問題 – ticktock 2011-08-06 14:47:36

+0

我應該更清楚:做目錄服務器日誌表明,請求失敗,因爲授權狀態不必使用控制權限?順便說一句,請不要在請求中包含響應控制OID。響應控制(如果存在)顯示在來自服務器的響應中。 – 2011-08-08 10:43:35

回答

0

我有同樣的問題,因爲你並沒有成功嘗試了很多東西,然後跑出來的時候。我注意到的問題是,openldap僅在綁定請求中發送密碼過期信息。通過啓用服務器上的所有日誌記錄,我發現了這一點。所以我試着找到一種使用綁定請求來使用目錄控件的方法。沒有辦法使用我能找到的S.DS.P LdapConnection類來完成它。然後我開始反思連接對象並抓取ldaphandle變量。我可以用它直接調用c-api,就像S.DS.P一樣。我環顧了一下openldap的源代碼,發現它的工具使用sasl綁定機制,沒有任何機制,在該庫中使用這個控件返回一個簡單的綁定。它在winldap中不起作用。如果你這樣做,它會返回一個錯誤的參數響應代碼。我嘗試的最後一件事是調用ldap_bind的異步版本並讀回消息。不幸的是,答覆中沒有任何控制措施。我認爲,因爲我沒有發送它們,即使openldap日誌文件表示它正在設置警告,它們也不會返回。這是我使用任何內置的winldap綁定方法的唯一希望。

我要去嘗試,但跑出來的時間會構建自己的綁定信息與控制,並將它們發送到使用ldap_extended_operation_s功能服務器的最後一件事。 http://msdn.microsoft.com/en-us/library/aa366580(v=VS.85).aspx如果我在這個項目上多花些時間,我可能會回去嘗試一下。如果我這樣做,我會在這裏報告。最終,如果這是解決方案,則可能更容易使用Novell的ldapcsharp庫。它看起來可以使用它發送綁定請求與服務器控件。我只研究了winldap api,因爲我對它有一定的瞭解,並且已經使用DirectoryServices.Protocols已經非常穩固。

+0

我在綁定請求中看到了密碼過期信息。我相信這會返回到由PAM模塊+ slapd-search所做的身份驗證請求。我簡要介紹瞭如何使用適用於Windows的PAM模塊,但這不是IMO的最佳解決方案。今天,我們只是要求政策,並自己做所有的計算。對於OpenLDap控件來說非常重要!我永遠無法讓他們工作。我認爲問題在於Openldap。一旦事情發生在這裏,我將研究OpenLDap源代碼中的錯誤修正。 – ticktock 2011-08-06 15:05:42