inetOrgPerson与成员或memberOf?

时间:2013-12-05 10:45:02

标签: ldap openldap

什么有效

假设inetOrgPerson中有ou=people,dc=example,dc=com个。例如:

dn: cn=John Doe,ou=people,dc=example,dc=com
objectClass: inetOrgPerson (structural)
objectClass: person (structural)
objectClass: top (abstract)
cn: John Doe
sn: Doe
givenName: John
mail: john.doe@example.com
uid: john.doe

此外,我有几个organization s:

dn: o=foo,dc=example,dc=com
objectClass: organization (structural)
objectClass:top (abstract)
o: foo

dn: o=bar,dc=example,dc=com
objectClass: organization (structural)
objectClass:top (abstract)
o: bar

对于每个organization,都有一个groupOfNames

dn: cn=users,o=foo,dc=example,dc=com
objectClass:groupOfNames (structural)
cn: users
member: cn=John Doe,ou=people,dc=example,dc=com

dn: cn=users,o=bar,dc=example,dc=com
objectClass:groupOfNames (structural)
cn: users

如您所见,cn=John Doe,ou=people,dc=example,dc=com被列为member cn=users,o=foo,dc=example,dc=com但未列为dn: cn=users,o=bar,dc=example,dc=com

问题

我想在inetOrgPerson处注明会员资格。

memberOf不在我目前用于用户的模式中。是否有可用的架构提供memberOf

membergroupOfNames的一部分,但此objectClassinetOrgPerson冲突:

[LDAP: error code 65 - invalid structural object class chain (inetOrgPerson/groupOfNames)]

问题

如何在cn=users,o=foo,dc=example,dc=com上的cn=John Doe,ou=people,dc=example,dc=com注明会员资格?

2 个答案:

答案 0 :(得分:5)

如果您使用的是OpenLDAP,则需要使用'memberof'叠加层,该叠加层在操作属性中保留真正的“memberOf”属性。

请注意,它不会影响已存在的成员资格,只会影响首次加载覆盖图时的新成员资格。请参阅OpenLDAP文档。

答案 1 :(得分:3)

根据使用的服务器,memberOf可能是虚拟属性,不会在条目中列出,而是由服务器生成。其他一些服务器使用isMemberOf而不是memberOf。将根据服务器的请求生成memberOfisMemberOf

可以搜索:

ldapsearch -h hostname -p port \
   -b dc=example,dc=com -s sub \
   '(memberOf=cn=users,o=foo,dc=example,dc=com)'

ldapsearch -h hostname -p port \
   -b dc=example,dc=com -s sub \
   '(isMemberOf=cn=users,o=foo,dc=example,dc=com)'

获取cn=users,o=foo,dc=example,dc=com成员的专有名称。

获取已知专有名称所属的组:

ldapsearch -h hostname -p port \
   -b dc=example,dc=com -s sub \
   '(cn=Joe User)' isMemberOf

ldapsearch -h hostname -p port \
   -b dc=example,dc=com -s sub \
   '(cn=Joe User)' memberOf

发生对象类违规是因为groupofNamesinetOrgPerson都是结构对象类。每个对象只允许一个结构对象类。 一些损坏的目录服务器(例如DSEE)将允许每个对象有多个结构对象类,但。在您的一个示例中,personinetOrgPerson显示在同一个对象中,这是另一种情况,因为inetOrgPersonperson的后代。