martes, 18 de octubre de 2016

Zimbra: Listar los usuarios creados en un determinado período de tiempo


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.csv
Le damos permisos de ejecución al archivo:
chmod u+x listCreatedAccount.sh
Lo 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)

"Transporta un puñado de tierra todos los días y construirás una montaña" - Confucio