Атрибут записи LDAP Python в Active Directory

Я могу связывать и запрашивать 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 64bit Питон: 2.7.10 python-ldap==2.4.21

в качестве примечания я могу искать объявление без каких-либо проблем и анализировать/отображать возвращенные атрибуты пользователя, проблема только в создании или изменении атрибутов, которые эта проблема кодирования входит в игру.

3 ответов


' = ' в конце часто является индикатором того, что это в base64 кодировка. Python имеет стандартную библиотеку для кодирования/декодирования в base64 (ссылка для Python 3, но Python 2 также имеет библиотека). LDAP действительно использует Base64 для чего-то. См.формат обмена данными LDAP (LDIF).


взгляните на код пядь, чтобы уточнить, что делать: https://pypi.python.org/pypi/pyad

Он основан на Python.

еще один пример на уже ответивший вопрос:используйте скрипт Python для управления удаленным сервером LDAP


Ok я узнал, что происходит, я использовал PyPy 4.0.1 в качестве интерпретатора, и по какой-то причине это либо вызывало проблемы с библиотекой python-ldap и/или кодировкой для строк.

я переключился обратно на Python 2.7.10 для интерпретатора, и теперь те же самые команды изменения выше работают, как ожидалось, используя библиотеку python-ldap. Так что определенно слово предостережения при использовании PyPy и этой конкретной библиотеки....