2021-04-26 16:56:40 -07:00
#!/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 ""
2021-10-15 15:17:29 -07:00
echo " usage: $thisfilename -e <email> [OPTIONS] "
2021-04-26 16:56:40 -07:00
echo ""
2021-12-30 16:50:23 -08:00
echo " -h Print this help."
echo " -e <email> Email account to modify."
echo " -p <password> Set new password."
echo " -q <quota> Set mailbox quota in GB, otherwise default for this domain is used. NULL means no limit."
echo " -r <ratelimit> Hourly rate limit for sending, multiplied by 10 for the daily limit."
2022-06-30 08:24:35 -07:00
echo " -s <0|1|2> Status. 0 = disabled, 1 = enabled, 2 = enabled with admin privileges. Default is 1."
2021-12-30 16:50:23 -08:00
echo " -j <0|1|2> Filter Junk/Spam message. 0 = no filtering. 1 = filter Junk only. 2 = filter Junk & Spam. Default is 2."
2021-04-26 16:56:40 -07:00
exit
}
2021-10-15 15:17:29 -07:00
vmail:getoptions " $@ "
2021-04-26 16:56:40 -07:00
2021-10-15 15:17:29 -07:00
# check for email
if [ [ -z $email ] ] ; then
echo "email is required"
exit
fi
2021-04-26 16:56:40 -07:00
# 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
2021-10-15 16:01:53 -07:00
dbset = " quota= $quota "
2021-04-26 16:56:40 -07:00
else
echo "ERROR: quota (-q) must numeric or NULL"
exit 1
fi
fi
2021-12-30 16:50:23 -08:00
# check for ratelimit update
if [ -n " $ratelimit " ] ; then
# make ratelimit uppercase in case it is set to NULL
ratelimit = ` echo $ratelimit | tr [ :lower:] [ :upper:] `
if [ [ " $ratelimit " = ~ ^[ 0-9] +$ ] ] || [ [ " $ratelimit " = = "NULL" ] ] ; then
dbset = " ratelimit= $ratelimit "
else
echo "ERROR: ratelimit (-r) must numeric or NULL"
exit 1
fi
fi
2021-04-26 16:56:40 -07:00
# check for password update
2021-10-15 15:17:29 -07:00
if [ ! -z " $password " ] ; then
2021-11-20 15:05:12 -08:00
passwd = ` doveadm -o stats_writer_socket_path = pw -s sha512-crypt -p " $password " `
2021-04-26 16:56:40 -07:00
if [ ! -z " $dbset " ] ; then
dbset = " $dbset , "
fi
dbset = " $dbset passwd=\" $passwd \" "
fi
# check for status update
if [ ! -z " $status " ] ; then
2021-10-15 15:17:29 -07:00
if [ ! -z " $dbset " ] ; then
dbset = " $dbset , "
2021-04-26 16:56:40 -07:00
fi
2021-10-15 15:17:29 -07:00
dbset = " $dbset status=\" $status \" "
2021-04-26 16:56:40 -07:00
fi
2021-11-20 15:20:24 -08:00
# check for junk filter update
if [ ! -z " $filter " ] ; then
if [ ! -z " $dbset " ] ; then
dbset = " $dbset , "
fi
dbset = " $dbset filter=\" $filter \" "
fi
2021-04-26 16:56:40 -07:00
if [ -n " $dbset " ] ; then
# build query
2021-10-15 16:01:53 -07:00
dbcmd = " mysql --defaults-extra-file= $MYSQL_CONNECTION_INFO_FILE -e 'UPDATE vm_mboxes SET $dbset WHERE id=\" $mbox_id \";' "
eval $dbcmd
2021-04-26 16:56:40 -07:00
else
echo "ERROR: No values passed for update."
fi