Puedo vincular y consultar Active Directory a través de python-ldap sin ningún problema, excepto cuando se trata de agregar o modificar atributos en AD. Puedo agregar el atributo, pero la codificación parece estar muy lejos ya que todo el texto está confuso.

Intenté codificar mi cadena con utf8 y algunos otros sin suerte.

También he intentado vincular con una cuenta de administrador de dominio junto con la vinculación con la cuenta de usuario a la que voy a cambiar un atributo, independientemente del mismo resultado.

Aquí está el método que uso para actualizar un atributo:

Clase 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

Al hacer un ldapsearch por terminal, así es como se ve el atributo:

mobile:: MC8sAQAAAAAQNA==

Así es como se ve 'Hello World' cuando configuro el dispositivo móvil:

mobile:: 77+9ehsCAAAAABDvv70V

Revisé MSDN y dice que el atributo ldap es solo una cadena Unicode.

Sistema: Ubuntu 15.10 64bit Python: 2.7.10 python-ldap == 2.4.21

Como nota al margen, puedo buscar AD sin ningún problema y analizar / mostrar los atributos de usuario devueltos, el problema solo parece ser con la creación o modificación de atributos que este problema de codificación entra en juego.

5
xXPhenom22Xx 10 dic. 2015 a las 00:35

3 respuestas

La mejor respuesta

Ok, descubrí lo que estaba sucediendo, estaba usando PyPy 4.0.1 como intérprete y, por alguna razón, esto estaba causando problemas con la biblioteca python-ldap y / o la codificación de cadenas.

Volví a Python 2.7.10 para el intérprete y ahora los mismos comandos de modificación anteriores funcionan como se esperaba usando la biblioteca python-ldap. Definitivamente una palabra de precaución si usa PyPy y esta biblioteca en particular ...

0
xXPhenom22Xx 15 dic. 2015 a las 16:24

El '=' al final es a menudo un indicador de que es Base64 codificación. Python tiene una biblioteca estándar para codificación / decodificación base64 (El enlace es para Python 3 , pero Python 2 también tiene la biblioteca). LDAP de hecho usa Base64 para algo. Consulte El formato de intercambio de datos LDAP (LDIF).

0
Alex Taylor 10 dic. 2015 a las 02:55

Eche un vistazo al código de pyad para aclarar qué hacer: https://pypi.python.org/ pypi / pyad

Está basado en Python.

Otro ejemplo en la pregunta ya respondida: Use el script de Python para administrar el servidor LDAP remoto

0
Community 23 may. 2017 a las 11:52
34189433