Chinaunix首页 | 论坛 | 博客
  • 博客访问: 857906
  • 博文数量: 254
  • 博客积分: 5350
  • 博客等级: 大校
  • 技术积分: 2045
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-27 13:27
文章分类

全部博文(254)

文章存档

2015年(1)

2014年(9)

2013年(17)

2012年(30)

2011年(150)

2010年(17)

2009年(28)

2008年(2)

分类: 系统运维

2011-05-06 10:35:00

使用ldapmodify


问题:
在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

ldapsearch -D "cn=Manager,dc=nsk,dc=northstar.com.tw" -w secret -b "uid=ethan.xie,ou=People,dc=nsk,dc=northstar.com.tw"

得到的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 -w -f 即可。

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

***注意:在两个条目间要加空行

阅读(1546) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~