登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

SeaRiver Blog

实力才是你一生最好的依靠!

 
 
 

日志

 
 

使用ldapmodify批量修改目录节点属性  

2010-07-21 11:20:27|  分类: LDAP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

问题:
在ou=People,o=abc,dc=super, dc=com树下放了10000个用户节点(objectClass=inetOrgPerson, objectClass=inetuser)。其中有超过9000个用户的属性inetuserstatus的值为不正确的"true",需要更正为 "Active"。

解决方法:
由 于需要修改的目录节点数目十分庞大,手工书写修改命令不太可行。所以,需要考虑用工具生成。考虑到ldapsearch的输出可以指定属性,可以在 ldapsearch输出的基础上加以修改得到最终的LDIF文件。首先,利用ldapsearch得到所有需要修改的目录节点的dn,并保存到文件 need_chg.dn:
ldapsearch -D "cn=Directory Manager" -w password -b "ou=People,o=abc,dc=super,dc=com" "(inetuserstatus=true)" dn > need_chg.dn
得到的need_chg.dn文件示例如下:
uid=xulingyan,ou=people,o=abc,dc=super,dc=com

uid=tn0001,ou=people,o=abc,dc=super,dc=com

uid=tn0002,ou=people,o=abc,dc=super,dc=com

uid=tn0003,ou=people,o=abc,dc=super,dc=com

uid=tn0004,ou=people,o=abc,dc=super,dc=com


然后编写sed脚本在每个dn前面加上"dn: ",并加上以下行:
changetype: modify
replace: inetuserstatus
inetuserstatus: Active

修改后的need_chg.dn文件示例如下:
dn: uid=xulingyan,ou=people,o=abc,dc=super,dc=com
changetype: modify
replace: inetuserstatus
inetuserstatus: Active

dn: uid=tn0001,ou=people,o=abc,dc=super,dc=com
changetype: modify
replace: inetuserstatus
inetuserstatus: Active

dn: uid=tn0002,ou=people,o=abc,dc=super,dc=com
changetype: modify
replace: inetuserstatus
inetuserstatus: Active

dn: uid=tn0003,ou=people,o=abc,dc=super,dc=com
changetype: modify
replace: inetuserstatus
inetuserstatus: Active

dn: uid=tn0004,ou=people,o=abc,dc=super,dc=com
changetype: modify
replace: inetuserstatus
inetuserstatus: Active

该sed脚本应该如下:

/^uid=/ {
a\
changetype: modify\
replace: inetuserstatus\
inetuserstatus: Active
s/uid/dn: uid/
}

最后,运行ldapmodify -h host -p port -D <bind dn=""> -w<password> -f <ldif file="">即可。

总结:
熟悉LDIF文件格式并有效运文本处理工具可以高效率地解决一些看似棘手的难题。
</ldif></password></bind>

 

 

[root@fxstest yuhj]# cat test
uid=xulingyan,ou=people,o=abc,dc=super,dc=com

uid=tn0001,ou=people,o=abc,dc=super,dc=com

uid=tn0002,ou=people,o=abc,dc=super,dc=com

uid=tn0003,ou=people,o=abc,dc=super,dc=com

uid=tn0004,ou=people,o=abc,dc=super,dc=com
[root@fxstest yuhj]#
[root@fxstest yuhj]# sed -r 's/uid/dn: &/g;/uid=/achangetype: modify\nreplace: inetuserstatus\ninetuserstatus: Active' test
dn: uid=xulingyan,ou=people,o=abc,dc=super,dc=com
changetype: modify
replace: inetuserstatus
inetuserstatus: Active

dn: uid=tn0001,ou=people,o=abc,dc=super,dc=com
changetype: modify
replace: inetuserstatus
inetuserstatus: Active

dn: uid=tn0002,ou=people,o=abc,dc=super,dc=com
changetype: modify
replace: inetuserstatus
inetuserstatus: Active

dn: uid=tn0003,ou=people,o=abc,dc=super,dc=com
changetype: modify
replace: inetuserstatus
inetuserstatus: Active

dn: uid=tn0004,ou=people,o=abc,dc=super,dc=com
changetype: modify
replace: inetuserstatus
inetuserstatus: Active

  评论这张
 
阅读(2446)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018