我正在编写一些ldap自动化脚本,并且已经达到了一个轻微的挂断状态。 基本上,我想检查一个属性被添加到一个条目实际存在一个给定的objectClass之前,我尝试添加它。
到目前为止,我最好的想法是在属性的模式定义文件上运行一个正则expression式,但是在初始化configuration文件后,这并不能解释正在编辑的模式文件。
第二个想法是只捕获如果不能添加属性抛出的错误,但这似乎效率较低,因为我的下一步将是将属性添加到架构并重新configuration。
似乎应该有一个简单的ldapsearch命令来做到这一点,但我不明白的语法。
到目前为止我已经尝试过:
ldapsearch -x -b 'dc=MY_DOMAIN,dc=com' '(objectclass=mySCHEMA)'
但是这只是列出了任何具有mySCHEMA objectclass的ldap条目。
谢谢你的帮忙,干杯!
你正在寻找subschemaSubentry 。
RFC 2252轻量级目录访问协议(v3):属性语法定义
5.1.5。 subschemaSubentry
此属性的值是子模式条目的名称(如果服务器基于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 )
你可以这样find它:
$ ldapsearch -s base -b '' subschemaSubentry dn: subschemaSubentry: cn=Subschema $ ldapsearch -s base -b cn=Subschema objectClasses
作为一条线:
ldapsearch -s base -b $(ldapsearch -s base -b '' subschemaSubentry | sed '/dn:/d;/^$/d;s/subschemaSubentry: //' ) objectClasses
如果你在bash中编写脚本,而你的ldapsearch版本支持它, -o ldif-wrap=no将意味着你不必parsingldif换行。
cn=schema,cn=config由于从cn=configinheritance的访问控制,通常在OpenLDAP下不可用。
从我使用LDAP开始已经很长时间了,但是我认为每个LDAP服务器都可能会在某个后缀中暴露模式。
我认为在OpenLDAP中,您可以在“cn = schema,cn = config”的基础上进行search以查找当前模式。 试试类似ldapsearch -x -s sub -b "cn=schema,cn=config" '(objectclass=*)'来查看你得到的结果。 (没有testing过这个命令行,但是你明白了…)。
从开发人员的angular度来看,我希望正确的模式存在,并处理objectclass违例的exception,就好像它是任何一种错误一样。
我认为改变模式不是应该由添加/删除数据的应用程序来处理,而是由软件的安装程序来处理。
这是我用来显示特定 objectClass的模式,比如organizationalRole
$ ldapsearch -s base -b cn=Subschema objectClasses -LLL -o ldif-wrap=no |\ sed -nr '/organizationalRole/ p' | sed -r 's/[$()]+/\n /g'