LDAP olcAccess 正则表达式未按预期工作

Posted

技术标签:

【中文标题】LDAP olcAccess 正则表达式未按预期工作【英文标题】:LDAP olcAccess regex are not working as expected 【发布时间】:2015-10-19 23:55:12 【问题描述】:

我有一个使用结构运行的 LDAP 服务器:

dc=example,dc=ldap
   dc=organisations
      o=orga1 (objectClasses top/organisation/dcObject)
         cn=ADMINS (objectClasses top/groupOfNames)
         cn=USER
      o=orga2 
         cn=ADMIN
         cn=USER
      cn=users (objectClasses top/organisation/dcObject)
         cn=user1 (objectClasses top/person)
         cn=user2

现在我想添加一些规则,只有组织组中的用户才能看到组织。

硬编码方法很容易实现:

olcAccess: 1to dn.subtree="o=orga1,dc=organizations,dc=example,dc=ldap"
  by group.exact="cn=ADMINS,o=orga1,dc=organizations,dc=example,dc=ldap" write
  by group.exact="cn=USER,o=orga1,dc=organizations,dc=example,dc=ldap" read
  by * none

(在'by'前面写两个空格很重要[这对我来说是一个很长一段时间的问题])

但我不想为每个新组织实施这些规则,所以我尝试使用一些正则表达式来实施规则。但我失败得很惨:

olcAccess: 1to dn.regex="^o(.+),dc=organizations,dc=example,dc=ldap$"
  attrs=children
  by group.exact="cn=ADMINS,o=[$1],dc=organizations,dc=example,dc=ldap$" write
  by group.exact="cn=USER,o=[$1],dc=organizations,dc=example,dc=ldap$" read
  by * none

这条规则没有任何影响。 那么有人有什么想法可以解决我的问题吗?

还是不能像我一样对成员进行分组?

再次感谢

【问题讨论】:

【参考方案1】:

在邮件列表中,我得到了 group.exact 没有进行正则表达式评估的提示。

作为一种解决方法,我创建了我自己的 objectClass 与属性 “orgaMember”和“orgaAdmin”现在可以基于这些属性创建 olcAccess 规则。要将此规则应用于所有组织,可以使用正则表达式。

olcAccess: 1to dn.regex="^o=(.+),dc=organizations,dc=example,dc=ldap$"
 by dnattr=orgaAdmin write
 by dnattr=orgaMember read
 by * none

我希望这会对某人有所帮助。

PS。要更新 objectClasses 需要注意很多事情。 见http://www.zytrax.com/books/ldap/ch6/slapd-config.html

【讨论】:

以上是关于LDAP olcAccess 正则表达式未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

NSpredicate 上的正则表达式未按预期工作

C++ 11 正则表达式未按预期返回组

使用正则表达式查找命令未按预期工作

Grep 正则表达式未按预期工作

NLTK - nltk.tokenize.RegexpTokenizer - 正则表达式未按预期工作

js 正则表达式未按预期工作。未检测到换行符[重复]