ldapadd 使用 openldap 时出现语法错误

ldapadd 使用 openldap 时出现语法错误

我正在使用 ldapadd,我想向存储库添加一个属性类型,以便其他条目可以使用它。

我遇到了一些问题。这是我的 ldif 文件。

dn: dc=myorg,dc=co,dc=uk
changetype: add
add: attributetypes
attributetype: ( 2.2.980.1.1 NAME ( 'ecdvisibility' 'ecdvis' ) DESC 'The visibility of the object' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE USAGE userApplications )

检查完行末的空格后,我发现一切正常:

dn: dc=myorg,dc=co,dc=uk$
changetype: add$
add: attributetypes$
attributetype: ( 2.2.980.1.1 NAME ( 'ecdvisibility' 'ecdvis' )$
  DESC 'The visibility of the object'$
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15$
  SINGLE-VALUE$
  USAGE userApplications )$

我看到的是如下的神秘错误:

ldap_add:未定义属性类型(17)附加信息:添加:属性类型未定义

我不明白这个错误,属性类型没有定义,我正在尝试添加它!此外,就在这一行之前,它写道:

添加新条目“dc=myorg,dc=co,dc=uk”

为什么要添加这个,它已经存在了。我也不确定我是否应该使用 ldapadd 或 ldapmodify。

我的典型命令是:

sudo ldapadd -D cn=admin,dc=myorg,dc=co,dc=uk -w 密码 -v -f attributeType.ldif

我还确保文件末尾有一个试验空白行,尽管这似乎没有任何区别。

添加任何用户都可以使用的这种属性的最佳方法是什么?

更新

我还尝试了以下操作:

dn: cn=schema
changetype: modify
add: attributeTypes
##
## The new attribute type
##
attributeTypes: ( ecdvisibility.oid NAME ( 'ecdvisibility' 'ecdvis' ) DESC 'The visibility of the object' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE USAGE userApplications )

但这次我收到这个错误:

ldap_modify:无效语法(21)附加信息:attributeTypes:值 #0 根据语法无效

更新 2:

在我做出任何更改之前,我必须更新 openldap 似乎在后台设置的系统密码:

dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: password

这很有效,所以我开始尝试更新属性。

第一次尝试:

dn: cn=schema,cn=config
changetype: add
olcAttributeTypes: ( ecdvisibility.oid
  NAME ( 'ecdvisibility' 'ecdvis' )
  DESC 'The visibility of the object'
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
  SINGLE-VALUE
  USAGE userApplications )
olcRootDN: cn=config
olcRootPW: password
#objectClass: top

ldap_add:对象类违规(65)附加信息:没有 objectClass 属性

在对象类中进行评论时出现以下错误:

ldap_add:对象类违规(65)附加信息:未提供结构对象类

好的,我将尝试 inetOrgPerson

ldap_add:对象类违规(65)附加信息:对象类“inetOrgPerson”需要属性“sn”

停止,我真的不想这样做,我只想添加一个可供 ldap 使用的属性类型,并且可以在必要时添加到对象中。我现在不想指定单个对象或条目。这可能吗?如果可以,怎么做?非常感谢任何进一步的建议。

感谢@grawity,最终的解决方案如下:

dn: cn=test,cn=schema,cn=config
changetype: add
olcAttributeTypes: ( 2.25.247072656268950430024439664556757516066
  NAME ( 'ecdvisibility' 'ecdvis' )
  DESC 'The visibility of the object'
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
  SINGLE-VALUE
  USAGE userApplications )
objectClass: olcSchemaConfig

我将 OID 编号更改为开放唯一编号之一,因为我使用的是无效的公共编号。属性类型已成功添加,可以在其他地方使用。

答案1

基础

我看到的是如下的神秘错误:

ldap_add: Undefined attribute type (17) additional info: add: attribute type undefined

我不明白这个错误,属性类型未定义,我正在尝试添加它!

它不是在谈论你的属性。它谈论的是行add: attributetypes– 它不知道名为的属性add

在 LDIF 中,add:replace:delete:修改条目(即changetype: modify)。但是如果你想添加作为新条目,您只需提供原始数据,无需提供其他任何数据。

请参阅“ldif”手册页例如“添加” LDIF 和“修改” LDIF 之间的区别。

就在这一行之前还写道:

adding new entry "dc=myorg,dc=co,dc=uk"

为什么要添加这个,它已经存在了。

因为你使用了changetype: add——换句话说,你ldapmodify 创建一个新条目。

需要澄清的是,“添加新条目”与“修改条目,添加新属性”完全不同。可能的操作包括:

  • changetype: add– 创建一个新条目,完全按照指定的方式。
  • changetype: modify– 编辑现有条目的属性,接受以下组合:
    • add: ...– 添加新属性(或添加更多值)
    • replace: ...– 添加或完全覆盖属性
    • delete: ...– 删除属性(或特定值)
  • changetype: modrdn– 更改 DN(重命名或移动条目)
  • changetype: delete– 删除整个条目。

本文档

我也不确定是否应该使用 ldapadd 还是 ldapmodify。

它们之间的唯一区别在于,changetype如果你不指定,它们会使用哪个。也就是说,ldap添加将默认changetype: addldap修改将默认为changetype: modify

changetype:如果您在 LDIF 中手动指定,则两个命令变得相同。

现在,架构

模式配置在 LDAP 服务器之间差别很大,并且您的 LDIF 对 OpenLDAP 来说完全是错误的。实际的属性描述很好,但它需要存储在不同的 DN 中,不同的属性中。

首先,你将模式直接添加到常规数据库,但添加到特殊配置树 – OpenLDAP 使用下面的子条目cn=schema,cn=config,每个模式一个olcSchemaConfig条目。

属性也以olc– 开头,即olcAttributeTypesolcObjectClasses

因此,要添加具有 1 个属性和零个对象类的新模式,请使用:

dn: cn=ecd,cn=schema,cn=config
changetype: add
objectClass: olcSchemaConfig
olcAttributeTypes: ( 2.2.980.1.1
  NAME ( 'ecdvisibility' 'ecdvis' )
  DESC 'The visibility of the object'
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
  SINGLE-VALUE
  USAGE userApplications )

请注意,OpenLDAP 会自动向 RDN 添加一个数字,例如cn={5}ecd。之后,您可以向同一架构添加更多属性或类:

dn: cn={5}ecd,cn=schema,cn=config
changetype: modify
add: olcAttributeTypes
olcAttributeTypes: ( 4.5.6.7 NAME 'foo' ... )
olcAttributeTypes: ( 4.5.6.8 NAME 'bar' ... )
-
add: olcObjectClasses
olcObjectClasses: ( 4.5.6.9
  NAME 'ecdwhatever'
  AUXILIARY
  MAY ( ecdvisibility $ foo $ bar ) )
-

2.2.980.*OID 真的属于你吗?如果不是,那么最好自己获取一个来自 IANA

相关内容