From 5b2f1749acd94e6c49e3824b6afcacbd72101474 Mon Sep 17 00:00:00 2001 From: Matthew Saunders Brown Date: Tue, 27 Apr 2021 14:07:47 -0700 Subject: [PATCH] bin/vmail-domains-mod.sh --- bin/vmail-domains-mod.sh | 164 ++++++++++++++++++++++----------------- 1 file changed, 94 insertions(+), 70 deletions(-) diff --git a/bin/vmail-domains-mod.sh b/bin/vmail-domains-mod.sh index c50ee59..6eba2bb 100755 --- a/bin/vmail-domains-mod.sh +++ b/bin/vmail-domains-mod.sh @@ -10,91 +10,115 @@ source $(dirname $0)/vmail.sh help() { thisfilename=$(basename -- "$0") - echo "$thisfilename" - echo "Get domain data from vmail database." + echo "Modify an existing domain." echo "" - echo "usage: $thisfilename [domain] [OPTIONS]" + echo "usage: $thisfilename domain [OPTIONS]" echo "" - echo " -e Exact match instead of wildcard search." - echo " -c Output in cvs format." echo " -h Print this help." - echo " -s Be more silent - use tabs instead of tables for output, do not display column headers." - echo "" - echo " Domain can either be a FQDN or a search term." - echo " e.g. to search for all .org domains enter .org as the domain." - echo " Use the -e option to disable wildcard search and require exact match of FQDN." + echo " -l LIMIT Mailbox limit - the maximum number of mailboxes under this domain." + echo " -q QUOTA Mailbox Quota Default - default quota for new mailboxes under this domain." + echo " -s STATUS 1 for enabled, 0 for disabled. Default is in db structure and is normally set to 1." exit } -# set & check $domain here +# check for and verify domain +if [ -n "$1" ]; then + if [ $1 == "-h" ]; then + help + else + domain=$1 + shift + if vmail::validate_domain $domain; then + domain_id=`mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -s -r -N -e "SELECT id from vm_domains WHERE vm_domains.domain='$domain';"` + if [ -z $domain_id ] ; then + echo "ERROR: Email domain $domain does not exist." + exit + fi + else + echo "ERROR: $domain is not a valid domain name." + exit + fi + fi +else + help +fi # set any options that were passed -while getopts ":s:l:q:" opt; do +while getopts "hl:q:s:" opt; do case "${opt}" in - s ) - status=${OPTARG} - ;; - l ) - limit=${OPTARG} - ;; - q ) - quota=${OPTARG} - ;; - \? ) - echo "Invalid option: $OPTARG" 1>&2 - ;; - : ) - echo "Invalid option: $OPTARG requires an argument" 1>&2 + h ) + help + exit;; + l ) + limit=${OPTARG} ;; + q ) + quota=${OPTARG} + ;; + s ) + status=${OPTARG} + ;; + \? ) + echo "Invalid option: $OPTARG" 1>&2 + ;; + : ) + echo "Invalid option: $OPTARG requires an argument" 1>&2 + ;; esac done -# check if vmail domain dir exits -if [ -d /var/vmail/$domain ]; then - echo "ERROR: Directory /var/vmail/$domain already exists." - exit 1 +# set update portion of command to empty string +dbset="" + +# check for quota update +if [ -n "$quota" ]; then + # make quota uppercase in case it is set to NULL + quota=`echo $quota | tr [:lower:] [:upper:]` + if [[ "$quota" =~ ^[0-9]+$ ]] || [[ "$quota" == "NULL" ]]; then + dbset=" mbox_quota_default=\"$quota\"" + else + echo "ERROR: quota (-q) must numeric or NULL" + exit 1 + fi fi -# check if domain exists in vmail database -rowcount=`mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -s -r -N -e "SELECT COUNT(*) from vm_domains WHERE domain='$domain';"` -if [ "$rowcount" -eq '0' ] ; then - # looks good, build SQL - 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 - cmd="$cmd, status='$status'" - else - echo "ERROR: status (-s) must be 1 or 0" - exit 1 +# check for limit update +if [ ! -z "$limit" ]; then + # make limit uppercase in case it is set to NULL + limit=`echo $limit | tr [:lower:] [:upper:]` + if [[ "$limit" =~ ^[0-9]+$ ]] || [[ "$limit" == "NULL" ]]; then + if [ ! -z "$dbset" ]; then + dbset="$dbset," fi + dbset="$dbset mbox_limit=\"$limit\"" + else + echo "ERROR: limit (-l) must numeric or NULL" + exit 1 fi - if [ ! -z "$limit" ] ; then - if [[ "$limit" == "NULL" ]]; then - cmd="$cmd, mbox_limit=NULL" - elif [[ "$limit" =~ ^[0-9]+$ ]]; then - cmd="$cmd, mbox_limit='$limit'" - else - echo "ERROR: limit (-l) must numeric or NULL" - exit 1 - fi - fi - if [ ! -z "$quota" ] ; then - if [[ "$quota" == "NULL" ]]; then - cmd="$cmd, mbox_quota_default=NULL" - elif [[ "$quota" =~ ^[0-9]+$ ]]; then - cmd="$cmd, mbox_quota_default='$quota'" - else - echo "ERROR: quota (-q) must numeric or NULL" - exit 1 - fi - fi - cmd="$cmd;" - # add domain to vmail database - echo $cmd -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 + +# check for status update +if [ ! -z "$status" ]; then + if [ "$status" == 0 ] || [ "$status" == 1 ]; then + if [ ! -z "$dbset" ]; then + dbset="$dbset," + fi + dbset="$dbset status=\"$status\"" + else + echo "ERROR: status (-s) must be 1 or 0" + exit + fi +fi + +if [ -n "$dbset" ]; then + + # build query + dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -e 'UPDATE vm_domains SET $dbset WHERE domain.id=\"$domain_id\";'" +# eval $dbcmd + echo $dbcmd + +else + + echo "ERROR: No values passed for update." + fi