ロックアウトをトリガーするのに十分な回数、不適切なパスワードが提供された場合の .net LDAP クライアントの動作をテストしています。
この奇妙な動作が見られます。プロセスがいつでも正常に接続されていれば、意図的にロックアウトをトリガーした後でも再接続できるようです。
これが私のバインディングメソッドの簡略版です:
private DirectoryEntry Bind(string userId, string password)
{
var entry = new DirectoryEntry(BasePath, userId, password);
// If the password is bad, the attempt to access entry.NativeObject throws an exception.
var obj = entry.NativeObject; // causes the bind to occur
return entry;
}
私のテストは次のように進行します:
private void TestLockout()
{
// attempt with bad pw enough times to trigger a lockout.
for (int i=0; i < 5; i++)
{
try
{
// i.ToString() is a purposefully bad pw
Bind("testuser", i.ToString());
}
catch
{
}
}
// Now make sure that an attempt with a good pw fails due to lockout
var bindSuccess = true;
try
{
Bind("testuser", "correctpassword");
}
catch
{
bindSuccess = false;
}
// the output should be "false"
Console.WriteLine("Bind result is " + bindSuccess.ToString();
}
これはそのままで問題なく動作します。ただし、テストの前に適切なパスワードを指定して Bind() を呼び出すと、異なる結果が得られます。
ああ、これ:
Bind("testuser", "correctpassword"); // succeeds
TestLockout(); // does not give the correct result
次のことが起こります。
a) TestLockout は、最後の Bind が成功し、成功しないため、誤った出力を生成します。
b) しかし、その後の調査により、ユーザーがロックアウトされたことを私は知っています。
そのため、現在のプロセスが正常に接続されたかどうかを追跡しているコンポーネントがあるようです。この条件をクリアする方法が必要です。この認証コードは長時間実行されるサービス プロセスで実行されるため、実際にロックアウトされているユーザーを認証することはできません。