Foros del Web » Programando para Internet » Python »

Conexion a Active Directory - Query LDAP

Estas en el tema de Conexion a Active Directory - Query LDAP en el foro de Python en Foros del Web. Estimados, Estoy realizando un Script, para interactuar con Active Directory. Estoy trabado en una funcion. La misma, deberia buscar el usuario en el directorio y ...
  #1 (permalink)  
Antiguo 22/01/2016, 07:45
 
Fecha de Ingreso: julio-2013
Mensajes: 19
Antigüedad: 10 años, 9 meses
Puntos: 2
Conexion a Active Directory - Query LDAP

Estimados,

Estoy realizando un Script, para interactuar con Active Directory. Estoy trabado en una funcion. La misma, deberia buscar el usuario en el directorio y el retorno ser la direccion DN del objeto. Me podran ayudar? Ya me estoy mareando!

Dejo el codigo.

Código Python:
Ver original
  1. #!/usr/bin/env python
  2.  
  3. import ldap
  4. import ldap.modlist as modlist
  5. import sys
  6.  
  7. # Habilitacion de Usuario
  8. # Comienzo de Funcion
  9. def habilitarUsuarioAD(user_dn):
  10.     ATTR = "userAccountControl"
  11.     ATT_VALUE = "514"
  12.     userAccountControl = [(ldap.MOD_REPLACE, ATTR, [ATT_VALUE])]
  13.     try:
  14.         l.modify_s(user_dn, userAccountControl)
  15.         print "Cuenta Habilitada"
  16.     except ldap.LDAPError, e:
  17.         sys.stderr.write('Error mientras Intentaba Habilitar \n')
  18.         sys.stderr.write('Message: ' + str(e) + '\n')
  19. # Fin de Funcion
  20.  
  21.  
  22. # Variables de Administrador de Dominio
  23. admin_pwd = 'XXXXX'
  24.  
  25. LDAP_ADDR = 'ldap://172.17.240.70'
  26. LDAP_BASE = 'DC=XXXX,DC=local'
  27. LDAP_BIND_ADMIN = 'CN=Administrator,CN=Users,DC=XXXX,DC=local'
  28.  
  29.  
  30. # Apertura Conexion Active Directory
  31. print "Conectadno a Active Directory .."
  32. try:
  33.     ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
  34.     l = ldap.initialize(LDAP_ADDR)
  35. except ldap.LDAPError, e:
  36.     print e
  37.     sys.exit(1)
  38.  
  39. # Set de Version, de LDAP
  40. l.protocol_version = ldap.VERSION3
  41.  
  42. # Bind to AD
  43. print "Ingresando Credenciales de Administrador .."
  44. try:
  45.     l.bind_s(LDAP_BIND_ADMIN, admin_pwd)
  46. except ldap.LDAPError, e:
  47.     print e
  48.     sys.exit(1)
  49. else:
  50.     print 'Conexion exitosa a Active Directory'
  51.    
  52. # Usuario a Habilitar
  53. nombre = raw_input("Ingrese la Busqueda: ")
  54. user_dn = 'CN=%s,OU=Usuarios,DC=ironbox,DC=local' % nombre
  55.  
  56. habilitarUsuarioAD(user_dn)
  57.  
  58. # Cierro Conexion
  59. l.unbind()

Como se puede ver, hago un pregunta. Donde se ingresa el nombre de usuario. La idea es que en una funcion, ponga los datos del usuario y me devuelva el Unique ID. Por lo que vi, el campo es "iud". Asi se llama el atributo en AD.

Espero, que puedan, evacuar mi duda!

Les agradezco, el tiempo de lectura!
  #2 (permalink)  
Antiguo 24/01/2016, 21:37
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Conexion a Active Directory - Query LDAP

Aquí hay un ejemplo, espero que te sirva.

http://www.grotan.com/ldap/python-ld...es.html#search
  #3 (permalink)  
Antiguo 25/01/2016, 14:02
 
Fecha de Ingreso: julio-2013
Mensajes: 19
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Conexion a Active Directory - Query LDAP

Gracias razpeitia!

Consegui, lo que queria. En esta funcion, paso como parametro de busqueda el nombre de usuario y me devuelce el CN para luego completarlo para la segunda funcion, que detallo abajo!

Código Python:
Ver original
  1. # Comienza Funcion
  2. def obtenerDN(nombre):
  3.     base = "ou=Usuarios, dc=ironbox, dc=local"
  4.     criteria = "(&(objectClass=user)(sAMAccountName=*%s*))" % nombre
  5.     attributes = ['CN']
  6.     result = l.search_s(base, ldap.SCOPE_SUBTREE, criteria, attributes)
  7.     results = [entry for dn, entry in result if isinstance(entry, dict)]
  8.     print results
  9. # Fin de Funcion

Ahi le paso, el usuario...completo...

Código Python:
Ver original
  1. # Agrego el CN a la direccion DN.
  2. user_dn = 'CN=%s,OU=Usuarios,DC=ironbox,DC=local' % nombre

Código Python:
Ver original
  1. def habilitarUsuarioAD(user_dn):
  2.     ATTR = "userAccountControl"
  3.     ATT_VALUE = "514"
  4.     userAccountControl = [(ldap.MOD_REPLACE, ATTR, [ATT_VALUE])]
  5.     try:
  6.         l.modify_s(user_dn, userAccountControl)
  7.         print "Cuenta Habilitada"
  8.     except ldap.LDAPError, e:
  9.         sys.stderr.write('Error mientras Intentaba Habilitar \n')
  10.         sys.stderr.write('Message: ' + str(e) + '\n')
  11. # Fin de Funcion

El problema, que tengo es que entrega...Estoy recibiendo, de la primer funcion, [{'cn': ['nombre del usuario']}.

Tengo que hacer un grep? Se que en python podría pasarlo por alguna función...para solo sacar el nombre de usuario...estoy viendo eso!

Gracias por las lecturas!
  #4 (permalink)  
Antiguo 26/01/2016, 08:34
 
Fecha de Ingreso: julio-2013
Mensajes: 19
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Conexion a Active Directory - Query LDAP

Listo!

Utilice la funcion find()

Código Python:
Ver original
  1. #!/usr/bin/env python
  2.  
  3. import sys
  4.  
  5. nombre = "[{'cn': ['NombreDeUsuario']}]"
  6.  
  7. primerPos = nombre.find("['")
  8. segundaPos = nombre.find("']")
  9.  
  10. print(nombre[primerPos+2:segundaPos])

Saludos y gracias por leer!

Etiquetas: ldap
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:30.