OpenLDAP 无法添加新属性

OpenLDAP 无法添加新属性

我想创建一些具有“性别”等属性的用户帐户,这意味着我需要创建自定义属性。

我已经创建了以下 LDIF 文件:

dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 1.2.3.4.5.6.7.8.9.0 NAME ( 'gender' ) DESC 'gender' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )

并尝试将其应用于ldapmodify -D cn=admin,cn=config -W -f ExtendedUser.ldif

但我总是收到这个错误:

modifying entry "cn=schema"
ldap_modify: Invalid syntax (21)
        additional info: attributeTypes: value #0 invalid per syntax

我知道无论如何我还需要一个对象类来使用该属性,并且我最初尝试使用对象类定义和包含的其他属性(见下文),但这导致了同样的错误。

更古老、更复杂的 LDIF:

dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 1.2.3.4.5.6.7.8.9.0 NAME 'gender' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
attributeTypes: ( 1.2.3.4.5.6.7.8.9.1 NAME 'birthdate' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
attributeTypes: ( 1.2.3.4.5.6.7.8.9.2 NAME 'birthplace' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
attributeTypes: ( 1.2.3.4.5.6.7.8.9.3 NAME 'nationality' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
attributeTypes: ( 1.2.3.4.5.6.7.8.9.4 NAME 'street' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
attributeTypes: ( 1.2.3.4.5.6.7.8.9.5 NAME 'zipcode' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
attributeTypes: ( 1.2.3.4.5.6.7.8.9.6 NAME 'city' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
attributeTypes: ( 1.2.3.4.5.6.7.8.9.7 NAME 'phone' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
attributeTypes: ( 1.2.3.4.5.6.7.8.9.8 NAME 'matnr' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )

dn: cn=schema
changetype: modify
add: objectClasses
objectClasses: ( 4.5.6.7.8.9.2 NAME 'AdditionalAttrPerson' DESC 'adds user attributes' SUP inetOrgPerson STRUCTURAL MUST ( gender $ birthdate $ birthplace $ nationality $ street $ zipcode $ city $ phone $ matnr ) )

我不知道我做错了什么,因为我从教程中复制了语法,而且看起来匹配。请帮忙。

我尝试在激活调试级别的情况下执行 ldapmodify,输出似乎没什么用,但是这里是结尾,出现错误:

...
ldap_do_free_request: asked to free lr 0x561b24af5cb0 msgid 2 refcnt 0
ldap_parse_result
ber_scanf fmt ({iAA) ber:
ber_scanf fmt (}) ber:
ldap_msgfree
ldap_err2string
ldap_modify: Invalid syntax (21)
        additional info: attributeTypes: value #0 invalid per syntax

ldap_free_connection 1 1
ldap_send_unbind
ber_flush2: 7 bytes to sd 4
ldap_free_connection: actually freed

上面的东西似乎与我毫无关系。

答案1

我应该首先查看架构中的其他 LDIF 文件,但这是我的解决方案:

第一行需要dn cn=myschema,cn=schema,cn=config

之后的那些应该在左侧有 olcAttributeTypes 或 olcObjectClasses,而不是我所拥有的。例如:

dn: cn=myschema,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: myschema
olcAttributeTypes: ( 1.3.6.1.4.1.995.1.2.1 NAME 'gender'
 EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} SINGLE-VALUE )

相关内容