Я могу привязываться и запрашивать Active Directory через python-ldap без каких-либо проблем, за исключением случаев, когда речь идет о добавлении или изменении атрибутов в 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 без каких-либо проблем и анализировать/отображать возвращаемые пользовательские атрибуты, проблема, по-видимому, связана только с созданием или изменением атрибутов, с которыми связана эта проблема с кодировкой.
tcpflow -c port 389
? - person kwarunek   schedule 15.12.2015