Openldap supportedControl 一覧: 1.3.6.1.4.1.42.2.27.8.5.1 (パスワードポリシー)
.Net DirectoryServices.Protocols を使用して、このコントロールによって提供される応答情報を取得するために考えられるすべての方法を使い果たしました。
Cygwin環境でローカルにビルド/実行されている最新のOpenldapソースを使用しており、ビルドですべての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
SearchRequest で .Net DirectoryControls を使用して運が良かった人はいますか?
ここに私が試してきたいくつかのコードがあります:
_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);
}