函数ldap_mod_add如何确定要修改的条目?

时间:2013-09-18 09:12:02

标签: php ldap

我尝试向Active Directory中的某些用户添加属性,并且在理解如何确保将此属性添加到优秀用户方面存在很大困难。

有关此功能的PHP文档表明:

  

ldap_mod_add — Add attribute values to current attributes

     

Description :

     

bool ldap_mod_add ( resource $link_identifier , string $dn , array $entry )

     

将一个或多个属性添加到指定的dn。它在属性级别执行修改而不是对象级别。对象级添加由ldap_add()函数完成。

参数:

  

link_identifier:
  由ldap_connect()返回的LDAP链接标识符。

     

dn:
  LDAP实体的可分辨名称。

我的问题是用户的DN不是唯一标识符!

让我们举个例子:

  

"cn=John Jones, o=My Company, c=US"

如何确保同一管理层中没有其他“John Jones”?

但是我注意到在函数doc的开头有:

  

ldap_mod_add — Add attribute values to current attributes

因此,应该是关于使用过滤器获得的条目?

在这种情况下,参数dn的实用程序是什么?

有人能帮助我理解吗?

提前谢谢

1 个答案:

答案 0 :(得分:1)

DN(专有名称)必须是唯一的。虽然您可能有一个或多个具有cn=John Jones值的用户,但它们不能共存于同一容器中(o=My Company, c=US部分)。

如果您希望有两个名为John Jones的用户,它们可以存在于不同的容器中,但如果它们需要位于同一个容器中,那么您必须为其中至少一个设置不同的CN。

在某些目录服务中,其他属性也必须是唯一的。通常,uniqueID或uid在整个目录中应该是全局唯一的。所以你可能有一个jjones,不管它是什么容器,但另一个需要以某种方式不同。

Active Directory还有一项要求,即sAMAccountName在域中是全局唯一的,而userPrincipalName在林中是唯一的。

当您尝试创建具有相同完整DN的第二个用户或将具有冲突命名属性的用户移动到容器中时,通常该目录将失败并显示错误。对于这些情况,每个目录都有不同的错误代码。