Una de las malas noticias de estos últimos tiempos es que la Auditoría Externa nos cae este mes :S. Lo peor es que tengo desactualizada la Bitácora de Creación de Cuentas de Correo y me iba a tocar empezar a buscar en las carpetas del Thunderbird los mensajes de solicitud de creación de cuentas :O.
Fue en ese momento en que se me ocurrió que como tengo instalado un Servidor de Correo con Zimbra 6 y la información de los usuarios se almacena en un LDAP, de pronto podía extraer con un bash script los datos que necesitaba. Y no me equivoqué.
El comando ldapsearch era mi salvación. Ahora lo único que necesitaba saber, era como funcionaba el bendito comando y como convertía los registros de salida desde el formato ldif a csv.
Mi día mejoró cuando googleando un poco más, me encontré un script que hacia algo bastante similar a lo que requería, por lo que teniendo la base ya solo fue cuestión de adaptarlo a mis necesidades :).
A continuación detallo el script modificado y con los comentarios (mas o menos) traducidos al español :D :
nano listCreatedAccount.sh
#!/bin/bash ## Listado de usuarios creados en un determinado período de tiempo ## Basado en http://wiki.zimbra.com/index.php?title=Accounts_created_Report ## Fecha en formato ldapsearch: YYYYMMDDhhmmssZ inidate="20100718000000Z" enddate="20110713000000Z" ## Obtener el ldap password desde la configuración de zimbra ldappass=`/opt/zimbra/bin/zmlocalconfig -s -m nokey zimbra_ldap_password` ## Obtener el ldap dn desde la configuración de zimbra ldapdn=`/opt/zimbra/bin/zmlocalconfig -s -m nokey zimbra_ldap_userdn` ## Obtener el ldap URL desde la configuración de zimbra ldapurl=`/opt/zimbra/bin/zmlocalconfig -s -m nokey ldap_url` ## Ruta al comando ldapsearch y argumentos ldapsearch='/opt/zimbra/bin/ldapsearch' ldapargs="-LLL -x -H $ldapurl -w $ldappass -D $ldapdn " ## Atributos que se van a extraer desde el directorio ## NombreCompleto, Descripcion, Ciudad, Email, FechaDeCreacion ldapattrs="displayName description st zimbraMailDeliveryAddress zimbraCreateTimestamp" ## Buscamos en el LDAP todas las cuentas de Zimbra que se encuentran activas ## y que han sido creadas entre inidate y enddate ## Los registros resultantes en formato ldif son convertidos con awk a formato csv $ldapsearch $ldapargs \ "(&(objectclass=zimbraAccount)(!(objectclass=zimbraCalendarResource))(zimbraAccountStatus=Active)(zimbraCreateTimestamp>=$inidate)(zimbraCreateTimestamp<=$enddate))" \ $ldapattrs \ | awk ' ## Configura el separador de campo a ':' e inicializa variables BEGIN {FS=": ";name=0;descrip=0;st=0;email=0;timestamp=0} ## Si la linea contiene nombre, guardar /displayName/ {name=$2} ## Si la linea contiene descripcion, guardar /description/ {descrip=$2} ## Si la linea contiene provincia, guardar /^st/ {st=$2} ## Si la linea contiene email, guardar /zimbraMailDeliveryAddress/ {email=$2} ## Si la linea contiene fecha de creacion, guardar en un formato legible /zimbraCreateTimestamp/ {timestamp=substr($2,1,4) "-" substr($2,5,2) "-" substr($2,7,2)} ## Si la linea dn: sabemos que estamos empezando un nuevo registro, ## entonces imprimir los datos anteriores y reiniciar las variables /dn:/ {if (email) print name "," descrip "," st "," email "," timestamp; name=0; descrip=0; st=0; email=0; timestamp=0} ## Si llegamos al final de la entrada, imprimimos el ultimo registro END {if (email) print name "," descrip "," st "," email "," timestamp; name=0; descrip=0; st=0; email=0; timestamp=0}' > /tmp/listadoCuentasCreadas.csvLe damos permisos de ejecución al archivo:
chmod u+x listCreatedAccount.shLo ejecutamos:
./listCreatedAccount.sh
Y nos creará el archivo /tmp/listadoCuentasCreadas.csv con el siguiente contenido:
... Fabian De Mesa,Ejecutivo Financiero,Sucumbios,fdemesa@domain.com.ec,2011-06-27 Andres Zuna,Agente Call Center,0,azuna@domain.com.ec,2011-06-29 ...
Si alguno de los campos de las cuentas contiene caracteres con tilde te aparece algo como:
TWFyaWEgSGVybWluacOhIEhlcnJlcmEgTGFzbHVpc2E=,Administrativa,0,mherrera@domain.com.ec,2010-10-26
Lo más fácil para mí fue corregir la información de esos usuarios y volver a generar el listado ;).
Espero que les sea de utilidad igual que a mí ;)
Salu2!
Referencias:
PD: Escuchando 8-bit lagerfeuer de pornophonique 8)