#!/bin/bash # # vmail-stack # https://git.stack-source.com/msb/vmail-stack # MIT License Copyright (c) 2021 Matthew Saunders Brown # load include file source $(dirname $0)/vmail.sh help() { thisfilename=$(basename -- "$0") echo "$thisfilename" echo "Add domain to vmail system" echo "" echo "usage: $thisfilename -d [-l ] [-q ] [-r ] [-s ]" echo "" echo " -h Print this help." echo " -d Domain to add to vmail system." echo " -l Maximum number of mailboxes for this domain." echo " -q Default mailbox quota in GB." echo " -r Default mailbox sending rate limit per hour, multiplied by 10 for limit per day." echo " -s 1 for enabled, 0 for disabled." echo "" echo " Defaults for all Options are configured in database." echo " NULL for LIMIT or QUOTA means no limit." exit } vmail:getoptions "$@" # check for domain if [[ -z $domain ]]; then echo "ERROR: domain name is required" exit 1 fi # set initial db query data dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE" dbcmdopts=" -s -r -N -e" dbquery="SELECT * from vm_domains" # check if vmail domain dir exits if [ -d $VMAIL_DIR/$domain ]; then echo "ERROR: Directory $VMAIL_DIR/$domain already exists." exit 1 fi # check if domain exists in vmail database dbquery="SELECT COUNT(*) from vm_domains WHERE domain='$domain';"; rowcount=`$dbcmd $dbcmdopts "$dbquery"` if [ "$rowcount" -eq '0' ] ; then # looks good, build SQL dbquery="INSERT INTO vm_domains SET domain='$domain'"; cmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -e \"INSERT INTO vm_domains SET domain='$domain'\"" if [ ! -z "$status" ] ; then if [ "$status" == 0 ] || [ "$status" == 1 ]; then dbquery="$dbquery, status='$status'" else echo "ERROR: status (-s) must be 1 or 0" exit 1 fi fi if [ ! -z "$limit" ] ; then if [[ "$limit" == "NULL" ]]; then dbquery="$dbquery, mbox_limit=NULL" elif [[ "$limit" =~ ^[0-9]+$ ]]; then dbquery="$dbquery, mbox_limit='$limit'" else echo "ERROR: limit (-l) must numeric or NULL" exit 1 fi fi if [ ! -z "$quota" ] ; then if [[ "$quota" == "NULL" ]]; then dbquery="$dbquery, mbox_quota_default=NULL" elif [[ "$quota" =~ ^[0-9]+$ ]]; then dbquery="$dbquery, mbox_quota_default='$quota'" else echo "ERROR: quota (-q) must numeric or NULL" exit 1 fi fi if [ ! -z "$ratelimit" ] ; then if [[ "$ratelimit" == "NULL" ]]; then dbquery="$dbquery, mbox_ratelimit_default=NULL" elif [[ "$ratelimit" =~ ^[0-9]+$ ]]; then dbquery="$dbquery, mbox_ratelimit_default='$ratelimit'" else echo "ERROR: ratelimit (-r) must numeric or NULL" exit 1 fi fi dbquery="$dbquery;" # add domain to vmail database eval $dbcmd $dbcmdopts "\"$dbquery\"" # create vmail directory for domain if [ ! -d "$VMAIL_DIR" ] ; then install -o vmail -g vmail -m 750 -d $VMAIL_DIR fi if [ ! -d "$VMAIL_DIR/$domain" ] ; then install -o vmail -g vmail -m 750 -d $VMAIL_DIR/$domain fi elif [ "$rowcount" -eq '1' ] ; then echo "ERROR: $domain already exists in vmail database." exit 1 else echo "ERROR: System error querying vmail database" exit 1 fi