January 16th, 2007
Bajar la quota en un servidor de Correo que tiene Maildir
Hoy me vi en la penosa necesidad de limpiar cuentas en un servidor que es exclusivamente para correo, a prueba y error fuí perfeccionando un script que al final funciona tal como lo que necesito, podría ser perfeccionado, pero no le veo el sentido a hacerlo mas complicado.
El script es sencillo, pero hay detallitos que pueden ser muy relevantes, por ejemplo hay que ser cuidadosos con los nombres de directorios que tienen espacios (export IFS=$’\n’), por lo demás todo se limita a irte usuario por usuario corriendo este script, el script toma como primer argumento el nombre del usuario, y asume que todos los usuarios estan en /home/nombre.de.usuario, por lo que si no están ahá habráa que modificarlo para agarrar el $HOME verdadero, lo cual no deberia ser muy dificil.
#!/bin/bash
# $1 == usuario
if [ -d /home/$1/Maildir/ ] ; then cd /home/$1/Maildir/; else echo "no existe el directorio /home/$1/Maildir/"
; exit 1; fi
export IFS=$'\n'
for d in `find . -name cur -type d |sort -r`
do
cd "/home/$1/Maildir/$d/"
pwd
for i in `ls -rt`
do
#echo $i
quota=`repquota -a | grep $1 | awk '{print $3}'`
#echo -n "quota: $quota "
if [ $quota -gt 11000 ] ; then
#echo " -- Voy a borrar $i"
rm $i
else
echo "Terminamos, Quota final: $quota ($1)"
exit 0
fi
done
done
Hay una serie de “echo”s comentados, porque los use para debugear, pero dan mucho ruido, al final solo reporto la quita final para verificar que se hizo lo correcto.
Cabe notar que si no tienes el formato Maildir, simplemente esto no sirve de nada, si usas Mailbox tienes un archivo por carpeta, y hay que hacer todo un show para borrar los mensajes con herramientas especiales, es mucho mejor simplemente usar siempre Maildir :), asi puedes detectar mensajes masivos facilmente (ls -lrS), y es mucho mas facil depurar automaticamente (goodthing ™).