#!/bin/sh

. /etc/mailconfig


check_domain()
{
    mail=$1
    domain=`echo $mail | awk -F '@' '{ print $2 }'`

    if [ "$domain" != `hostname` ]; then
       echo "bad domain"
       exit 1
    fi;

}

check_alias()
{
    mail=$1

    while read line; do
        alias=`echo $line | awk -F ':' '{ print $1 }'`
        isvmail=`echo $line | awk -F ':' '{ print $2 }'`
        if [ "$mail" = "$ALIAS_FILE" ] && [ "$isvmail" != " vmail" ]; then
            echo "Address already exist in alias!"
            exit 2;
        fi;
    done < $ALIAS_FILE
}

check_app_mail()
{
    mail=$1
    while read line; do
        if [ "$mail" == "$line" ]; then
            echo "Adress already exist"
            exit 2;
        fi;
    done < $APP_MAIL
}

change_password()
{
    cat $PASSWD_FILE | grep -w -v -e "$1" > /tmp/passwd.tmp
    print "$1":`encrypt "$2"` >> /tmp/passwd.tmp
    mv /tmp/passwd.tmp $PASSWD_FILE
}

add_mailbox()
{
    mailbox="$1"': vmail'
    egrep "$mailbox" "$ALIAS_FILE";
    if [ "$?" -eq "1" ]; then
        print "$mailbox" >> $ALIAS_FILE
    fi

}

delete_mail_account()
{
    mail_account=$1
    cat $PASSWD_FILE | grep -w -v -e "$mail_account" > /tmp/passwd.tmp
    mv /tmp/passwd.tmp $PASSWD_FILE
    cat $ALIAS_FILE | grep -w -v -e "$mail_account" >> /tmp/virtuals.tmp
    mv /tmp/virtuals.tmp $ALIAS_FILE
    # rm -fr repertoir mail.
}

usage(){
    print "This program ask 2 arguments : \n"
    print "For add or change password of mail account :\: "
    print "First is email with domain name of this host second is password \n:"
    print "\t$0 email-adresse 'password'\n"
    print "Example:\n\t $0 test@`hostname` 'yourverysecurepassword' "

    print "For delete a mail account:\n"
    print "$0 del test@`hostname`"

    print "This script require root privilèges"
}

if [ `id -u` -ne 0 ]; then
    usage
    exit 4;
fi

if [ -z "$1" ]; then
    usage
    exit 3;
fi

if [ -z "$2" ]; then
    usage
    exit 3;
fi



case $1 in
    "del")
        check_domain "$2"
        delete_mail_account "$2"
	smtpctl update table passwd
        smtpctl update table virtuals
	;;
    *)
        check_domain "$1"
        check_alias "$1"
        check_app_mail "$1"
        add_mailbox "$1"
        change_password "$1" "$2"
	smtpctl update table passwd
        smtpctl update table virtuals
	;;
esac