#!/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 "Modify an existing email." echo "" echo "usage: $thisfilename -e [OPTIONS]" echo "" echo " -h Print this help." echo " -e Email account to modify." echo " -p Set new password." echo " -q Set mailbox quota in GB, otherwise default for this domain is used. NULL means no limit." echo " -s <0|1> 1 for enabled, 0 for disabled. Default is in db structure and is normally set to 1." exit } vmail:getoptions "$@" # check for email if [[ -z $email ]]; then echo "email is required" exit fi # get mbox id (and thus check if email account already exists) mbox_id=`mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -s -r -N -e "SELECT vm_mboxes.id from vm_mboxes, vm_domains WHERE vm_domains.domain='$domain' AND vm_mboxes.mbox='$mbox' AND vm_domains.id=vm_mboxes.domain_id;"` if [ -z $mbox_id ] ; then echo "ERROR: Email address $email does not exist." exit fi # 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=" quota=\"$quota\"" else echo "ERROR: quota (-q) must numeric or NULL" exit 1 fi fi # check for password update if [ ! -z "$password" ]; then passwd=`doveadm -o stats_writer_socket_path= pw -s sha512-crypt -p "$passwd"|sed 's|^{SHA512-CRYPT}||'` if [ ! -z "$dbset" ]; then dbset="$dbset," fi dbset=" $dbset passwd=\"$passwd\"" fi # check for status update if [ ! -z "$status" ]; then if [ ! -z "$dbset" ]; then dbset="$dbset," fi dbset="$dbset status=\"$status\"" fi if [ -n "$dbset" ]; then # build query dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -e 'UPDATE vm_mboxes SET $dbset WHERE mbox.id=\"$mbox_id\";'" # eval $dbcmd echo $dbcmd else echo "ERROR: No values passed for update." fi