python-ldap在python脚本中与交互界面不同有些属性必须写成LIST格式

从win客户端操作用python-ldap大规模的导入用户
主要参考文章https://www.cnblogs.com/littlehb/p/9379851.html

先用交互界面进行原型测试

>>> import hashlib
>>> hashlib.md5("ysk").hexdigest()
'958c6b03f7b874c20c91ce2ee7b3a950'
>>> import binascii
>>> import base64
>>> base64.b64encode(binascii.a2b_hex('958c6b03f7b874c20c91ce2ee7b3a950'))
'lYxrA/e4dMIMkc4u57OpUA=='
>>> def hash_md5(data):
...   md = hashlib.md5()
...   md.update(str(data))
...   a=md.digest()
...   b=base64.b64encode(a)
...   return b
...
>>> hash_md5('ysk')
'lYxrA/e4dMIMkc4u57OpUA=='
>>> import ldap,ldap.modlist
>>> l=ldap.initialize('ldap://10.16.97.210:389')
>>> l.protocal_version =ldap.VERSION3
>>> l.simple_bind('cn=admin,dc=mydebian210,dc=mydomain,dc=net','secret_password')
>>> addDN='uid=ysk,ou=web_ftp_users,dc=mydebian210,dc=mydomain,dc=net'
>>> attrs = {}
>>> attrs['cn']='ysk'
>>> attrs['givenName']=u'客户'.encode('utf-8')
>>> attrs['objectClass']=['inetOrgPerson','top']
>>> attrs['userPassword']='{MD5}lYxrA/e4dMIMkc4u57OpUA=='
>>> attrs['sn']=u'-公开文档'.encode('utf-8')
>>> ldif=ldap.modlist.addModlist(attrs)
>>> l.add_s(addDN,ldif)
(105, [], 2, [])
>>> l.unbind_s()
>>>
>>>
>>> import ldap,ldap.modlist
>>> l=ldap.initialize('ldap://10.16.97.210:389')
>>> l.protocal_version =ldap.VERSION3
>>> try :
...     i=l.simple_bind_s('uid=ysk,ou=web_ftp_users,dc=mydebian210,dc=mydomain,dc=net','ysk')[0]
... except ldap.INVALID_CREDENTIALS:
...     i=0
>>>print i==97
True
>>> ^Z

但是在python脚本中同样的内容执行却出错,#出现TypeError: ('expected a string in the list', u'0')错误

在网络上搜索,解决办法是有些属性必须写成LIST格式。见这个网页https://github.com/python-ldap/python-ldap/issues/237

import ldap,ldap.modlist

import hashlib
import binascii
import base64

#从其他系统Oracle中取出用户名和MD5密文result


l=ldap.initialize('ldap://10.16.97.210:389')
l.protocal_version =ldap.VERSION3
l.simple_bind('cn=admin,dc=mydebian210,dc=mydomain,dc=net','secret_password')

#出现TypeError: ('expected a string in the list', u'0')错误见以下网页
#https://github.com/python-ldap/python-ldap/issues/237
#解决办法就一是item[0]虽然没有中文,但是unicode,必须转换成str,其他的文本字段用[]变为list

for item in result :
    addDN='uid=%s,ou=indiaudit,dc=mydebian210,dc=mydomain,dc=net' % (item[0],)
    attrs = {}
    attrs['cn']=str(item[0])
    attrs['givenName']=[str(item[1].encode('utf-8')),]
    attrs['objectClass']=['inetOrgPerson','top']
    print ['{MD5}%s' % (base64.b64encode(binascii.a2b_hex(item[2])),),]
    attrs['userPassword']=['{MD5}%s' % (base64.b64encode(binascii.a2b_hex(item[2])),),]
    attrs['sn']=[str(item[1].encode('utf-8')),]
    ldif=ldap.modlist.addModlist(attrs)
    l.add_s(addDN,ldif)


l.unbind_s()

 

展开阅读全文
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读