Qque suggestion sur update_quota_mail

This commit is contained in:
Alan Garcia 2014-05-23 15:59:40 +00:00
parent a65afb62c3
commit 42b8988022
1 changed files with 52 additions and 34 deletions

View File

@ -4,93 +4,111 @@
#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
#gerer les options : tout , 1boite , un domaine, un compte
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")
if [[ "$OPTARG" =~ ^[a-z\-]+(\.[a-z\-]+)+$ ]] ; then
if [[ "$(mysql_query "select domaine from domaines where domaine = '$OPTARG'")" ]]; then
maildirs=$(mysql_query "select userdb_home from dovecot_view where user like '%@$OPTARG'")
else
echo "Bad domain provided"
fi
else
echo "Bad domain provided 2"
# 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
user=`ls -l $i| tail -n 1|cut -d' ' -f 3`
# We grep only mails, not the others files
mails=`find $i -type f | egrep "(^$i)*[0-9]+\.M"`
# This part only count mails size
#size=0
#for j in $mails
#do
# size=$(( $size + `du -b $j|awk '{print $1}'`))
#done
# 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' "
else
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