5

オブジェクトクラスpersonuidObjectを使用してOpenLDAPに新しいユーザーレコードを作成しようとしています。問題は、System.DirectoryServices.DirectoryEntryを使用して、1つのオブジェクトクラスで新しいエントリを追加する方法しか見つけられず、複数のオブジェクトクラスを追加する方法が見つからなかったことにあるようです。

このC#コード

DirectoryEntry nRoot = new DirectoryEntry(path);
nRoot.AuthenticationType = AuthenticationTypes.None;
nRoot.Username = username;
nRoot.Password = pwd;

try
{
    DirectoryEntry newUser = nRoot.Children.Add("CN=" + "test", "person");
    newUser.Properties["cn"].Add("test");
    newUser.Properties["sn"].Add("test");
    newUser.Properties["objectClass"].Add("uidObject"); // this doesnt't make a difference
    newUser.Properties["uid"].Add("testlogin"); // this causes trouble
    newUser.CommitChanges();
}
catch (COMException ex)
{
    Console.WriteLine(ex.ErrorCode + "\t" + ex.Message);
}

...エラーが発生します:

-2147016684要求された操作は、オブジェクトのクラスに関連付けられた1つ以上の制約を満たしていませんでした。(HRESULTからの例外:0x80072014)

4

1 に答える 1

7

エントリが最初に LDAP に保存され、再度フェッチされたで、オブジェクト クラスを追加できることが判明しました。したがって、簡単な変更で問題なく動作します。

DirectoryEntry newUser = nRoot.Children.Add("CN=" + "test", "person");
newUser.Properties["cn"].Add("test");
newUser.Properties["sn"].Add("test");
newUser.CommitChanges();

newUser.RefreshCache();
newUser.Properties["objectClass"].Add("uidObject");
newUser.Properties["uid"].Add("testlogin");
newUser.CommitChanges();
于 2010-04-23T10:41:03.377 に答える