无法在 LDAP 结构中创建 inetOrgPerson

无法在 LDAP 结构中创建 inetOrgPerson

我有一个使用本机实现在 OpenBSD 7.1 上运行的 LDAP 服务器ldapd。我创建了一个基本的 DIT,当尝试添加用户时,我得到:

# ldapadd -vv -H ldaps://hypnos.spookyinternet.com/ -f /tmp/users.ldif -D cn=admin,dc=spookyinternet,dc=com -w 'correct horse battery staple'
ldap_initialize( ldaps://hypnos.spookyinternet.com:636/??base )
add objectClass:
  inetOrgPerson
add uid:
  jessejames
adding new entry "uid=jessejames,ou=users,ou=accounts,ou=spookyinternet,dc=spookyinternet,dc=com"
ldap_add: Object class violation (65)

哪里/tmp/users.ldif

dn: uid=jessejames,ou=users,ou=accounts,ou=spookyinternet,dc=spookyinternet,dc=com
objectClass: inetOrgPerson
uid: jessejames

我查看了inetOrgPerson模式,但看不出我违反了课程的哪一部分,特别是因为没有一个字段是必须的:

objectclass ( 2.16.840.1.113730.3.2.2 NAME 'inetOrgPerson'
  SUP organizationalPerson
  STRUCTURAL
  MAY ( audio $ businessCategory $ carLicense $ departmentNumber $
    displayName $ employeeNumber $ employeeType $ givenName $
    homePhone $ homePostalAddress $ initials $ jpegPhoto $
    labeledURI $ mail $ manager $ mobile $ o $ pager $
    roomNumber $ secretary $ uid $ x500uniqueIdentifier $
    preferredLanguage $ userSMIMECertificate $ userPKCS12 ) )

我在网上找到的所有实例ldap_add: Object class violation (65)都附带一条消息来表明违规行为是什么,但不幸的是,我无法从我的客户那里(从包裹中openldap-client)获得更具体的信息。

答案1

对象inetOrgPerson补充剂 organizationalPerson,这补充了person,这又补充了top。这意味着,它继承这些 objectClasses 中定义的所有属性。其中一些属性被声明为必须的,您需要全部指定。请参阅RFC2798(还调查RFC4519

例如,它继承自personMUST (sn $ cn),以及topMUST ( objectClass )。因此,您也需要在 LDIF 中定义所有这些。

此外,某些目录还要求您指定所有 objectClasses,直至top

dn: uid=jessejames,ou=users,ou=accounts,ou=spookyinternet,dc=spookyinternet,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: jessejames
cn: Jesse
sn: James

此 LDIF 应该可以工作(前提是您已经添加了所有容器:ou=usersou=accounts等)。但是,这显然是多余的,我建议您尝试仅inetOrgPerson声明类,看看它是否能正常工作。


如果你只对uid属性感兴趣,而不想添加sn和,你根本cn不应该使用 objectClass 。你可以采取其他路线并使用inetOrgPersonuidObject 辅助的objectClass 仅包含此uid属性:

dn: uid=jessejames,ou=users,ou=accounts,ou=spookyinternet,dc=spookyinternet,dc=com
objectClass: top
objectClass: uidObject
uid: jessejames

在这种情况下,您必须在 LDIF 中指定两个对象类,因为uidObject不是结构对象类,而最简单的结构对象类是基础top。并且您inetOrgPerson以后可以随时添加(或任何其他)具有其所有必需属性的对象类。

相关内容