#!/bin/bash # # vmail-stack # https://git.stack-source.com/msb/vmail-stack # MIT License Copyright (c) 2021 Matthew Saunders Brown # load config source /usr/local/etc/vmail.conf help() { thisfilename=$(basename -- "$0") echo "$thisfilename" echo "Add domain to vmail system" echo "" echo "usage: $thisfilename domain [OPTIONS]" echo "" echo " -h Print this help." echo " -l LIMIT Maximum number of mailboxes for this domain." echo " -q QUOTA Default mailbox quota in GB." echo " -s STATUS 1 for enabled, 0 for disabled." echo "" echo " Defaults for are all OPTIONS are configured in database." echo " NULL for LIMIT or QUOTA means no limit." exit } # check for and set domain if [ -n "$1" ]; then if [ $1 == "-h" ]; then help elif vmail::validate_domain $1; then domain=$1 shift else echo "ERROR: Invalid domain name: $1" exit 1 fi else help fi # set any options that were passed while getopts "hl:q:s:" opt; do case "${opt}" in h ) help exit;; l ) limit=${OPTARG} ;; q ) quota=${OPTARG} ;; s ) status=${OPTARG} ;; \? ) echo "Invalid option: $OPTARG" 1>&2 exit;; : ) echo "Invalid option: $OPTARG requires an argument" 1>&2 exit;; esac done # 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 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