我能够通过python-ldap绑定和查询Active Directory,除了在AD上添加或修改属性之外没有任何问题.我可以添加属性,但编码似乎已关闭,因为所有文本都是乱码.
我尝试用utf8编码我的字符串和其他几个没有运气的字符串.
我还尝试使用域管理员帐户绑定以及绑定到我将更改属性的用户帐户,无论如何都是相同的结果.
这是我用来更新属性的方法:
LdapHelpers类:
def __init__(self): import ldap # set globals self.server = 'LDAP://dc.mycompany.com' self.admin_dn = 'CN=Administrator,CN=users,DC=mycompany,DC=com' self.admin_pass = 'coolpassword' # init LDAP connection #ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, 0) ldap.set_option(ldap.OPT_REFERRALS, 0) ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER) ldap.protocol_version = ldap.VERSION3 self.ldap = ldap.initialize(self.server) def update_attribute(self, attrib, value): try: import ldap conn = self.ldap conn.simple_bind_s(self.admin_dn, self.admin_pass) mod_attrs = [( ldap.MOD_REPLACE, "mobile", "6306564123")] # I have tried other variations of the above # mod_attrs = [( ldap.MOD_REPLACE, "mobile", "6306564123".encode('utf-8)] conn.modify_s('CN=Mike Smith,OU=GoogleApps,DC=company,DC=com', mod_attrs) print 'record updated' except ldap.LDAPError as e: return e.message
通过终端执行ldapsearch这是属性的样子:
mobile:: MC8sAQAAAAAQNA==
当我设置移动设备时,这就是'Hello World'的样子:
mobile:: 77+9ehsCAAAAABDvv70V
我检查了MSDN,它说ldap属性只是一个Unicode字符串.
系统:Ubuntu 15.10 64位Python:2.7.10 python-ldap == 2.4.21
作为旁注,我可以在没有任何问题的情况下搜索AD并解析/显示返回的用户属性,问题似乎只是创建或修改此编码问题的属性.