免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6579 | 回复: 15
打印 上一主题 下一主题

[ldap] 求救:OpenLDAP中的访问控制关于正则表达式的问题. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-05-07 21:22 |只看该作者 |正序浏览
本人在分析openldap过程中,根据有关资料,对访问控制有了一定了解.现遇到有关正则表达式的问题,恳请高手不吝赐教,谢谢!
问题如下:
  目的:使数据库中所有dn为"ou=***,……"的entry能够被他的子孙所读
  例子:假设目录数据库中的整体结构如下图:
    c=IBM
                 ou=Accounting
                      cn=Bob
                      cn=Tom
                      cn=Rose
                 ou=Product Departmen
                 ou=Management
                 ou=Human Resources
       如果我以cn=Bob的身份登陆,便可以读"ou=Accounting"的信息.
  于是我在配置文件slapd.conf中设置为:
  ……
  access   to    dn.regex="^ou=([^,]+),c=IBM"
                    by   dn.regex="ou=$0,c=IBM"   read
                    by    *   none    break
      access    to    *
                    by    self      write
                    by    annonymous     auth
                    by    *    none
       但不能达到目的.
  通过LDAPBrowser,以用户cn=Bob登陆,查看不到任何信息.


  另附:
  如果希望每个父结点(entry)都能够具有对其子树中所有子孙的写权限,可在配置文件slapd.conf中输入设置:
  access   to   dn.regex="^.*,ou=([^,]+),c=IBM"
                   by   dn.regex="^ou=$1,c=IBM"    write
                   by   *    none   break
      access   to   *
                   by   self    write
                   by   annonymous     auth
                   by   *   none
      然后启动服务进程slapd,通过LDAPBrowser,以ou=Accounting的身份登陆,可以看到并修改ou=Accounting整个子树,而看不到其他的ou=***.


现在我的目的是希望:
  任何以"cn=***"身份登陆的用户,只能看到本单位的信息和修改自己的信息.而看不到其他任何人和单位的信息,即他的视图应为:
  c=IBM
            ou=Accounting
                   cn=***
  任何以"ou=***"身份登陆的用户,可以看到并修改他整个子树的信息,即他的视图应为:(以ou=Accounting为例)
  c=IBM
            ou=Accounting
                   cn=Bob
                   cn=Tom
                   cn=Rose
现后者问题已经解决,但前者,也就是允许任何ou=***的目录项被他的子孙以读的权限进行访问,还没有解决,恳求高手赐教.
  谢谢.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
16 [报告]
发表于 2006-05-10 19:28 |只看该作者
都一年了...
这样的询问意义不是很大,建议开一个新帖

论坛徽章:
0
15 [报告]
发表于 2006-05-10 17:33 |只看该作者
请教下楼主 ([^,]+) 这个表达式是什么意思?请指教,有相关的正则表达式的学习资料吗?能给个连接吗?
谢谢!!1

论坛徽章:
0
14 [报告]
发表于 2005-06-28 10:42 |只看该作者

求救:OpenLDAP中的访问控制关于正则表达式的问题.

因此,$0匹配的内容就是“ou=Accounting,c=IBM”,而,“ou=$0,c=IBM”就和任何包含“ou=ou=Accounting,c=IBM,c=IBM”的字符串相匹配。

论坛徽章:
0
13 [报告]
发表于 2005-06-28 10:39 |只看该作者

求救:OpenLDAP中的访问控制关于正则表达式的问题.

不好意思
第一个与“^ou=([^,]+),c=IBM”相匹配的字符串为“ou=Accounting,c=IBN”,漏写了“,c=IBM”。

论坛徽章:
0
12 [报告]
发表于 2005-06-28 10:32 |只看该作者

求救:OpenLDAP中的访问控制关于正则表达式的问题.

$0匹配的内容是第一个与整个正则表达式匹配的字符串。
本例中第一个与“^ou=([^,]+),c=IBM”匹配的字符串是"ou=Accounting" ,$0匹配的内容就是"ou=Accounting",“ou=$0,c=IBM”就和任何包含“ou=ou=Accounting,c=IBM”的字符串相匹配。
如果 “ou=Product Departmen ”放在第一个的位置上,那么$0匹配的内容就是“ou=Product Departmen ”,“ou=$0,c=IBM”就和任何包含“ou=ou=Product Departmen ,c=IBM”的字符串相匹配。

论坛徽章:
0
11 [报告]
发表于 2005-05-30 15:05 |只看该作者

求救:OpenLDAP中的访问控制关于正则表达式的问题.

$0可能是代表所有的参数串

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2005-05-10 09:47 |只看该作者

求救:OpenLDAP中的访问控制关于正则表达式的问题.

string_expand()函数的问题我不太清楚,一直在用openldap,但对internal的东西没有什么了解。你的问题可以到C版上问问看,以前我的一个UTF8的问题就在那里解决了

论坛徽章:
0
9 [报告]
发表于 2005-05-10 09:36 |只看该作者

求救:OpenLDAP中的访问控制关于正则表达式的问题.

谢谢PV兄.
你说的是对的.
关于正则表达式我也是刚看不到一个月,阅读了不少资料,未免有囫囵吞枣之嫌,
感谢你的指正.
顺便再问个问题:
那$0到底有什么用??
它指代什么??
因为我在分析OpenLDAP源代码的函数string_expand()中发现:
它允许$0-9的出现,即允许存在,那他如果存在,代表什么呢???

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2005-05-09 23:54 |只看该作者

求救:OpenLDAP中的访问控制关于正则表达式的问题.

匹配的变量范围是$1到$9
匹配只对括号中的内容有效.
正则表达式是通用的,在perl、vi里也是一样
举个例子:
# assume supplied dn ou=something,cn=my name,dc=example,dc=com
# then $1 = my name at end of match below
# because first expression does not have ()
access to dn="ou=[^,]+,cn=([^,]+),dc=example,dc=com"
by dn.exact="cn=$1,dc=example,dc=com"

楼主如果有兴趣可以试试看
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP