首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

ldap tools 使用

作者:  时间: 2011-06-16

ldap的命令行工具,这里分别列举了oracle 10.2客户端安装包自带的工具($ORACLE_HOME/bin路径下)和OpenLDAP 2.2包含的客户端工具。

 

搜索

以下2个搜索结果是等价的,都是将basedn 'dc=zj,DC=com' 下的整棵树显示出来(Base DN必须指定)。

差别:oracle 可以用 -X 打印出XML样式的输出;而 OpenLDAP 默认会输出许多注释(版本,数量,当前记录是什么),可用 -LLL 全部禁用掉。
        OpenLDAP 默认是 sasl 验证,所以需要 -x 选项指定 simple auth。

        OpenLDAP 中 filter 如果为空,则默认等于 'objectclass=*' ;而 oracle 必须指定 filter。
如果filter后紧接着Attr是 '' 则表示只输出dn,对两者都是一样的。

oracle 10.2:
  ldapsearch -h localhost -p 389 -D 'cn=root,dc=zj,DC=com' -w 123qwe -s sub -b 'dc=zj,DC=com' 'objectclass=*'
openldap 2.2:
  ldapsearch -x -h localhost -p 389 -D 'cn=root,dc=zj,DC=com' -w 123qwe  -s sub -b 'dc=zj,DC=com'

添加

下面两个操作都表示从文件 file.ldif 中导入

 

   -c 选项都表示,遇到错误继续(默认行为是遇到错误即停止添加操作)
oracle 10.2:
  ldapadd -h localhost -p 389 -D 'cn=root,dc=zj,DC=com' -w 123qwe -f file.ldif
openldap 2.2:
  ldapadd -x -h localhost -p 389 -D 'cn=root,dc=zj,DC=com' -w 123qwe  -f file.ldif
 

删除

因为 ldapdelete 不支持递归删除,所以这里用一个shell脚本来完成该任务。

这里的例子表示删除 DN ou=People,dc=zj,DC=com 及其下面的所有 children


 1 #! /bin/sh
 2 # For openldap
 3 
 4 # 临时文件
 5 DELETE_ENTRY_FILE=/tmp/$$.ldif
 6 
 7 # 输出ou=People,dc=zj,DC=com下的所有DN。注意这里对结果进行了反转,即最后一行转置位第一行
 8 ldapsearch --h localhost -389 -'cn=root,dc=zj,DC=com' -w 123qwe  -s sub -'ou=People,dc=zj,DC=com' -LLL '' | sed -'s+^dn: *++' |tac > $DELETE_ENTRY_FILE
 9 
10 # 删除文件中列出的DN
11 ldapdelete --h localhost -389 -'cn=root,dc=zj,DC=com' -w 123qwe -f $DELETE_ENTRY_FILE
12 
13 # 删除临时文件
14 rm $DELETE_ENTRY_FILE