查看 LDAP 对象类的所有可能属性

Roo*_*ter 5 openldap ldap

我正在编写一些 ldap 自动化脚本,但遇到了轻微的挂断。基本上,我想在尝试添加之前检查添加到条目的属性是否确实存在于给定的 objectClass 中。

到目前为止,我对此的最佳想法只是在属性的架构定义文件上运行正则表达式,但这并不能说明在配置初始化后正在编辑的架构文件。

第二个想法是在无法添加属性时捕获抛出的错误,但这似乎效率较低,因为我的下一步是将属性添加到架构并重建配置。

似乎应该有一个简单的 ldapsearch 命令来执行此操作,但我无法弄清楚语法。

到目前为止,我已经尝试过:

ldapsearch -x -b 'dc=MY_DOMAIN,dc=com' '(objectclass=mySCHEMA)'
Run Code Online (Sandbox Code Playgroud)

但这只是列出了任何具有 mySCHEMA 对象类的 ldap 条目。

感谢您的帮助,干杯!

841*_*104 7

您正在寻找subschemaSubentry.
RFC 2252轻量级目录访问协议 (v3):属性语法定义

5.1.5. 子模式子条目

此属性的值是子模式条目的名称(如果服务器基于 X.500(93),则为子条目),其中服务器提供指定模式的可用属性。

( 2.5.18.10 NAME 'subschemaSubentry'
  EQUALITY distinguishedNameMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 NO-USER-MODIFICATION
  SINGLE-VALUE USAGE directoryOperation )
Run Code Online (Sandbox Code Playgroud)

你可以这样找到它:

$ ldapsearch -s base -b '' subschemaSubentry
dn:
subschemaSubentry: cn=Subschema

$ ldapsearch -s base -b cn=Subschema objectClasses
Run Code Online (Sandbox Code Playgroud)

作为一行:

ldapsearch -s base -b $(ldapsearch -s base -b '' subschemaSubentry | sed '/dn:/d;/^$/d;s/subschemaSubentry: //' ) objectClasses
Run Code Online (Sandbox Code Playgroud)

如果您在 bash 中编写脚本并且您的 ldapsearch 版本支持它,-o ldif-wrap=no则意味着您不必解析 ldif 换行。


cn=schema,cn=config,虽然方便,但由于继承自 的访问控制,在 OpenLDAP 下通常不可用cn=config


小智 2

自从我使用 LDAP 以来已经有很长一段时间了,但我认为每个 LDAP 服务器可能会公开某个后缀中的模式。

我认为在 Openldap 中您可以在基本“cn=schema, cn=config”中搜索以查找当前模式。尝试类似的事情ldapsearch -x -s sub -b "cn=schema,cn=config" '(objectclass=*)'看看你会得到什么。(尚未测试此命令行,但您明白了......)。

从开发人员的角度来看,我希望存在正确的模式,并处理对象类违规的异常,就好像它是任何类型的错误一样。

我认为更改架构不应该由添加/删除数据的应用程序来处理,而应该由软件的安装过程来处理。