AlternC/src/update_quota_mail.sh

115 lines
2.9 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
. /usr/lib/alternc/functions.sh
#You can call this script either without arguments, inwich case each maildir quotas will be recalculated
#or you can call it with a directory reffering to a maildir to just sync one mailbox
function showhelp() {
echo "FIXME: some help"
exit
}
# Generate the $maildirs list based on the arguments
while getopts "a:m:d:c:" optname
do
case "$optname" in
"a")
# All mails
# FIXME replace it by a select in da DB
maildirs=`find "$ALTERNC_MAIL/" -maxdepth 2 -mindepth 2 -type d`
;;
"m")
# An email
if [[ "$OPTARG" =~ ^[^\@]*@[^\@]*$ ]] ; then
if [[ "$(mysql_query "select userdb_home from dovecot_view where user = '$OPTARG'")" ]]; then
maildirs=$(mysql_query "select userdb_home from dovecot_view where user = '$OPTARG'")
else
echo "Bad mail provided"
showhelp
fi
else
echo "Bad mail provided"
showhelp
fi
;;
"d")
# Expecting a domain
# Check if domain is well-formed
if [[ ! "$OPTARG" =~ ^[a-z\-]+(\.[a-z\-]+)+$ ]] ; then
echo "Bad domain provided"
showhelp
fi
# Attemp to get from database.
if [[ ! "$(mysql_query "select domaine from domaines where domaine = '$OPTARG'")" ]]; then
# Seem to be empty
echo "Bad domain provided"
showhelp
fi
maildirs=$(mysql_query "select userdb_home from dovecot_view where user like '%@$OPTARG'")
;;
"c")
# An account
if [[ "$OPTARG" =~ ^[a-z]*$ ]] ; then
if [[ "$(mysql_query "select domaine from domaines where domaine = '$1'")" ]]; then
maildirs=$(mysql_query "select userdb_home from dovecot_view where userdb_uid = $OPTARG")
else
echo "Bad account provided"
showhelp
fi
else
echo "Bad account provided"
showhelp
fi
;;
"?")
echo "Unknown option $OPTARG - stop processing"
showhelp
exit
;;
":")
echo "No argument value for option $OPTARG - stop processing"
showhelp
exit
;;
*)
# Should not occur
echo "Unknown error while processing options"
showhelp
exit
;;
esac
done
# Now we have $maildirs, we can work on it
# FIXME add check if maildir is empty
#Then we loop through every maildir to get the maildir size
for i in $maildirs ; do
if [ ! -d "$i" ];then
echo "The maildir $i does not exists. It's quota won't be resync"
continue
fi
# We grep only mails, not the others files
mails=`find $i -type f | egrep "(^$i)*[0-9]+\.M"`
# This part count the total mailbox size (mails + sieve scripts + ...)
size=`du -b -s $i|awk '{print $1}'`
mail_count=`echo $mails|wc -w`
echo "folder : "$i
echo "mail count : "$mail_count
echo "dir size : "$size
echo ""
#update the mailbox table accordingly
mysql_query "UPDATE mailbox SET bytes=$size WHERE path='$i' ; "
mysql_query "UPDATE mailbox SET messages=$mail_count WHERE path='$i' ; "
done