#! /usr/bin/env python # Generar fichero LDIF de usuarios # CC 2011: Juan Luis Garcia para www.ldapconfig.net # juanluisga@ldapconfig.net # MODULOS import csv,random,base64,hashlib,ldap,unicodedata,argparse # FUNCIONES def filtrarCaracteresEspeciales(cadena): return ''.join((c for c in unicodedata.normalize('NFD', unicode(cadena,'UTF8')) if unicodedata.category(c) != 'Mn')) def generarPassword(identificador): letrasMin = "abcdefghijklmnopqrstuvwxyz" letrasMay = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" numeros = "1234567890" especiales="!@#$%&=;." secuencia = letrasMin + letrasMay + numeros + especiales cadena = "" for i in range(8): cadena = cadena + random.choice(secuencia) k = hashlib.md5(cadena) encriptada = k.digest() encriptada = "{MD5}" + base64.standard_b64encode(encriptada) return cadena,encriptada def conflictoLDAP(host,base,identificador): directorio = ldap.open(host) directorio.set_option(ldap.OPT_PROTOCOL_VERSION,ldap.VERSION3) result_id = directorio.search(base,ldap.SCOPE_SUBTREE,"uid="+identificador) result_type, result_data = directorio.result(result_id,0) if result_type == ldap.RES_SEARCH_ENTRY: return True else: return False # DEFINICION DE PARAMETROS parser = argparse.ArgumentParser(description="Generar fichero LDIF de usuarios") parser.add_argument("-f","--ficheroEntrada",action="store",dest="ficheroEntrada",type=str,default="nuevos.csv",help="(Por defecto: nuevos.csv) Fichero en formato csv con los datos de los usuarios. Usar punto y coma ';' como separador y sin delimitacion de campos. Formato: Nombre;Apellidos;uid;departamento ") parser.add_argument("-s","--servidorLDAP", action="store", dest="servidorLDAP",type=str, default="localhost",help="(Por defecto: localhost) Servidor LDAP sobre el que se cargaran el fichero LDIF generado.") parser.add_argument("-b","--baseDN", action="store", dest="baseDN",type=str,default="dc=ldapconfig,dc=net",help="(Por defecto: dc=ldapconfig,dc=net) Sufijo del directorio LDAP. ") parser.add_argument("-u","--uidNumberInicial", action="store", dest="uidNumberInicial", type=int,default=101,help="(Por defecto: 101) Primer uidNumber disponible a partir del cual se numeran las nuevas entradas.") parametros = parser.parse_args() ficheroEntrada = parametros.ficheroEntrada servidorLDAP = parametros.servidorLDAP baseDN = parametros.baseDN uidNumberInicial = parametros.uidNumberInicial rutaFicheros = "./" ficheroLDIF = rutaFicheros + "usuarios.ldif" ficheroUsuarios = rutaFicheros + "usuarios.csv" ficheroConflictos = rutaFicheros + "usuarios.log" fEntrada = open(ficheroEntrada,"rb") fLDIF = open(ficheroLDIF,"wb") fUsuarios = open(ficheroUsuarios,"wb") fConflictos = open(ficheroConflictos,"wb") rEntrada = csv.reader(fEntrada,delimiter=";") wUsuarios = csv.writer(fUsuarios,delimiter=";") wConflictos = csv.writer(fConflictos,delimiter=";") uidNumber = uidNumberInicial - 1 wUsuarios.writerow(["APELLIDOS","NOMBRE","UID","PASSWORD"]) wConflictos.writerow(["UID","MOTIVO"]) for index,row in enumerate(rEntrada): nombre = row[0] apellidos = row[1] uid = row[2] departamento = row[3] if (conflictoLDAP(servidorLDAP,baseDN,uid)): wConflictos.writerow([uid,"Ya existe la cuenta"]) else: password = generarPassword(uid) uidNumber = uidNumber + 1 # ESCRIBE EN EL FICHERO DE USUARIOS wUsuarios.writerow([apellidos,nombre,uid,password[0]]) # ESCRIBE EN FICHERO LDIF fLDIF.write("dn: uid=" + uid + ",ou=usuarios,ou=" + departamento + "," + baseDN + "\n") fLDIF.write("objectClass: inetOrgPerson\n") fLDIF.write("objectClass: posixAccount\n") fLDIF.write("cn: " + nombre + "\n") fLDIF.write("sn: " + apellidos + "\n") fLDIF.write("displayName: "+ nombre + " " + apellidos + "\n") fLDIF.write("uid: " + uid + "\n") fLDIF.write("homeDirectory: /home/" + uid + "\n") fLDIF.write("uidNumber: " + str(uidNumber) + "\n") fLDIF.write("gidNumber:1001\n") fLDIF.write("userPassword: " + password[1] + "\n") fLDIF.write("\n"); fEntrada.close() fLDIF.close() fUsuarios.close() fConflictos.close()Más información del script en el sitio del autor: LDAP Config
Script Python para generar ficheros LDIF de usuarios
d
Nombre: usuariosGenerarLDIF.py
Autor: Juan Luis García
Descripción: Proceso automatizado de creación de un fichero LDIF que podría servir para dar de alta masivamente a un grupo de usuarios cuyos datos estuvieran almacenados en un fichero csv.
Visto en LDAP Config
Suscribirse a:
Enviar comentarios (Atom)
0 comentarios:
Publicar un comentario