我无法让 allop 覆盖工作。我怀疑我遗漏了一些重要的配置选项,或者我做错了什么。任何帮助都将不胜感激。
我需要使用 allop 让 cisco 设备使用 memberOf 属性与 ldap 配合使用。我已经让 memberOf 覆盖正常工作,当我使用“+”查询时会返回 memberOf 属性。
我已经使用 apt-get install 在 Ubuntu 12.04.5 LTS 服务器上安装了 openldap 2.4.28。我从源代码编译了 allop 覆盖并将 allop.so 库复制到 /var/lib/ldap/ 目录。
此版本的openldap使用olc配置方法。
我使用以下 ldif 添加了模块:
## module.ldif
dn: cn=module,cn=config
cn: module
objectclass: olcModuleList
objectclass: top
olcmoduleload: allop.so
olcmodulepath: /usr/lib/ldap
# sudo ldapadd -Y EXTERNAL -H ldapi:/// -f module.ldif -v
我使用以下 ldif 添加了覆盖配置:
## allop.ldif
dn: olcOverlay={2}allop,olcDatabase={1}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: {2}allop
# sudo ldapadd -Y EXTERNAL -H ldapi:/// -f allop.ldif -v
然后我重新启动了 slapd 并进行测试,但操作属性仍然没有返回。
以下是使用调试跟踪运行 slapd 的一些输出:
54198057 ldif_read_file: read entry file: "/etc/ldap/slapd.d/cn=config/cn=module{3}.ldif"
54198057 => str2entry: "# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 18d7a995
dn: cn=module{3}
objectClass: olcModuleList
objectClass: top
cn: module{3}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}allop.so
structuralObjectClass: olcModuleList
entryUUID: 1e7b5ebe-d252-1033-97f7-618a755f5e4b
creatorsName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
createTimestamp: 20140917010302Z
entryCSN: 20140917010302.779622Z#000000#000#000000
modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20140917010302Z
"
54198057 >>> dnPrettyNormal: <cn=module{3}>
54198057 <<< dnPrettyNormal: <cn=module{3}>, <cn=module{3}>
54198057 >>> dnNormalize: <gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth>
54198057 <<< dnNormalize: <gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth>
54198057 >>> dnNormalize: <gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth>
54198057 <<< dnNormalize: <gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth>
54198057 <= str2entry(cn=module{3}) -> 0x7f04f45450c8
...
54198057 ldif_read_file: read entry file: "/etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb/olcOverlay={2}allop.ldif"
54198057 => str2entry: "# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 1b6fab9c
dn: olcOverlay={2}allop
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: {2}allop
structuralObjectClass: olcOverlayConfig
entryUUID: 5c207c24-d25a-1033-8da6-db55e5b2e477
creatorsName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
createTimestamp: 20140917020202Z
entryCSN: 20140917020202.176575Z#000000#000#000000
modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20140917020202Z
"
54198057 >>> dnPrettyNormal: <olcOverlay={2}allop>
54198057 <<< dnPrettyNormal: <olcOverlay={2}allop>, <olcOverlay={2}allop>
54198057 >>> dnNormalize: <gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth>
54198057 <<< dnNormalize: <gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth>
54198057 >>> dnNormalize: <gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth>
54198057 <<< dnNormalize: <gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth>
54198057 <= str2entry(olcOverlay={2}allop) -> 0x7f04f45450c8
当我运行查询时,调试输出中没有任何有趣的内容,当然也没有错误消息或任何与 allop 相关的内容。
答案1
您的配置中没有提到,但您是否配置了“allop-URI”选项?如果留空,它将仅返回操作属性ldap:///??base
- 即“”的基数和范围“基数”。您需要指定应返回操作属性的模式,例如ldap:///??sub
请注意,allop-URI 不执行特定的操作属性 - 对于提供的范围和基础来说,它是全有或全无。
答案2
我通过从 OLC 移至 slapd.conf 配置解决了这个问题。看来 OLC 不支持 allop。