#!/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