Active directory 通过电子邮件修改LDAP属性

Active directory 通过电子邮件修改LDAP属性,active-directory,ldap,Active Directory,Ldap,我需要修改LDAP中现有记录的属性。tI获取记录的唯一方法似乎是使用以下查找: ctx.modifyAttributes(CN=Joe blue,cn=user,DC=foo,DC=com" , mods); 但我需要通过电子邮件(或登录)获得它。我尝试了几种变体,但出现了命名异常,例如: ctx.modifyAttributes(&(objectClass=user)(mail=jblow*)),cn=user,DC=foo,DC=com) javax.naming.Invali

我需要修改LDAP中现有记录的属性。tI获取记录的唯一方法似乎是使用以下查找:

ctx.modifyAttributes(CN=Joe blue,cn=user,DC=foo,DC=com" , mods); 
但我需要通过电子邮件(或登录)获得它。我尝试了几种变体,但出现了命名异常,例如:

ctx.modifyAttributes(&(objectClass=user)(mail=jblow*)),cn=user,DC=foo,DC=com)
javax.naming.InvalidNameException:(&(objectClass=user)(mail=jblow*)),cn=user,DC=foo,DC=com:[LDAP:错误代码34-0000208F:NameErr:DSID-031001BA,问题2006(错误名称),数据8349,最佳匹配: “(&(objectClass=user)(mail=jblow*)),cn=user,DC=foo,DC=COM


任何建议都将不胜感激。

您不能为修改操作提供搜索筛选器。您需要提供完整的DN,如第一个示例所示

因此,您首先必须在cn=user,dc=foo,dc=com的基本DN中搜索(mail=jblow*),以找到感兴趣对象的完整DN


然后,您可以根据完整的DN进行修改。

正如geoffc所说,您需要将“DifferentizedName”与mods一起传递给modifyAttributes函数

您可以创建一个单独的函数,根据您的搜索约束(mail=jblow*)查询LDAP,并返回“DiscriminatedName”字符串。然后只需将该函数传递给ctx.modifyAttributes()


Thx Geoff,既然你指出了这一点,那就完全有道理了。LDAP肯定是另一头野兽!
String dn = distinguishedNameQuery();
ctx.modifyAttributes(dn, mods);