5

我正在尝试使用对象类personuidObject在 OpenLDAP 中创建一个新的用户记录。问题似乎在于 System.DirectoryServices.DirectoryEntry 我只找到了一种使用一个对象类添加新条目的方法,而不是添加多个对象类的方法。

这个 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 请求的操作不满足与对象类相关的一个或多个约束。(来自 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 回答