Вопрос: inetOrgPerson с членом или членом?


Что работает

Предположим, что у меня есть 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

Кроме того, у меня есть несколько organizations:

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 Eсть 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?

member это часть groupOfNames но это objectClass конфликты с inetOrgPerson:

[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?


3


источник


Ответы:


Если вы используете OpenLDAP, вам нужно использовать 'член'  overlay, который поддерживает реальный атрибут memberOf среди рабочих атрибутов.

Обратите внимание, что это не повлияет на членство, которое уже существует, только новые, когда вы впервые загружаете оверлей. См. Документацию OpenLDAP.


4



В зависимости от используемого сервера, memberOf может быть виртуальным атрибутом и не будет отображаться в записи, а скорее генерируется сервером. Некоторые другие серверы используют isMemberOf вместо memberOf, memberOf или же isMemberOf будет генерироваться по запросу сервером.

Можно было бы искать:

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

Нарушение класса объекта происходит потому, что groupofNames а также inetOrgPerson являются и структурными объектными классами. Для каждого объекта разрешен только один класс структурных объектов. Некоторые сломанные серверы каталогов (например, DSEE) позволят нескольким классам структурных объектов на один объект, хотя , В одном из ваших примеров person а также inetOrgPerson находятся в одном и том же объекте вместе, это другой случай, потому что inetOrgPerson является потомком person,


3