Я могу привязывать и запрашивать Active Directory через python-ldap без каких-либо проблем, кроме случаев, когда речь идет о добавлении или изменении атрибутов в AD. Я могу добавить атрибут, но кодировка кажется удачной, поскольку весь текст искажен.Атрибут записи Python LDAP для Active Directory
Я пробовал кодировать мою строку с 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 64bit Python: 2.7.10 питон-== 2.4.21 LDAP
Как примечание стороны, я могу искать AD без каких-либо проблем и синтаксический анализ/дисплей возвращаемые атрибуты пользователя, вопрос только похоже, с созданием или модификацией атрибутов, которые эта проблема кодирования входит в игру.
не могли бы вы проверить, какой запрос отправлен 'tcpflow -c порт 389'? – kwarunek
Вот дамп из запроса на изменение выше: tcpflow -c порт 389 tcpflow: listen on eth0 010.001.200.029.54760-010.000.000.039.00389: 0C'> -CN = Administrator, CN = users, DC = компания , DC = com coolpassword 010.000.000.039.00389-010.001.200.029.54760: 0a 010.001.200.029.54760-010.000.000.039.00389: 0 [fV4CN = Jassen Michaels, OU = GoogleApps, DC = компания, DC = com00 pmobile1 010.000.000.039.00389-010.001.200.029.54760: 0g – xXPhenom22Xx