alter vmail db schema
This commit is contained in:
parent
68311ad97b
commit
d064fcba84
47
altervmail.sql
Normal file
47
altervmail.sql
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
-- add & populate new columns
|
||||||
|
ALTER TABLE vm_mboxes ADD domain VARCHAR(255) NOT NULL AFTER mbox;
|
||||||
|
UPDATE vm_mboxes SET vm_mboxes.domain = ( SELECT vm_domains.domain FROM vm_domains WHERE vm_domains.id = vm_mboxes.domain_id );
|
||||||
|
ALTER TABLE vm_aliases ADD mbox VARCHAR(128) NOT NULL AFTER mbox_id;
|
||||||
|
ALTER TABLE vm_aliases ADD domain VARCHAR(255) NOT NULL AFTER mbox;
|
||||||
|
UPDATE vm_aliases SET vm_aliases.mbox = ( SELECT vm_mboxes.mbox FROM vm_mboxes WHERE vm_mboxes.id = vm_aliases.mbox_id );
|
||||||
|
UPDATE vm_aliases SET vm_aliases.domain = ( SELECT vm_domains.domain FROM vm_domains, vm_mboxes WHERE vm_mboxes.id = vm_aliases.mbox_id AND vm_domains.id = vm_mboxes.domain_id );
|
||||||
|
ALTER TABLE vm_autoresponders ADD mbox VARCHAR(128) NOT NULL AFTER mbox_id;
|
||||||
|
ALTER TABLE vm_autoresponders ADD domain VARCHAR(255) NOT NULL AFTER mbox;
|
||||||
|
UPDATE vm_autoresponders SET vm_autoresponders.mbox = ( SELECT vm_mboxes.mbox FROM vm_mboxes WHERE vm_mboxes.id = vm_autoresponders.mbox_id );
|
||||||
|
UPDATE vm_autoresponders SET vm_autoresponders.domain = ( SELECT vm_domains.domain FROM vm_domains, vm_mboxes WHERE vm_mboxes.id = vm_autoresponders.mbox_id AND vm_domains.id = vm_mboxes.domain_id );
|
||||||
|
ALTER TABLE vm_filters ADD mbox VARCHAR(128) NOT NULL AFTER mbox_id;
|
||||||
|
ALTER TABLE vm_filters ADD domain VARCHAR(255) NOT NULL AFTER mbox;
|
||||||
|
UPDATE vm_filters SET vm_filters.mbox = ( SELECT vm_mboxes.mbox FROM vm_mboxes WHERE vm_mboxes.id = vm_filters.mbox_id );
|
||||||
|
UPDATE vm_filters SET vm_filters.domain = ( SELECT vm_domains.domain FROM vm_domains, vm_mboxes WHERE vm_mboxes.id = vm_filters.mbox_id AND vm_domains.id = vm_mboxes.domain_id );
|
||||||
|
ALTER TABLE vm_forwards ADD mbox VARCHAR(128) NOT NULL AFTER mbox_id;
|
||||||
|
ALTER TABLE vm_forwards ADD domain VARCHAR(255) NOT NULL AFTER mbox;
|
||||||
|
UPDATE vm_forwards SET vm_forwards.mbox = ( SELECT vm_mboxes.mbox FROM vm_mboxes WHERE vm_mboxes.id = vm_forwards.mbox_id );
|
||||||
|
UPDATE vm_forwards SET vm_forwards.domain = ( SELECT vm_domains.domain FROM vm_domains, vm_mboxes WHERE vm_mboxes.id = vm_forwards.mbox_id AND vm_domains.id = vm_mboxes.domain_id );
|
||||||
|
|
||||||
|
-- drop foreign keys
|
||||||
|
ALTER TABLE vm_mboxes DROP FOREIGN KEY domain_delete_mboxes;
|
||||||
|
ALTER TABLE vm_aliases DROP FOREIGN KEY mbox_delete_aliases;
|
||||||
|
ALTER TABLE vm_autoresponders DROP FOREIGN KEY mbox_delete_autoresponders;
|
||||||
|
ALTER TABLE vm_filters DROP FOREIGN KEY mbox_delete_filters;
|
||||||
|
ALTER TABLE vm_forwards DROP FOREIGN KEY mbox_delete_forwards;
|
||||||
|
-- update indexes
|
||||||
|
ALTER TABLE vm_domains DROP INDEX domain, ADD UNIQUE domain (domain) USING BTREE;
|
||||||
|
ALTER TABLE vm_mboxes DROP INDEX email, ADD UNIQUE email (mbox, domain) USING BTREE;
|
||||||
|
ALTER TABLE vm_aliases ADD INDEX email (mbox, domain) USING BTREE;
|
||||||
|
ALTER TABLE vm_aliases ADD UNIQUE alias (mbox, domain, alias) USING BTREE;
|
||||||
|
ALTER TABLE vm_autoresponders ADD UNIQUE email (mbox, domain) USING BTREE;
|
||||||
|
ALTER TABLE vm_filters ADD UNIQUE email (mbox, domain) USING BTREE;
|
||||||
|
ALTER TABLE vm_forwards ADD UNIQUE email (mbox, domain) USING BTREE;
|
||||||
|
-- add new foreign keys
|
||||||
|
ALTER TABLE vm_mboxes ADD CONSTRAINT domain_delete_mboxes FOREIGN KEY (domain) REFERENCES vm_domains(domain) ON DELETE CASCADE ON UPDATE NO ACTION;
|
||||||
|
ALTER TABLE vm_aliases ADD CONSTRAINT mbox_delete_aliases FOREIGN KEY (mbox, domain) REFERENCES vm_mboxes(mbox, domain) ON DELETE CASCADE ON UPDATE NO ACTION;
|
||||||
|
ALTER TABLE vm_autoresponders ADD CONSTRAINT mbox_delete_autoresponders FOREIGN KEY (mbox, domain) REFERENCES vm_mboxes(mbox, domain) ON DELETE CASCADE ON UPDATE NO ACTION;
|
||||||
|
ALTER TABLE vm_filters ADD CONSTRAINT mbox_delete_filters FOREIGN KEY (mbox, domain) REFERENCES vm_mboxes(mbox, domain) ON DELETE CASCADE ON UPDATE NO ACTION;
|
||||||
|
ALTER TABLE vm_forwards ADD CONSTRAINT mbox_delete_forwards FOREIGN KEY (mbox, domain) REFERENCES vm_mboxes(mbox, domain) ON DELETE CASCADE ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- delete deprecated table columns & indexes
|
||||||
|
ALTER TABLE vm_mboxes DROP domain_id;
|
||||||
|
ALTER TABLE vm_aliases DROP mbox_id;
|
||||||
|
ALTER TABLE vm_autoresponders DROP mbox_id;
|
||||||
|
ALTER TABLE vm_filters DROP mbox_id;
|
||||||
|
ALTER TABLE vm_forwards DROP mbox_id;
|
|
@ -48,21 +48,21 @@ if [ -z $domain_id ] ; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# get mbox id, which also verfies that email address exists
|
# get mbox id which verfies that email address exists
|
||||||
mbox_id=`mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -s -r -N -e "SELECT id FROM vm_mboxes WHERE domain_id='$domain_id' AND mbox='$mbox';"`
|
mbox_id=`mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -s -r -N -e "SELECT id FROM vm_mboxes WHERE mbox='$mbox' AND domain='$domain';"`
|
||||||
if [[ -z $mbox_id ]]; then
|
if [[ -z $mbox_id ]]; then
|
||||||
# mbox does not exist, can't create alias
|
# mbox does not exist, can't create alias
|
||||||
echo "ERROR: Address to Alias To ($email) does not exist."
|
echo "ERROR: Address to Alias To ($email) does not exist."
|
||||||
exit 1
|
exit 1
|
||||||
elif [[ $mbox_id -gt 0 ]]; then
|
elif [[ $mbox_id -gt 0 ]]; then
|
||||||
# verified mbox, check for existing alias
|
# verified mbox, check for existing alias
|
||||||
existing_alias=`mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -s -r -N -e "SELECT vm_aliases.id FROM vm_aliases WHERE vm_aliases.alias='$alias' AND vm_aliases.mbox_id='$mbox_id';"`
|
existing_alias=`mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -s -r -N -e "SELECT vm_aliases.id FROM vm_aliases WHERE vm_aliases.alias='$alias' AND mbox='$mbox' AND domain='$domain';"`
|
||||||
if [[ -z $existing_alias ]]; then
|
if [[ -z $existing_alias ]]; then
|
||||||
# existing alias does not exist, make sure mbox with alias name does not exist
|
# existing alias does not exist, make sure mbox with alias name does not exist
|
||||||
alias_mbox_id=`mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -s -r -N -e "SELECT id FROM vm_mboxes WHERE domain_id='$domain_id' AND mbox='$alias';"`
|
alias_mbox_id=`mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -s -r -N -e "SELECT id FROM vm_mboxes WHERE mbox='$alias' AND domain='$domain';"`
|
||||||
if [[ -z $alias_mbox_id ]]; then
|
if [[ -z $alias_mbox_id ]]; then
|
||||||
# mailbox does not exist, add alias
|
# mailbox does not exist, add alias
|
||||||
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -e 'INSERT INTO vm_aliases SET vm_aliases.alias=\"$alias\", vm_aliases.mbox_id=\"$mbox_id\";'"
|
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -e 'INSERT INTO vm_aliases SET mbox=\"$mbox\", domain=\"$domain\", alias=\"$alias\";'"
|
||||||
eval $dbcmd
|
eval $dbcmd
|
||||||
else
|
else
|
||||||
echo "ERROR: Email account $alias@$domain exists, can't create alias with the same name."
|
echo "ERROR: Email account $alias@$domain exists, can't create alias with the same name."
|
||||||
|
|
|
@ -42,14 +42,13 @@ dbcmdopts="-s -r -N -e"
|
||||||
# if email set delete single alias
|
# if email set delete single alias
|
||||||
if [[ -n $email ]]; then
|
if [[ -n $email ]]; then
|
||||||
# get aliases id which also works to confirm alias exists
|
# get aliases id which also works to confirm alias exists
|
||||||
dbquery="SELECT vm_aliases.id FROM vm_aliases, vm_mboxes, vm_domains WHERE vm_aliases.alias='$alias' AND vm_aliases.mbox_id=vm_mboxes.id AND vm_mboxes.mbox='$mbox' AND vm_mboxes.domain_id=vm_domains.id AND vm_domains.domain='$domain'"
|
dbquery="SELECT id FROM vm_aliases WHERE alias='$alias' AND mbox='$mbox' AND domain='$domain'"
|
||||||
vm_aliases_id=`$dbcmd $dbcmdopts "$dbquery"`
|
aliases_id=`$dbcmd $dbcmdopts "$dbquery"`
|
||||||
if [[ -z $vm_aliases_id ]]; then
|
if [[ -z $aliases_id ]]; then
|
||||||
echo "ERROR: Alias $alias@$domain -> $email does not exist."
|
echo "ERROR: Alias $alias@$domain -> $email does not exist."
|
||||||
exit 1
|
exit 1
|
||||||
elif [ "$vm_aliases_id" -gt '0' ]; then
|
elif [ "$aliases_id" -gt '0' ]; then
|
||||||
dbquery="DELETE FROM vm_aliases WHERE vm_aliases.id='$vm_aliases_id'"
|
dbquery="DELETE FROM vm_aliases WHERE id='$aliases_id'"
|
||||||
echo $dbquery
|
|
||||||
eval $dbcmd $dbcmdopts "\"$dbquery\""
|
eval $dbcmd $dbcmdopts "\"$dbquery\""
|
||||||
echo "SUCCESS: Alias $alias@$domain -> $email removed from system."
|
echo "SUCCESS: Alias $alias@$domain -> $email removed from system."
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -60,14 +59,14 @@ if [[ -n $email ]]; then
|
||||||
# if domain set then delete any and all aliases
|
# if domain set then delete any and all aliases
|
||||||
elif [[ -n $domain ]]; then
|
elif [[ -n $domain ]]; then
|
||||||
# get alias id array
|
# get alias id array
|
||||||
dbquery="SELECT vm_aliases.id FROM vm_aliases, vm_mboxes, vm_domains WHERE vm_aliases.alias='$alias' AND vm_aliases.mbox_id=vm_mboxes.id AND vm_mboxes.domain_id=vm_domains.id AND vm_domains.domain='$domain'"
|
dbquery="SELECT id FROM vm_aliases WHERE alias='$alias' AND domain='$domain'"
|
||||||
mapfile -t vm_alias_ids < <( $dbcmd $dbcmdopts "$dbquery" )
|
mapfile -t aliases_ids < <( $dbcmd $dbcmdopts "$dbquery" )
|
||||||
if [[ -z $vm_alias_ids ]]; then
|
if [[ -z $aliases_ids ]]; then
|
||||||
echo "ERROR: Alias $alias@$domain does not exist."
|
echo "ERROR: Alias $alias@$domain does not exist."
|
||||||
exit 1
|
exit 1
|
||||||
elif [[ ${#vm_alias_ids[@]} -gt '0' ]]; then
|
elif [[ ${#aliases_ids[@]} -gt '0' ]]; then
|
||||||
for vm_alias_id in "${vm_alias_ids[@]}"; do
|
for aliases_id in "${aliases_ids[@]}"; do
|
||||||
dbquery="DELETE FROM vm_aliases WHERE vm_aliases.id='$vm_alias_id'"
|
dbquery="DELETE FROM vm_aliases WHERE id='$aliases_id'"
|
||||||
eval $dbcmd $dbcmdopts "\"$dbquery\""
|
eval $dbcmd $dbcmdopts "\"$dbquery\""
|
||||||
done
|
done
|
||||||
echo "SUCCESS: Alias(s) for $alias@$domain removed from system."
|
echo "SUCCESS: Alias(s) for $alias@$domain removed from system."
|
||||||
|
|
|
@ -35,7 +35,7 @@ vmail:getoptions "$@"
|
||||||
# set initial db query data
|
# set initial db query data
|
||||||
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
||||||
dbcmdopts="-e"
|
dbcmdopts="-e"
|
||||||
dbquery="SELECT vm_aliases.alias, vm_mboxes.mbox, vm_domains.domain FROM vm_aliases, vm_mboxes, vm_domains WHERE vm_aliases.mbox_id = vm_mboxes.id AND vm_mboxes.domain_id = vm_domains.id"
|
dbquery="SELECT alias, mbox, domain FROM vm_aliases"
|
||||||
|
|
||||||
if [[ -n $tab ]]; then
|
if [[ -n $tab ]]; then
|
||||||
dbcmdopts="-s -N $dbcmdopts"
|
dbcmdopts="-s -N $dbcmdopts"
|
||||||
|
@ -43,22 +43,22 @@ fi
|
||||||
|
|
||||||
if [[ -n $alias ]]; then
|
if [[ -n $alias ]]; then
|
||||||
if [[ -n $domain ]] ; then
|
if [[ -n $domain ]] ; then
|
||||||
dbquery="$dbquery AND vm_aliases.alias='$alias' AND vm_domains.domain='$domain'"
|
dbquery="$dbquery WHERE alias='$alias' AND domain='$domain'"
|
||||||
else
|
else
|
||||||
echo "ERROR: alias should be in full email address format."
|
echo "ERROR: alias should be in full email address format."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
elif [[ -n $email ]]; then
|
elif [[ -n $email ]]; then
|
||||||
dbquery="$dbquery AND vm_mboxes.mbox='$mbox' AND vm_domains.domain='$domain'"
|
dbquery="$dbquery WHERE mbox='$mbox' AND domain='$domain'"
|
||||||
elif [[ -n $domain ]]; then
|
elif [[ -n $domain ]]; then
|
||||||
dbquery="$dbquery AND vm_domains.domain='$domain'"
|
dbquery="$dbquery WHERE domain='$domain'"
|
||||||
else
|
else
|
||||||
echo "You must specify either <alias> or <email> or <domain>."
|
echo "You must specify either <alias> or <email> or <domain>."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# set order by
|
# set order by
|
||||||
dbquery="$dbquery ORDER BY vm_domains.domain, vm_mboxes.mbox, vm_aliases.alias;";
|
dbquery="$dbquery ORDER BY domain, mbox, alias;";
|
||||||
|
|
||||||
# execute mysql query
|
# execute mysql query
|
||||||
eval $dbcmd $dbcmdopts "\"$dbquery\"" $cvs
|
eval $dbcmd $dbcmdopts "\"$dbquery\"" $cvs
|
||||||
|
|
|
@ -54,21 +54,21 @@ fi
|
||||||
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
||||||
dbcmdopts="-s -r -N -e"
|
dbcmdopts="-s -r -N -e"
|
||||||
|
|
||||||
# get mbox id, which also verfies that email address exists
|
# get mbox id, which verfies that email address exists
|
||||||
dbquery="SELECT vm_mboxes.id FROM vm_mboxes, vm_domains WHERE vm_mboxes.mbox='$mbox' AND vm_mboxes.domain_id=vm_domains.id AND vm_domains.domain='$domain';"
|
dbquery="SELECT id FROM vm_mboxes WHERE mbox='$mbox' AND domain='$domain';"
|
||||||
mbox_id=`eval $dbcmd $dbcmdopts \"$dbquery\"`
|
mbox_id=`eval $dbcmd $dbcmdopts \"$dbquery\"`
|
||||||
|
|
||||||
if [ -z $mbox_id ]; then
|
if [[ -z $mbox_id ]]; then
|
||||||
# mailbox does not exist
|
# mailbox does not exist
|
||||||
echo "ERROR: Email account $email does not exist."
|
echo "ERROR: Email account $email does not exist."
|
||||||
exit 1
|
exit 1
|
||||||
elif [ "$mbox_id" -gt '0' ]; then
|
elif [ "$mbox_id" -gt '0' ]; then
|
||||||
# verified mbox, check for existing forward
|
# verified mbox, check for existing autoresponder
|
||||||
dbquery="SELECT id FROM vm_autoresponders WHERE mbox_id='$mbox_id';"
|
dbquery="SELECT id FROM vm_autoresponders WHERE mbox='$mbox' AND domain='$domain';"
|
||||||
vm_autoresponders_id=`eval $dbcmd $dbcmdopts \"$dbquery\"`
|
autoresponder_id=`eval $dbcmd $dbcmdopts \"$dbquery\"`
|
||||||
if [ -z $vm_autoresponders_id ]; then
|
if [[ -z $autoresponder_id ]]; then
|
||||||
# no autoresponder, add new one now
|
# no autoresponder, add new one now
|
||||||
dbquery="INSERT INTO vm_autoresponders SET mbox_id='$mbox_id', subject='$subject', body='$body'"
|
dbquery="INSERT INTO vm_autoresponders SET mbox='$mbox', domain='$domain', subject='$subject', body='$body'"
|
||||||
if [ ! -z $mode ]; then
|
if [ ! -z $mode ]; then
|
||||||
dbquery="$dbquery, mode='$mode'"
|
dbquery="$dbquery, mode='$mode'"
|
||||||
fi
|
fi
|
||||||
|
@ -76,9 +76,13 @@ elif [ "$mbox_id" -gt '0' ]; then
|
||||||
dbquery="$dbquery, status='$status'"
|
dbquery="$dbquery, status='$status'"
|
||||||
fi
|
fi
|
||||||
eval $dbcmd $dbcmdopts \"$dbquery\;\"
|
eval $dbcmd $dbcmdopts \"$dbquery\;\"
|
||||||
else
|
elif [ "$autoresponder_id" -gt '0' ]; then
|
||||||
echo "ERROR: Autoresponder for $email already exists, edit or delete and re-create instead."
|
echo "ERROR: Autoresponder for $email already exists, edit or delete and re-create instead."
|
||||||
exit 1
|
exit 1
|
||||||
|
else
|
||||||
|
# db query error
|
||||||
|
echo "ERROR: System error querying database."
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# db query error
|
# db query error
|
||||||
|
|
|
@ -34,7 +34,7 @@ dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
||||||
dbcmdopts="-s -r -N -e"
|
dbcmdopts="-s -r -N -e"
|
||||||
|
|
||||||
# get autoresponders id which also works to confirm autoresponder exists
|
# get autoresponders id which also works to confirm autoresponder exists
|
||||||
dbquery="SELECT vm_autoresponders.id FROM vm_autoresponders, vm_mboxes, vm_domains WHERE vm_autoresponders.mbox_id=vm_mboxes.id AND vm_mboxes.mbox='$mbox' AND vm_mboxes.domain_id=vm_domains.id AND vm_domains.domain='$domain';"
|
dbquery="SELECT id FROM vm_autoresponders WHERE mbox='$mbox' AND domain='$domain';"
|
||||||
vm_autoresponders_id=`$dbcmd $dbcmdopts "$dbquery"`
|
vm_autoresponders_id=`$dbcmd $dbcmdopts "$dbquery"`
|
||||||
|
|
||||||
if [ -z "$vm_autoresponders_id" ]; then
|
if [ -z "$vm_autoresponders_id" ]; then
|
||||||
|
|
|
@ -23,21 +23,13 @@ help()
|
||||||
echo " -t Use tabs instead of tables for output, do not display column headers."
|
echo " -t Use tabs instead of tables for output, do not display column headers."
|
||||||
echo ""
|
echo ""
|
||||||
echo " Search term is optional. If nothing specified all forwards for all email acccounts for all domains will be returned."
|
echo " Search term is optional. If nothing specified all forwards for all email acccounts for all domains will be returned."
|
||||||
echo " Enter email address to get forward info for that email address."
|
echo " Enter email address to get autoresponder info for that email address."
|
||||||
echo " Enter forwarding address (in full email address format) with the -f option to get address(es) that forward to specified address."
|
echo " Enter domain name to get all autoresponders for all email addresses under that domain."
|
||||||
echo " Enter domain name to get all forwards for all email addresses under that domain."
|
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
vmail:getoptions "$@"
|
vmail:getoptions "$@"
|
||||||
|
|
||||||
# check for domain (which will aslo be set if email is specified)
|
|
||||||
if [[ -z $domain ]]; then
|
|
||||||
echo "Domian Name or Email is required."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# set initial db query data
|
# set initial db query data
|
||||||
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
||||||
dbcmdopts="-e"
|
dbcmdopts="-e"
|
||||||
|
@ -46,13 +38,19 @@ if [[ -n $tab ]]; then
|
||||||
dbcmdopts="-s -N $dbcmdopts"
|
dbcmdopts="-s -N $dbcmdopts"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dbquery="SELECT vm_mboxes.mbox, vm_domains.domain, QUOTE(vm_autoresponders.subject) AS subject, QUOTE(REPLACE(REPLACE(vm_autoresponders.body,'\r\n','\n'),'\n','\\n')) AS body, vm_autoresponders.mode, vm_autoresponders.status FROM vm_autoresponders, vm_mboxes, vm_domains WHERE vm_autoresponders.mbox_id = vm_mboxes.id AND vm_mboxes.domain_id = vm_domains.id AND vm_domains.domain='$domain'"
|
|
||||||
|
|
||||||
# build query
|
# build query
|
||||||
|
dbquery="SELECT mbox, domain, QUOTE(subject) AS subject, QUOTE(REPLACE(REPLACE(body,'\r\n','\n'),'\n','\\n')) AS body, mode, status FROM vm_autoresponders"
|
||||||
|
|
||||||
|
# set search options
|
||||||
if [[ -n $email ]]; then
|
if [[ -n $email ]]; then
|
||||||
# search for specific autoresponder
|
# search for specific autoresponder
|
||||||
dbquery="$dbquery AND vm_mboxes.mbox='$mbox' ORDER BY vm_mboxes.mbox"
|
dbquery="$dbquery WHERE mbox='$mbox' AND domain='$domain'"
|
||||||
|
elif [[ -n $domain ]]; then
|
||||||
|
# get all autoresponders for given domain
|
||||||
|
dbquery="$dbquery WHERE domain='$domain'"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# sort results
|
||||||
|
dbquery="$dbquery ORDER BY domain, mbox"
|
||||||
# execute mysql query
|
# execute mysql query
|
||||||
eval $dbcmd $dbcmdopts "\"$dbquery\"" $cvs
|
eval $dbcmd $dbcmdopts "\"$dbquery\"" $cvs
|
||||||
|
|
|
@ -40,7 +40,7 @@ fi
|
||||||
|
|
||||||
# check for options
|
# check for options
|
||||||
if [[ -z $subject && -z $body && -z $mode && -z $status ]]; then
|
if [[ -z $subject && -z $body && -z $mode && -z $status ]]; then
|
||||||
echo "One or more options to update must be specified"
|
echo "One or more options to update must be specified."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -48,25 +48,17 @@ fi
|
||||||
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
||||||
dbcmdopts="-s -r -N -e"
|
dbcmdopts="-s -r -N -e"
|
||||||
|
|
||||||
# get mbox id, which also verfies that email address exists
|
# get autoresponder id, which also verfies that the autoresponder exists
|
||||||
dbquery="SELECT vm_mboxes.id FROM vm_mboxes, vm_domains WHERE vm_mboxes.mbox='$mbox' AND vm_mboxes.domain_id=vm_domains.id AND vm_domains.domain='$domain';"
|
dbquery="SELECT id FROM vm_autoresponders WHERE mbox='$mbox' AND domain='$domain';"
|
||||||
mbox_id=`eval $dbcmd $dbcmdopts \"$dbquery\"`
|
autoresponder_id=`eval $dbcmd $dbcmdopts \"$dbquery\"`
|
||||||
|
|
||||||
if [ -z $mbox_id ]; then
|
if [[ -z $autoresponder_id ]]; then
|
||||||
# mailbox does not exist
|
# autoresponder does not exist
|
||||||
echo "ERROR: Email account $email does not exist."
|
|
||||||
exit 1
|
|
||||||
elif [ "$mbox_id" -gt '0' ]; then
|
|
||||||
# verified mbox, check for existing forward
|
|
||||||
dbquery="SELECT id FROM vm_autoresponders WHERE mbox_id='$mbox_id';"
|
|
||||||
vm_autoresponders_id=`eval $dbcmd $dbcmdopts \"$dbquery\"`
|
|
||||||
if [ -z $vm_autoresponders_id ]; then
|
|
||||||
# existing autoresponder does not exist, can't modify
|
|
||||||
echo "ERROR: Autoresponder for $email does not exists, can't edit. Add new autoresponder instead."
|
echo "ERROR: Autoresponder for $email does not exists, can't edit. Add new autoresponder instead."
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
# start update by re-setting mbox_id, doesn't change anything, just facilitates following code
|
# build update query (set id is just to facilitate building query)
|
||||||
dbquery="UPDATE vm_autoresponders SET mbox_id='$mbox_id'"
|
dbquery="UPDATE vm_autoresponders SET id='$autoresponder_id'"
|
||||||
if [ ! -z "$subject" ]; then
|
if [ ! -z "$subject" ]; then
|
||||||
dbquery="$dbquery, subject='$subject'"
|
dbquery="$dbquery, subject='$subject'"
|
||||||
fi
|
fi
|
||||||
|
@ -79,11 +71,6 @@ elif [ "$mbox_id" -gt '0' ]; then
|
||||||
if [ ! -z $status ]; then
|
if [ ! -z $status ]; then
|
||||||
dbquery="$dbquery, status='$status'"
|
dbquery="$dbquery, status='$status'"
|
||||||
fi
|
fi
|
||||||
dbquery="$dbquery WHERE vm_autoresponders.id='$vm_autoresponders_id'"
|
dbquery="$dbquery WHERE id='$autoresponder_id'"
|
||||||
eval $dbcmd $dbcmdopts \"$dbquery\;\"
|
eval $dbcmd $dbcmdopts \"$dbquery\;\"
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
# db query error
|
|
||||||
echo "ERROR: System error querying database."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
|
@ -39,7 +39,6 @@ fi
|
||||||
# set initial db query data
|
# set initial db query data
|
||||||
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
||||||
dbcmdopts=" -s -r -N -e"
|
dbcmdopts=" -s -r -N -e"
|
||||||
dbquery="SELECT * from vm_domains"
|
|
||||||
|
|
||||||
# check if vmail domain dir exits
|
# check if vmail domain dir exits
|
||||||
if [ -d $VMAIL_DIR/$domain ]; then
|
if [ -d $VMAIL_DIR/$domain ]; then
|
||||||
|
@ -48,21 +47,20 @@ if [ -d $VMAIL_DIR/$domain ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# check if domain exists in vmail database
|
# check if domain exists in vmail database
|
||||||
dbquery="SELECT COUNT(*) from vm_domains WHERE domain='$domain';";
|
dbquery="SELECT id from vm_domains WHERE domain='$domain';";
|
||||||
rowcount=`$dbcmd $dbcmdopts "$dbquery"`
|
domains_id=`$dbcmd $dbcmdopts "$dbquery"`
|
||||||
if [ "$rowcount" -eq '0' ] ; then
|
if [[ -z $domains_id ]]; then
|
||||||
# looks good, build SQL
|
# looks good, build SQL
|
||||||
dbquery="INSERT INTO vm_domains SET domain='$domain'";
|
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 [ ! -z "$status" ] ; then
|
if [[ "$status" == 0 ]] || [[ "$status" == 1 ]]; then
|
||||||
if [ "$status" == 0 ] || [ "$status" == 1 ]; then
|
|
||||||
dbquery="$dbquery, status='$status'"
|
dbquery="$dbquery, status='$status'"
|
||||||
else
|
else
|
||||||
echo "ERROR: status (-s) must be 1 or 0"
|
echo "ERROR: status (-s) must be 1 or 0"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [ ! -z "$limit" ] ; then
|
if [[ ! -z "$limit" ]] ; then
|
||||||
if [[ "$limit" == "NULL" ]]; then
|
if [[ "$limit" == "NULL" ]]; then
|
||||||
dbquery="$dbquery, mbox_limit=NULL"
|
dbquery="$dbquery, mbox_limit=NULL"
|
||||||
elif [[ "$limit" =~ ^[0-9]+$ ]]; then
|
elif [[ "$limit" =~ ^[0-9]+$ ]]; then
|
||||||
|
@ -72,7 +70,7 @@ if [ "$rowcount" -eq '0' ] ; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [ ! -z "$quota" ] ; then
|
if [[ ! -z "$quota" ]] ; then
|
||||||
if [[ "$quota" == "NULL" ]]; then
|
if [[ "$quota" == "NULL" ]]; then
|
||||||
dbquery="$dbquery, mbox_quota_default=NULL"
|
dbquery="$dbquery, mbox_quota_default=NULL"
|
||||||
elif [[ "$quota" =~ ^[0-9]+$ ]]; then
|
elif [[ "$quota" =~ ^[0-9]+$ ]]; then
|
||||||
|
@ -82,7 +80,7 @@ if [ "$rowcount" -eq '0' ] ; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [ ! -z "$ratelimit" ] ; then
|
if [[ ! -z "$ratelimit" ]] ; then
|
||||||
if [[ "$ratelimit" == "NULL" ]]; then
|
if [[ "$ratelimit" == "NULL" ]]; then
|
||||||
dbquery="$dbquery, mbox_ratelimit_default=NULL"
|
dbquery="$dbquery, mbox_ratelimit_default=NULL"
|
||||||
elif [[ "$ratelimit" =~ ^[0-9]+$ ]]; then
|
elif [[ "$ratelimit" =~ ^[0-9]+$ ]]; then
|
||||||
|
@ -92,17 +90,16 @@ if [ "$rowcount" -eq '0' ] ; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
dbquery="$dbquery;"
|
|
||||||
# add domain to vmail database
|
# add domain to vmail database
|
||||||
eval $dbcmd $dbcmdopts "\"$dbquery\""
|
eval $dbcmd $dbcmdopts "\"$dbquery\""
|
||||||
# create vmail directory for domain
|
# create vmail directory for domain
|
||||||
if [ ! -d "$VMAIL_DIR" ] ; then
|
if [[ ! -d "$VMAIL_DIR" ]] ; then
|
||||||
install -o vmail -g vmail -m 750 -d $VMAIL_DIR
|
install -o vmail -g vmail -m 750 -d $VMAIL_DIR
|
||||||
fi
|
fi
|
||||||
if [ ! -d "$VMAIL_DIR/$domain" ] ; then
|
if [[ ! -d "$VMAIL_DIR/$domain" ]] ; then
|
||||||
install -o vmail -g vmail -m 750 -d $VMAIL_DIR/$domain
|
install -o vmail -g vmail -m 750 -d $VMAIL_DIR/$domain
|
||||||
fi
|
fi
|
||||||
elif [ "$rowcount" -eq '1' ] ; then
|
elif [[ "$domains_id" -gt 0 ]] ; then
|
||||||
echo "ERROR: $domain already exists in vmail database."
|
echo "ERROR: $domain already exists in vmail database."
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
|
|
|
@ -34,10 +34,10 @@ dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
||||||
dbcmdopts="-s -r -N -e"
|
dbcmdopts="-s -r -N -e"
|
||||||
|
|
||||||
# check if domain exists in vmail database
|
# check if domain exists in vmail database
|
||||||
dbquery="SELECT COUNT(*) FROM vm_domains WHERE domain='$domain';"
|
dbquery="SELECT id FROM vm_domains WHERE domain='$domain';"
|
||||||
rowcount=`$dbcmd $dbcmdopts "$dbquery"`
|
domains_id=`$dbcmd $dbcmdopts "$dbquery"`
|
||||||
|
|
||||||
if [ "$rowcount" -eq '1' ] ; then
|
if [[ "$domains_id" -gt '0' ]] ; then
|
||||||
# domain exists, delete from all vmail tables
|
# domain exists, delete from all vmail tables
|
||||||
# single delete should be sufficient for vm_* tables due to ON DELETE CASCADE foreign key references
|
# single delete should be sufficient for vm_* tables due to ON DELETE CASCADE foreign key references
|
||||||
dbquery="DELETE FROM vm_domains WHERE domain='$domain';"
|
dbquery="DELETE FROM vm_domains WHERE domain='$domain';"
|
||||||
|
@ -49,7 +49,7 @@ if [ "$rowcount" -eq '1' ] ; then
|
||||||
# this should be sufficient for rc due to ON DELETE CASCADE foreign key references
|
# this should be sufficient for rc due to ON DELETE CASCADE foreign key references
|
||||||
dbquery="DELETE FROM rc_users WHERE username LIKE '%@$domain';"
|
dbquery="DELETE FROM rc_users WHERE username LIKE '%@$domain';"
|
||||||
eval $dbcmd $dbcmdopts "\"$dbquery\""
|
eval $dbcmd $dbcmdopts "\"$dbquery\""
|
||||||
elif [ "$rowcount" -eq '0' ] ; then
|
elif [[ -z $domains_id ]] ; then
|
||||||
echo "ERROR: $domain does not exist in vmail database."
|
echo "ERROR: $domain does not exist in vmail database."
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
|
|
|
@ -36,13 +36,13 @@ dbcmdopts="-e"
|
||||||
if [[ -n $tab ]]; then
|
if [[ -n $tab ]]; then
|
||||||
dbcmdopts="-s -N $dbcmdopts"
|
dbcmdopts="-s -N $dbcmdopts"
|
||||||
fi
|
fi
|
||||||
dbquery="SELECT domain, status, mbox_limit, (SELECT COUNT(*) FROM vm_mboxes WHERE vm_mboxes.domain_id = vm_domains.id) as mbox_allocated, mbox_quota_default, mbox_ratelimit_default FROM vm_domains"
|
dbquery="SELECT domain, status, mbox_limit, (SELECT COUNT(*) FROM vm_mboxes WHERE vm_mboxes.domain = vm_domains.domain) as mbox_allocated, mbox_quota_default, mbox_ratelimit_default from vm_domains"
|
||||||
|
|
||||||
# build query
|
# build query
|
||||||
if [[ -n $domain ]]; then
|
if [[ -n $domain ]]; then
|
||||||
dbquery="$dbquery WHERE domain='$domain'"
|
dbquery="$dbquery WHERE domain='$domain'"
|
||||||
elif [[ -n $glob ]]; then
|
elif [[ -n $glob ]]; then
|
||||||
dbquery="$dbquery WHERE domain LIKE '%$domain%'"
|
dbquery="$dbquery WHERE domain LIKE '%$glob%'"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# sort results by domain name
|
# sort results by domain name
|
||||||
|
|
|
@ -28,7 +28,7 @@ vmail:getoptions "$@"
|
||||||
|
|
||||||
# check for domain
|
# check for domain
|
||||||
if [[ -n $domain ]]; then
|
if [[ -n $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';"`
|
domain_id=`mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -s -r -N -e "SELECT id from vm_domains WHERE domain='$domain';"`
|
||||||
if [ -z $domain_id ] ; then
|
if [ -z $domain_id ] ; then
|
||||||
echo "ERROR: Email domain $domain does not exist."
|
echo "ERROR: Email domain $domain does not exist."
|
||||||
exit
|
exit
|
||||||
|
|
|
@ -47,22 +47,22 @@ fi
|
||||||
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
||||||
dbcmdopts="-s -r -N -e"
|
dbcmdopts="-s -r -N -e"
|
||||||
|
|
||||||
# get mbox id, which also verfies that email address exists
|
# get mbox id, which verfies that email address exists
|
||||||
dbquery="SELECT vm_mboxes.id FROM vm_mboxes, vm_domains WHERE vm_mboxes.mbox='$mbox' AND vm_mboxes.domain_id=vm_domains.id AND vm_domains.domain='$domain';"
|
dbquery="SELECT id FROM vm_mboxes WHERE mbox='$mbox' AND domain='$domain';"
|
||||||
mbox_id=`eval $dbcmd $dbcmdopts \"$dbquery\"`
|
mbox_id=`eval $dbcmd $dbcmdopts \"$dbquery\"`
|
||||||
|
|
||||||
if [ -z $mbox_id ]; then
|
if [[ -z $mbox_id ]]; then
|
||||||
# mbox does not exist, can't create forward
|
# mbox does not exist, can't create forward
|
||||||
echo "ERROR: Address to Forward ($email) does not exist."
|
echo "ERROR: Address to Forward ($email) does not exist."
|
||||||
exit 1
|
exit 1
|
||||||
elif [ "$mbox_id" -gt '0' ]; then
|
elif [[ $mbox_id -gt '0' ]]; then
|
||||||
# verified mbox, check for existing forward
|
# verified mbox, check for existing forward
|
||||||
dbquery="SELECT id FROM vm_forwards WHERE mbox_id='$mbox_id';"
|
dbquery="SELECT id FROM vm_forwards WHERE mbox='$mbox' AND domain='$domain';"
|
||||||
vm_forwards_id=`eval $dbcmd $dbcmdopts \"$dbquery\"`
|
forwards_id=`eval $dbcmd $dbcmdopts \"$dbquery\"`
|
||||||
if [ -z $vm_forwards_id ]; then
|
if [[ -z $forwards_id ]]; then
|
||||||
# existing forward does not exist, add it now
|
# existing forward does not exist, add it now
|
||||||
dbquery="INSERT INTO vm_forwards SET mbox_id='$mbox_id', forward_to='$forward'"
|
dbquery="INSERT INTO vm_forwards SET mbox='$mbox', domain='$domain', forward_to='$forward'"
|
||||||
if [ ! -z $keep ]; then
|
if [[ ! -z $keep ]]; then
|
||||||
dbquery="$dbquery, save_local='$keep'"
|
dbquery="$dbquery, save_local='$keep'"
|
||||||
fi
|
fi
|
||||||
eval $dbcmd $dbcmdopts \"$dbquery\;\"
|
eval $dbcmd $dbcmdopts \"$dbquery\;\"
|
||||||
|
|
|
@ -33,15 +33,15 @@ fi
|
||||||
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
||||||
dbcmdopts="-s -r -N -e"
|
dbcmdopts="-s -r -N -e"
|
||||||
|
|
||||||
# get aliases id which also works to confirm alias exists
|
# get forward id which also works to confirm alias exists
|
||||||
dbquery="SELECT vm_forwards.id FROM vm_forwards, vm_mboxes, vm_domains WHERE vm_forwards.mbox_id=vm_mboxes.id AND vm_mboxes.mbox='$mbox' AND vm_mboxes.domain_id=vm_domains.id AND vm_domains.domain='$domain';"
|
dbquery="SELECT id FROM vm_forwards WHERE mbox='$mbox' AND domain='$domain';"
|
||||||
vm_forwards_id=`$dbcmd $dbcmdopts "$dbquery"`
|
forwards_id=`$dbcmd $dbcmdopts "$dbquery"`
|
||||||
|
|
||||||
if [ -z "$vm_forwards_id" ]; then
|
if [[ -z $forwards_id ]]; then
|
||||||
echo "ERROR: Forward for $email does not exist."
|
echo "ERROR: Forward for $email does not exist."
|
||||||
exit 1
|
exit 1
|
||||||
elif [ "$vm_forwards_id" -gt '0' ]; then
|
elif [[ $forwards_id -gt '0' ]]; then
|
||||||
dbquery="DELETE FROM vm_forwards WHERE vm_forwards.id='$vm_forwards_id';"
|
dbquery="DELETE FROM vm_forwards WHERE id='$forwards_id';"
|
||||||
eval $dbcmd $dbcmdopts \"$dbquery\"
|
eval $dbcmd $dbcmdopts \"$dbquery\"
|
||||||
echo "SUCCESS: Forward for $email removed from system."
|
echo "SUCCESS: Forward for $email removed from system."
|
||||||
exit 0
|
exit 0
|
||||||
|
|
|
@ -14,7 +14,7 @@ help()
|
||||||
echo "$thisfilename"
|
echo "$thisfilename"
|
||||||
echo "Get email forwards data from vmail database."
|
echo "Get email forwards data from vmail database."
|
||||||
echo ""
|
echo ""
|
||||||
echo "usage: $thisfilename [-e email|-f forward|-f domain] [-c] [-t] [-h]"
|
echo "usage: $thisfilename [-e email|-f forward|-d domain] [-c] [-t] [-h]"
|
||||||
echo ""
|
echo ""
|
||||||
echo " -h Print this help."
|
echo " -h Print this help."
|
||||||
echo " -e <email> Email address to get forwarding for."
|
echo " -e <email> Email address to get forwarding for."
|
||||||
|
@ -35,23 +35,23 @@ vmail:getoptions "$@"
|
||||||
# set initial db query data
|
# set initial db query data
|
||||||
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
||||||
dbcmdopts="-e"
|
dbcmdopts="-e"
|
||||||
dbquery="SELECT vm_mboxes.mbox, vm_domains.domain, vm_forwards.forward_to, vm_forwards.save_local FROM vm_forwards, vm_mboxes, vm_domains WHERE vm_forwards.mbox_id = vm_mboxes.id AND vm_mboxes.domain_id = vm_domains.id"
|
dbquery="SELECT mbox, domain, forward_to, save_local FROM vm_forwards"
|
||||||
# AND vm_forwards.forward_to='$mbox@$domain'"
|
# AND vm_forwards.forward_to='$mbox@$domain'"
|
||||||
# build query
|
# build query
|
||||||
if [[ -n $forward ]]; then
|
if [[ -n $forward ]]; then
|
||||||
# search for specific forward to address
|
# search for specific forward to address
|
||||||
dbquery="$dbquery AND vm_forwards.forward_to='$mbox@$domain'"
|
dbquery="$dbquery WHERE forward_to='$forward'"
|
||||||
elif [[ -n $domain ]]; then
|
elif [[ -n $domain ]]; then
|
||||||
# add specific domain
|
# add specific domain
|
||||||
dbquery="$dbquery AND vm_domains.domain='$domain'"
|
dbquery="$dbquery WHERE domain='$domain'"
|
||||||
if [[ -n "$mbox" ]]; then
|
if [[ -n "$mbox" ]]; then
|
||||||
# search for forward for specific email address
|
# search for forward for specific email address
|
||||||
dbquery="$dbquery AND vm_mboxes.mbox='$mbox'"
|
dbquery="$dbquery AND mbox='$mbox'"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# set order by
|
# set order by
|
||||||
dbquery="$dbquery ORDER BY vm_domains.domain, vm_mboxes.mbox, vm_forwards.forward_to;";
|
dbquery="$dbquery ORDER BY domain, mbox, forward_to;";
|
||||||
|
|
||||||
# execute mysql query
|
# execute mysql query
|
||||||
eval $dbcmd $dbcmdopts "\"$dbquery\"" $cvs
|
eval $dbcmd $dbcmdopts "\"$dbquery\"" $cvs
|
||||||
|
|
|
@ -37,40 +37,40 @@ if [[ -z $email ]]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# check for forward
|
|
||||||
if [[ -z $forward ]]; then
|
|
||||||
echo "forward is required"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# build query
|
# build query
|
||||||
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
||||||
dbcmdopts="-s -r -N -e"
|
dbcmdopts="-s -r -N -e"
|
||||||
|
|
||||||
# get mbox id, which also verfies that email address exists
|
# get forward id, which also verfies that forward already exists
|
||||||
dbquery="SELECT vm_mboxes.id FROM vm_mboxes, vm_domains WHERE vm_mboxes.mbox='$mbox' AND vm_mboxes.domain_id=vm_domains.id AND vm_domains.domain='$domain';"
|
dbquery="SELECT id FROM vm_forwards WHERE mbox='$mbox' AND domain='$domain';"
|
||||||
mbox_id=`eval $dbcmd $dbcmdopts \"$dbquery\"`
|
fowards_id=`eval $dbcmd $dbcmdopts \"$dbquery\"`
|
||||||
|
|
||||||
if [ -z $mbox_id ]; then
|
if [[ -z $fowards_id ]]; then
|
||||||
# mbox does not exist, can't create forward
|
# forward does not exist, can't create forward
|
||||||
echo "ERROR: Address to Forward ($email) does not exist."
|
echo "ERROR: Existing Forward for $email does not exist. Add new forward instead."
|
||||||
exit 1
|
exit 1
|
||||||
elif [ "$mbox_id" -gt '0' ]; then
|
elif [[ $fowards_id -gt '0' ]]; then
|
||||||
# verified mbox, check for existing forward
|
# verified forward exists, build update query
|
||||||
dbquery="SELECT id FROM vm_forwards WHERE mbox_id='$mbox_id';"
|
dbquery="UPDATE vm_forwards"
|
||||||
vm_forwards_id=`eval $dbcmd $dbcmdopts \"$dbquery\"`
|
if [[ -z $forward ]] && [[ -z $keep ]]; then
|
||||||
if [ -z $vm_forwards_id ]; then
|
# nothing to update
|
||||||
# existing forward does not exist, can't modify
|
echo "ERROR: No values passed for update."
|
||||||
echo "ERROR: Forward for $email does not exists, can't edit. Add new forward instead."
|
|
||||||
exit 1
|
exit 1
|
||||||
|
elif [[ -n $forward ]] && [[ -n $keep ]]; then
|
||||||
|
# update forward_to & save_local
|
||||||
|
dbquery="$dbquery SET forward_to='$forward', save_local='$keep'"
|
||||||
|
elif [[ -n $forward ]] && [[ -z $keep ]]; then
|
||||||
|
# only update forward_to
|
||||||
|
dbquery="$dbquery SET forward_to='$forward'"
|
||||||
|
elif [[ -z $forward ]] && [[ -n $keep ]]; then
|
||||||
|
# only update save_local
|
||||||
|
dbquery="$dbquery SET save_local='$keep'"
|
||||||
else
|
else
|
||||||
dbquery="UPDATE vm_forwards SET forward_to='$forward'"
|
echo "ERROR: Uknown error."
|
||||||
if [ ! -z $keep ]; then
|
exit 1
|
||||||
dbquery="$dbquery, save_local='$keep'"
|
|
||||||
fi
|
fi
|
||||||
dbquery="$dbquery WHERE mbox_id='$mbox_id'"
|
dbquery="$dbquery WHERE id='$fowards_id'"
|
||||||
eval $dbcmd $dbcmdopts \"$dbquery\;\"
|
eval $dbcmd $dbcmdopts \"$dbquery\;\"
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
# db query error
|
# db query error
|
||||||
echo "ERROR: System error querying database."
|
echo "ERROR: System error querying database."
|
||||||
|
|
|
@ -39,28 +39,28 @@ if [[ -z $password ]]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# get domain_id (and thus check if domain already exists)
|
# get domain_id to check if domain already exists
|
||||||
domain_id=`mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -s -r -N -e "SELECT id from vm_domains WHERE domain='$domain';"`
|
domain_id=`mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -s -r -N -e "SELECT id from vm_domains WHERE domain='$domain';"`
|
||||||
if [ -z $domain_id ] ; then
|
if [[ -z $domain_id ]] ; then
|
||||||
echo "ERROR: Domain $domain does not exist."
|
echo "ERROR: Domain $domain does not exist."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# make sure mbox doesn't already exist
|
# make sure mbox doesn't already exist
|
||||||
rowcount=`mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -s -r -N -e "SELECT COUNT(*) FROM vm_mboxes WHERE domain_id='$domain_id' AND mbox='$mbox';"`
|
mbox_id=`mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -s -r -N -e "SELECT id FROM vm_mboxes WHERE mbox='$mbox' AND domain='$domain';"`
|
||||||
if [ "$rowcount" -eq '0' ] ; then
|
if [[ -z $mbox_id ]] ; then
|
||||||
# mbox does not exist, build SQL
|
# mbox does not exist, build SQL
|
||||||
# first encrypt password
|
# first encrypt password
|
||||||
passwd=`/usr/bin/openssl passwd -6 "$password"`
|
passwd=`/usr/bin/openssl passwd -6 "$password"`
|
||||||
passwd="{SHA512-CRYPT}$passwd"
|
passwd="{SHA512-CRYPT}$passwd"
|
||||||
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -e 'INSERT INTO vm_mboxes SET domain_id=\"$domain_id\", mbox=\"$mbox\", passwd=\"$passwd\""
|
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -e 'INSERT INTO vm_mboxes SET mbox=\"$mbox\", domain=\"$domain\", passwd=\"$passwd\""
|
||||||
if [[ -n $status ]] ; then
|
if [[ -n $status ]] ; then
|
||||||
dbcmd="$dbcmd, status=\"$status\""
|
dbcmd="$dbcmd, status=\"$status\""
|
||||||
fi
|
fi
|
||||||
if [[ -n $filter ]] ; then
|
if [[ -n $filter ]] ; then
|
||||||
dbcmd="$dbcmd, filter=\"$filter\""
|
dbcmd="$dbcmd, filter=\"$filter\""
|
||||||
fi
|
fi
|
||||||
if [ -z "$quota" ] ; then
|
if [[ -z "$quota" ]] ; then
|
||||||
# get mbox_quota_default from domains table
|
# get mbox_quota_default from domains table
|
||||||
quota=`mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -s -r -N -e "SELECT mbox_quota_default from vm_domains WHERE domain='$domain';"`
|
quota=`mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -s -r -N -e "SELECT mbox_quota_default from vm_domains WHERE domain='$domain';"`
|
||||||
fi
|
fi
|
||||||
|
@ -85,7 +85,7 @@ if [ "$rowcount" -eq '0' ] ; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
dbcmd="$dbcmd;'"
|
dbcmd="$dbcmd;'"
|
||||||
elif [ "$rowcount" -eq '1' ] ; then
|
elif [[ $mbox_id -gt '0' ]] ; then
|
||||||
echo "ERROR: $email already exists in vmail database."
|
echo "ERROR: $email already exists in vmail database."
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
|
|
|
@ -34,16 +34,16 @@ dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE"
|
||||||
dbcmdopts="-s -r -N -e"
|
dbcmdopts="-s -r -N -e"
|
||||||
|
|
||||||
# get email address id which also works to confirm address exists
|
# get email address id which also works to confirm address exists
|
||||||
dbquery="SELECT vm_mboxes.id FROM vm_mboxes, vm_domains WHERE vm_mboxes.mbox='$mbox' AND vm_mboxes.domain_id=vm_domains.id AND vm_domains.domain='$domain'"
|
dbquery="SELECT id FROM vm_mboxes WHERE mbox='$mbox' AND domain='$domain'"
|
||||||
mboxes_id=`$dbcmd $dbcmdopts "$dbquery"`
|
mboxes_id=`$dbcmd $dbcmdopts "$dbquery"`
|
||||||
|
|
||||||
if [ -z "$mboxes_id" ]; then
|
if [[ -z $mboxes_id ]]; then
|
||||||
echo "ERROR: Email address $email does not exist."
|
echo "ERROR: Email address $email does not exist."
|
||||||
exit 1
|
exit 1
|
||||||
elif [ "$mboxes_id" -gt '0' ]; then
|
elif [[ $mboxes_id -gt '0' ]]; then
|
||||||
if [[ -n $execute ]] || vmail::yesno "Delete $email now?"; then
|
if [[ -n $execute ]] || vmail::yesno "Delete $email now?"; then
|
||||||
# this should be sufficient for vm_* tables due to ON DELETE CASCADE foreign key references
|
# this should be sufficient for vm_* tables due to ON DELETE CASCADE foreign key references
|
||||||
dbquery="DELETE FROM vm_mboxes WHERE vm_mboxes.id='$mboxes_id';"
|
dbquery="DELETE FROM vm_mboxes WHERE id='$mboxes_id';"
|
||||||
eval $dbcmd $dbcmdopts "\"$dbquery\""
|
eval $dbcmd $dbcmdopts "\"$dbquery\""
|
||||||
dbquery="DELETE FROM sa_userpref WHERE username='$email';"
|
dbquery="DELETE FROM sa_userpref WHERE username='$email';"
|
||||||
eval $dbcmd $dbcmdopts "\"$dbquery\""
|
eval $dbcmd $dbcmdopts "\"$dbquery\""
|
||||||
|
|
|
@ -23,14 +23,11 @@ help()
|
||||||
echo " -c Output in cvs format."
|
echo " -c Output in cvs format."
|
||||||
echo " -t Use tabs instead of tables for output, do not display column headers."
|
echo " -t Use tabs instead of tables for output, do not display column headers."
|
||||||
echo " -v Include encrypt password in output."
|
echo " -v Include encrypt password in output."
|
||||||
echo " -g Wildcard (blog) search when searching for username."
|
|
||||||
echo ""
|
echo ""
|
||||||
echo " Search term is optional. If nothing specified all email acccounts for all domains will be returned."
|
echo " Search term is optional. If nothing specified all email acccounts for all domains will be returned."
|
||||||
echo " By default username searches are for exact matchs."
|
echo " Examples:"
|
||||||
echo " Specify -g to turn them in to a wildcard (glob) search. Examples:"
|
|
||||||
echo " $thisfilename -e joe@example.com # search for specific email address 'joe@example.com'."
|
echo " $thisfilename -e joe@example.com # search for specific email address 'joe@example.com'."
|
||||||
echo " $thisfilename -m joe # search for username 'joe' in all domains."
|
echo " $thisfilename -m joe # search for username 'joe' in all domains."
|
||||||
echo " $thisfilename -m joe -g # search for usernames containing 'joe' in all domains."
|
|
||||||
echo " $thisfilename -d example.com # search for all usernames in the 'example.com' domain."
|
echo " $thisfilename -d example.com # search for all usernames in the 'example.com' domain."
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
@ -45,34 +42,29 @@ if [[ -n $tab ]]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# build query
|
# build query
|
||||||
dbquery="SELECT vm_mboxes.mbox, vm_domains.domain"
|
dbquery="SELECT mbox, domain"
|
||||||
if [ -n "$verbose" ]; then
|
if [[ -n $verbose ]]; then
|
||||||
dbquery="$dbquery, vm_mboxes.passwd"
|
dbquery="$dbquery, passwd"
|
||||||
fi
|
fi
|
||||||
dbquery="$dbquery, vm_mboxes.status, vm_mboxes.quota, vm_mboxes.ratelimit, vm_mboxes.filter FROM vm_domains, vm_mboxes WHERE vm_domains.id=vm_mboxes.domain_id"
|
dbquery="$dbquery, status, quota, ratelimit, filter FROM vm_mboxes"
|
||||||
if [ -n "$mbox" ] && [ -n "$domain" ]; then
|
if [[ -n $mbox ]] && [[ -n $domain ]]; then
|
||||||
# search for specific email address
|
# search for specific email address
|
||||||
dbquery="$dbquery AND vm_domains.domain='$domain' AND vm_mboxes.mbox='$mbox'"
|
dbquery="$dbquery WHERE mbox='$mbox' AND domain='$domain'"
|
||||||
elif [ -n "$mbox" ] && [ -z "$domain" ]; then
|
elif [[ -n $mbox ]] && [[ -z $domain ]]; then
|
||||||
# search all domains for username
|
# search all domains for username
|
||||||
if [ -n "$glob" ]; then
|
dbquery="$dbquery WHERE mbox='$mbox'"
|
||||||
# wildcard search
|
elif [[ -z $mbox ]] && [[ -n $domain ]]; then
|
||||||
dbquery="$dbquery AND vm_mboxes.mbox LIKE '%$mbox%'"
|
|
||||||
else
|
|
||||||
# exact match
|
|
||||||
dbquery="$dbquery AND vm_mboxes.mbox='$mbox'"
|
|
||||||
fi
|
|
||||||
elif [ -z "$mbox" ] && [ -n "$domain" ]; then
|
|
||||||
# get all usernames for domain
|
# get all usernames for domain
|
||||||
dbquery="$dbquery AND vm_domains.domain='$domain'"
|
dbquery="$dbquery WHERE domain='$domain'"
|
||||||
# elif [ -z "$mbox" ] && [ -z "$domain" ]; then
|
# elif [ -z "$mbox" ] && [ -z "$domain" ]; then
|
||||||
# echo "ERROR: No username or domain specified."
|
# echo "ERROR: No username or domain specified."
|
||||||
# help
|
# help
|
||||||
# uncomment above 3 lines to force search term, otherwise all email addresses for all domains will be returned
|
# uncomment above 3 lines to force search term, otherwise all email addresses for all domains will be returned
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo $dbquery
|
||||||
# set order by
|
# set order by
|
||||||
dbquery="$dbquery ORDER BY vm_domains.domain, vm_mboxes.mbox;";
|
dbquery="$dbquery ORDER BY domain, mbox;";
|
||||||
|
|
||||||
# execute mysql query
|
# execute mysql query
|
||||||
eval $dbcmd $dbcmdopts "\"$dbquery\"" $cvs
|
eval $dbcmd $dbcmdopts "\"$dbquery\"" $cvs
|
||||||
|
|
|
@ -35,9 +35,9 @@ if [[ -z $email ]]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# get mbox id (and thus check if email account already exists)
|
# 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;"`
|
mbox_id=`mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -s -r -N -e "SELECT id from vm_mboxes WHERE mbox='$mbox' AND domain='$domain';"`
|
||||||
|
|
||||||
if [ -z $mbox_id ] ; then
|
if [[ -z $mbox_id ]] ; then
|
||||||
echo "ERROR: Email address $email does not exist."
|
echo "ERROR: Email address $email does not exist."
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
@ -46,7 +46,7 @@ fi
|
||||||
dbset=""
|
dbset=""
|
||||||
|
|
||||||
# check for quota update
|
# check for quota update
|
||||||
if [ -n "$quota" ]; then
|
if [[ -n $quota ]]; then
|
||||||
# make quota uppercase in case it is set to NULL
|
# make quota uppercase in case it is set to NULL
|
||||||
quota=`echo $quota | tr [:lower:] [:upper:]`
|
quota=`echo $quota | tr [:lower:] [:upper:]`
|
||||||
if [[ "$quota" =~ ^[0-9]+$ ]] || [[ "$quota" == "NULL" ]]; then
|
if [[ "$quota" =~ ^[0-9]+$ ]] || [[ "$quota" == "NULL" ]]; then
|
||||||
|
@ -58,10 +58,13 @@ if [ -n "$quota" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# check for ratelimit update
|
# check for ratelimit update
|
||||||
if [ -n "$ratelimit" ]; then
|
if [[ -n $ratelimit ]]; then
|
||||||
# make ratelimit uppercase in case it is set to NULL
|
# make ratelimit uppercase in case it is set to NULL
|
||||||
ratelimit=`echo $ratelimit | tr [:lower:] [:upper:]`
|
ratelimit=`echo $ratelimit | tr [:lower:] [:upper:]`
|
||||||
if [[ "$ratelimit" =~ ^[0-9]+$ ]] || [[ "$ratelimit" == "NULL" ]]; then
|
if [[ "$ratelimit" =~ ^[0-9]+$ ]] || [[ "$ratelimit" == "NULL" ]]; then
|
||||||
|
if [[ ! -z $dbset ]]; then
|
||||||
|
dbset="$dbset,"
|
||||||
|
fi
|
||||||
dbset=" ratelimit=$ratelimit"
|
dbset=" ratelimit=$ratelimit"
|
||||||
else
|
else
|
||||||
echo "ERROR: ratelimit (-r) must numeric or NULL"
|
echo "ERROR: ratelimit (-r) must numeric or NULL"
|
||||||
|
@ -70,32 +73,32 @@ if [ -n "$ratelimit" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# check for password update
|
# check for password update
|
||||||
if [ ! -z "$password" ]; then
|
if [[ ! -z $password ]]; then
|
||||||
passwd=`/usr/bin/openssl passwd -6 "$password"`
|
passwd=`/usr/bin/openssl passwd -6 "$password"`
|
||||||
passwd="{SHA512-CRYPT}$passwd"
|
passwd="{SHA512-CRYPT}$passwd"
|
||||||
if [ ! -z "$dbset" ]; then
|
if [[ ! -z $dbset ]]; then
|
||||||
dbset="$dbset,"
|
dbset="$dbset,"
|
||||||
fi
|
fi
|
||||||
dbset=" $dbset passwd=\"$passwd\""
|
dbset=" $dbset passwd=\"$passwd\""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# check for status update
|
# check for status update
|
||||||
if [ ! -z "$status" ]; then
|
if [[ ! -z $status ]]; then
|
||||||
if [ ! -z "$dbset" ]; then
|
if [[ ! -z $dbset ]]; then
|
||||||
dbset="$dbset,"
|
dbset="$dbset,"
|
||||||
fi
|
fi
|
||||||
dbset="$dbset status=\"$status\""
|
dbset="$dbset status=\"$status\""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# check for junk filter update
|
# check for junk filter update
|
||||||
if [ ! -z "$filter" ]; then
|
if [[ ! -z $filter ]]; then
|
||||||
if [ ! -z "$dbset" ]; then
|
if [[ ! -z $dbset ]]; then
|
||||||
dbset="$dbset,"
|
dbset="$dbset,"
|
||||||
fi
|
fi
|
||||||
dbset="$dbset filter=\"$filter\""
|
dbset="$dbset filter=\"$filter\""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$dbset" ]; then
|
if [[ -n $dbset ]]; then
|
||||||
|
|
||||||
# build query
|
# build query
|
||||||
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -e 'UPDATE vm_mboxes SET $dbset WHERE id=\"$mbox_id\";'"
|
dbcmd="mysql --defaults-extra-file=$MYSQL_CONNECTION_INFO_FILE -e 'UPDATE vm_mboxes SET $dbset WHERE id=\"$mbox_id\";'"
|
||||||
|
|
|
@ -29,7 +29,7 @@ if [ -d $VMAIL_DIR ]; then
|
||||||
for vmail_domain in "${vmail_domain_array[@]}"; do
|
for vmail_domain in "${vmail_domain_array[@]}"; do
|
||||||
# make sure domain array element is a dir
|
# make sure domain array element is a dir
|
||||||
if [ -d $VMAIL_DIR/$vmail_domain ]; then
|
if [ -d $VMAIL_DIR/$vmail_domain ]; then
|
||||||
# get domain id for later queries and which also works to confirm domain exists in vmail db
|
# get domain id which confirms domain exists in vmail db
|
||||||
dbquery="SELECT vm_domains.id FROM vm_domains WHERE vm_domains.domain='$vmail_domain'"
|
dbquery="SELECT vm_domains.id FROM vm_domains WHERE vm_domains.domain='$vmail_domain'"
|
||||||
domain_id=''
|
domain_id=''
|
||||||
domain_id=`$dbcmd $dbcmdopts "$dbquery"`
|
domain_id=`$dbcmd $dbcmdopts "$dbquery"`
|
||||||
|
@ -45,7 +45,7 @@ if [ -d $VMAIL_DIR ]; then
|
||||||
# cycle thru each mailbox for this domain
|
# cycle thru each mailbox for this domain
|
||||||
for mbox in "${mbox_array[@]}"; do
|
for mbox in "${mbox_array[@]}"; do
|
||||||
# get email address id which works to confirm address exists
|
# get email address id which works to confirm address exists
|
||||||
dbquery="SELECT vm_mboxes.id FROM vm_mboxes WHERE vm_mboxes.mbox='$mbox' AND vm_mboxes.domain_id='$domain_id'"
|
dbquery="SELECT vm_mboxes.id FROM vm_mboxes WHERE vm_mboxes.mbox='$mbox' AND vm_mboxes.domain='$vmail_domain'"
|
||||||
mboxes_id=''
|
mboxes_id=''
|
||||||
mboxes_id=`$dbcmd $dbcmdopts "$dbquery"`
|
mboxes_id=`$dbcmd $dbcmdopts "$dbquery"`
|
||||||
if [ -z "$mboxes_id" ]; then
|
if [ -z "$mboxes_id" ]; then
|
||||||
|
|
|
@ -142,5 +142,8 @@ default_pass_scheme = SHA512-CRYPT
|
||||||
|
|
||||||
password_query = SELECT vm_mboxes.passwd AS password, CONCAT('*:bytes=', vm_mboxes.quota, 'G') AS userdb_quota_rule, '/var/vmail/%d/%n' AS userdb_home, '/var/vmail/%d/%n/Maildir' AS userdb_mail, 'vmail' AS userdb_uid, 'vmail' AS userdb_gid FROM vm_domains, vm_mboxes WHERE vm_domains.domain = '%d' AND vm_domains.id = vm_mboxes.domain_id AND vm_mboxes.mbox = '%n' AND vm_domains.status = '1' AND vm_mboxes.status > '0'
|
password_query = SELECT vm_mboxes.passwd AS password, CONCAT('*:bytes=', vm_mboxes.quota, 'G') AS userdb_quota_rule, '/var/vmail/%d/%n' AS userdb_home, '/var/vmail/%d/%n/Maildir' AS userdb_mail, 'vmail' AS userdb_uid, 'vmail' AS userdb_gid FROM vm_domains, vm_mboxes WHERE vm_domains.domain = '%d' AND vm_domains.id = vm_mboxes.domain_id AND vm_mboxes.mbox = '%n' AND vm_domains.status = '1' AND vm_mboxes.status > '0'
|
||||||
|
|
||||||
|
|
||||||
|
password_query = SELECT vm_mboxes.passwd AS password, CONCAT('*:bytes=', vm_mboxes.quota, 'G') AS userdb_quota_rule, '/var/vmail/%d/%n' AS userdb_home, '/var/vmail/%d/%n/Maildir' AS userdb_mail, 'vmail' AS userdb_uid, 'vmail' AS userdb_gid FROM vm_domains, vm_mboxes WHERE vm_domains.domain = '%d' AND vm_mboxes.mbox = '%n' AND vm_mboxes.domain = '%d' AND vm_domains.status = '1' AND vm_mboxes.status > '0'
|
||||||
|
|
||||||
# Query to get a list of all usernames.
|
# Query to get a list of all usernames.
|
||||||
#iterate_query = SELECT username AS user FROM users
|
#iterate_query = SELECT username AS user FROM users
|
||||||
|
|
|
@ -378,7 +378,7 @@ acl_rcpt_to:
|
||||||
# compromised account, not to restrict legitimate users. Set your defaults & limits accordignly.
|
# compromised account, not to restrict legitimate users. Set your defaults & limits accordignly.
|
||||||
warn
|
warn
|
||||||
authenticated = *
|
authenticated = *
|
||||||
set acl_m_ratelimit_hourly = ${lookup mysql{SELECT IFNULL(vm_mboxes.ratelimit, 100000) FROM vm_domains, vm_mboxes WHERE vm_domains.domain="$sender_address_domain" AND vm_mboxes.mbox="$sender_address_local_part" AND vm_domains.id = vm_mboxes.domain_id}{$value}{10}}
|
set acl_m_ratelimit_hourly = ${lookup mysql{SELECT IFNULL(vm_mboxes.ratelimit, 100000) FROM vm_mboxes WHERE vm_mboxes.mbox="$sender_address_local_part" AND vm_mboxes.domain='$sender_address_domain'}{$value}{10}}
|
||||||
set acl_m_ratelimit_daily = ${eval: (10 * $acl_m_ratelimit_hourly) }
|
set acl_m_ratelimit_daily = ${eval: (10 * $acl_m_ratelimit_hourly) }
|
||||||
ratelimit = 0 / 1h / per_mail / strict / $authenticated_id
|
ratelimit = 0 / 1h / per_mail / strict / $authenticated_id
|
||||||
log_message = Sender rate is $sender_rate/$sender_rate_period for $authenticated_id
|
log_message = Sender rate is $sender_rate/$sender_rate_period for $authenticated_id
|
||||||
|
@ -741,7 +741,7 @@ autowhitelist_filter:
|
||||||
driver = redirect
|
driver = redirect
|
||||||
domains = ! +local_domains
|
domains = ! +local_domains
|
||||||
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
|
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
|
||||||
condition = ${lookup mysql{SELECT vm_mboxes.id FROM vm_domains, vm_mboxes WHERE vm_domains.domain = "$sender_address_domain" AND vm_mboxes.mbox = "$sender_address_local_part" AND vm_domains.id = vm_mboxes.domain_id}}
|
condition = ${lookup mysql{SELECT vm_mboxes.id FROM vm_mboxes WHERE vm_mboxes.mbox="$sender_address_local_part" AND vm_mboxes.domain="$sender_address_domain" }}
|
||||||
check_local_user = false
|
check_local_user = false
|
||||||
user = Debian-exim
|
user = Debian-exim
|
||||||
file = /etc/exim4/autowhitelist.filter
|
file = /etc/exim4/autowhitelist.filter
|
||||||
|
@ -799,7 +799,7 @@ virtual_alias:
|
||||||
local_part_suffix = +*
|
local_part_suffix = +*
|
||||||
local_part_suffix_optional = true
|
local_part_suffix_optional = true
|
||||||
condition = ${if !eq {$received_protocol}{spam-scanned}}
|
condition = ${if !eq {$received_protocol}{spam-scanned}}
|
||||||
data = ${lookup mysql{SELECT CONCAT(vm_mboxes.mbox,'@${domain}') FROM vm_aliases, vm_mboxes, vm_domains WHERE vm_aliases.alias='${local_part}' AND vm_aliases.mbox_id = vm_mboxes.id AND vm_mboxes.domain_id = vm_domains.id AND vm_domains.domain='${domain}' AND vm_domains.status = '1' AND vm_mboxes.status > '0'}}
|
data = ${lookup mysql{SELECT CONCAT(vm_aliases.mbox,'@${domain}') FROM vm_aliases, vm_mboxes, vm_domains WHERE vm_aliases.alias='${local_part}' AND vm_aliases.domain='${domain}' AND vm_aliases.mbox=vm_mboxes.mbox AND vm_mboxes.domain='${domain}' AND vm_mboxes.status > '0' AND vm_domains.domain='${domain}' AND vm_domains.status = '1'}}
|
||||||
|
|
||||||
junk_filter:
|
junk_filter:
|
||||||
driver = accept
|
driver = accept
|
||||||
|
@ -811,7 +811,7 @@ junk_filter:
|
||||||
{ eq {$header_X-Junk-Flag:}{YES}} \
|
{ eq {$header_X-Junk-Flag:}{YES}} \
|
||||||
{ !eq {$header_X-Whitelist-Flag:}{YES}} \
|
{ !eq {$header_X-Whitelist-Flag:}{YES}} \
|
||||||
} {yes}{no}}
|
} {yes}{no}}
|
||||||
condition = ${lookup mysql{SELECT vm_mboxes.id FROM vm_domains, vm_mboxes WHERE vm_domains.domain='${domain}' AND vm_mboxes.mbox='${local_part}' AND vm_domains.id = vm_mboxes.domain_id AND vm_domains.status = '1' AND vm_mboxes.status > '0' AND vm_mboxes.filter > '0'}}
|
condition = ${lookup mysql{SELECT vm_mboxes.id FROM vm_mboxes, vm_domains WHERE vm_mboxes.mbox='${local_part}' AND vm_mboxes.domain='${domain}' AND vm_mboxes.status > '0' AND vm_mboxes.filter > '0' AND vm_domains.domain=vm_mboxes.domain AND vm_domains.status='1'}}
|
||||||
transport = junk_delivery
|
transport = junk_delivery
|
||||||
|
|
||||||
spam_filter:
|
spam_filter:
|
||||||
|
@ -824,7 +824,7 @@ spam_filter:
|
||||||
{ eq {$header_X-Spam-Flag:}{YES}} \
|
{ eq {$header_X-Spam-Flag:}{YES}} \
|
||||||
{ !eq {$header_X-Whitelist-Flag:}{YES}} \
|
{ !eq {$header_X-Whitelist-Flag:}{YES}} \
|
||||||
} {yes}{no}}
|
} {yes}{no}}
|
||||||
condition = ${lookup mysql{SELECT vm_mboxes.id FROM vm_domains, vm_mboxes WHERE vm_domains.domain='${domain}' AND vm_mboxes.mbox='${local_part}' AND vm_domains.id = vm_mboxes.domain_id AND vm_domains.status = '1' AND vm_mboxes.status > '0' AND vm_mboxes.filter = '2'}}
|
condition = ${lookup mysql{SELECT id FROM vm_domains, vm_mboxes WHERE vm_domains.domain='${domain}' vm_domains.status='1' AND vm_mboxes.mbox='${local_part}' AND vm_mboxes.domain='${domain}' AND vm_mboxes.status>'0'}}
|
||||||
transport = junk_delivery
|
transport = junk_delivery
|
||||||
|
|
||||||
virtual_vacation:
|
virtual_vacation:
|
||||||
|
@ -835,7 +835,7 @@ virtual_vacation:
|
||||||
{ !match {$h_precedence:} {(?i)junk|bulk|list}} \
|
{ !match {$h_precedence:} {(?i)junk|bulk|list}} \
|
||||||
{ !eq {$received_protocol}{spam-scanned}} \
|
{ !eq {$received_protocol}{spam-scanned}} \
|
||||||
{ !eq {$sender_address} {}} \
|
{ !eq {$sender_address} {}} \
|
||||||
{ eq {${lookup mysql{SELECT vm_autoresponders.mode FROM vm_domains, vm_mboxes, vm_autoresponders WHERE vm_domains.domain='${domain}' AND vm_mboxes.mbox='${local_part}' AND vm_domains.id = vm_mboxes.domain_id AND vm_autoresponders.mbox_id = vm_mboxes.id AND vm_domains.status = '1' AND vm_mboxes.status > '0' AND vm_autoresponders.status = '1'}{$value}fail}}{Vacation}} \
|
{ eq {${lookup mysql{SELECT vm_autoresponders.mode FROM vm_domains, vm_mboxes, vm_autoresponders WHERE vm_domains.domain='${domain}' AND vm_domains.status = '1' AND vm_mboxes.mbox='${local_part}' AND vm_mboxes.domain='${domain}' AND vm_mboxes.status > '0' AND vm_autoresponders.mbox='${local_part}' AND vm_autoresponders.domain='${domain}' AND vm_autoresponders.status='1'}{$value}fail}}{Vacation}} \
|
||||||
} {yes} {no}}
|
} {yes} {no}}
|
||||||
# add options for start & end date fields
|
# add options for start & end date fields
|
||||||
no_expn
|
no_expn
|
||||||
|
@ -861,7 +861,7 @@ virtual_autoresponder:
|
||||||
{ !match {$h_precedence:} {(?i)junk|bulk|list}} \
|
{ !match {$h_precedence:} {(?i)junk|bulk|list}} \
|
||||||
{ !eq {$received_protocol}{spam-scanned}} \
|
{ !eq {$received_protocol}{spam-scanned}} \
|
||||||
{ !eq {$sender_address} {}} \
|
{ !eq {$sender_address} {}} \
|
||||||
{ eq {${lookup mysql{SELECT vm_autoresponders.mode FROM vm_domains, vm_mboxes, vm_autoresponders WHERE vm_domains.domain='${domain}' AND vm_mboxes.mbox='${local_part}' AND vm_domains.id = vm_mboxes.domain_id AND vm_autoresponders.mbox_id = vm_mboxes.id AND vm_domains.status = '1' AND vm_mboxes.status > '0' AND vm_autoresponders.status = '1'}{$value}fail}}{Autoresponder} } \
|
{ eq {${lookup mysql{SELECT vm_autoresponders.mode FROM vm_domains, vm_mboxes, vm_autoresponders WHERE vm_domains.domain='${domain}' AND vm_domains.status = '1' AND vm_mboxes.mbox='${local_part}' AND vm_mboxes.domain='${domain}' AND vm_mboxes.status > '0' AND vm_autoresponders.mbox='${local_part}' AND vm_autoresponders.domain='${domain}' AND vm_autoresponders.status='1'}{$value}fail}}{Autoresponder} } \
|
||||||
} {yes} {no}}
|
} {yes} {no}}
|
||||||
# add options for start & end date fields
|
# add options for start & end date fields
|
||||||
no_expn
|
no_expn
|
||||||
|
@ -882,7 +882,7 @@ virtual_forward_and_drop:
|
||||||
condition = ${if !eq {$received_protocol}{spam-scanned}}
|
condition = ${if !eq {$received_protocol}{spam-scanned}}
|
||||||
local_part_suffix = +*
|
local_part_suffix = +*
|
||||||
local_part_suffix_optional = true
|
local_part_suffix_optional = true
|
||||||
data = ${lookup mysql{SELECT vm_forwards.forward_to FROM vm_domains, vm_mboxes, vm_forwards WHERE vm_domains.domain='${domain}' AND vm_domains.id = vm_mboxes.domain_id AND vm_mboxes.mbox='${local_part}' AND vm_mboxes.id=vm_forwards.mbox_id AND vm_domains.status = '1' AND vm_mboxes.status > '0' AND vm_forwards.save_local='0'}}
|
data = ${lookup mysql{SELECT vm_forwards.forward_to FROM vm_domains, vm_mboxes, vm_forwards WHERE vm_domains.domain='${domain}' AND vm_domains.status = '1' AND vm_mboxes.mbox='${local_part}' AND vm_mboxes.domain='${domain}' AND vm_mboxes.status > '0' AND vm_forwards.mbox='${local_part}' AND vm_forwards.domain='${domain}' AND vm_forwards.save_local='0'}}
|
||||||
|
|
||||||
virtual_forward_and_keep:
|
virtual_forward_and_keep:
|
||||||
driver = redirect
|
driver = redirect
|
||||||
|
@ -890,7 +890,7 @@ virtual_forward_and_keep:
|
||||||
condition = ${if !eq {$received_protocol}{spam-scanned}}
|
condition = ${if !eq {$received_protocol}{spam-scanned}}
|
||||||
local_part_suffix = +*
|
local_part_suffix = +*
|
||||||
local_part_suffix_optional = true
|
local_part_suffix_optional = true
|
||||||
data = ${lookup mysql{SELECT CONCAT('${local_part}@${domain}\n', vm_forwards.forward_to) FROM vm_domains, vm_mboxes, vm_forwards WHERE vm_domains.domain='${domain}' AND vm_domains.id = vm_mboxes.domain_id AND vm_mboxes.mbox='${local_part}' AND vm_mboxes.id=vm_forwards.mbox_id AND vm_domains.status = '1' AND vm_mboxes.status > '0' AND vm_forwards.save_local='1'}}
|
data = ${lookup mysql{SELECT CONCAT('${local_part}@${domain}\n', vm_forwards.forward_to) FROM vm_domains, vm_mboxes, vm_forwards WHERE vm_domains.domain='${domain}' AND vm_domains.status = '1' AND vm_mboxes.mbox='${local_part}' AND vm_mboxes.domain='${domain}' AND vm_mboxes.status > '0' AND vm_forwards.mbox='${local_part}' AND vm_forwards.domain='${domain}' AND vm_forwards.save_local='1'}}
|
||||||
|
|
||||||
spamcheck_router:
|
spamcheck_router:
|
||||||
driver = accept
|
driver = accept
|
||||||
|
@ -903,7 +903,7 @@ spamcheck_router:
|
||||||
{ < {$message_size}{512k}} \
|
{ < {$message_size}{512k}} \
|
||||||
{ !eq {$header_X-Junk-Flag:}{YES}} \
|
{ !eq {$header_X-Junk-Flag:}{YES}} \
|
||||||
{ !eq {$header_X-Whitelist-Flag:}{YES}} \
|
{ !eq {$header_X-Whitelist-Flag:}{YES}} \
|
||||||
{ gt {${lookup mysql{SELECT vm_mboxes.status FROM vm_domains, vm_mboxes WHERE vm_domains.domain='${domain}' AND vm_mboxes.mbox='${local_part}' AND vm_domains.id = vm_mboxes.domain_id AND vm_domains.status = '1'}{$value}fail}}{0} } \
|
{ gt {${lookup mysql{SELECT vm_mboxes.filter FROM vm_domains, vm_mboxes WHERE vm_domains.domain='${domain}' AND vm_domains.status = '1' AND vm_mboxes.mbox='${local_part}' AND vm_mboxes.domain='${domain}' AND vm_mboxes.status > '0'}{$value}fail}}{0} } \
|
||||||
} {yes} {no}}
|
} {yes} {no}}
|
||||||
# Check for other headers too? Blacklist, SPF, DKIM failers go directly to Spam folder without spam scan??? - actually they should go to spam folder before this router is hit?
|
# Check for other headers too? Blacklist, SPF, DKIM failers go directly to Spam folder without spam scan??? - actually they should go to spam folder before this router is hit?
|
||||||
headers_remove = X-Spam-Checker-Version:X-Spam-Flag:X-Spam-Level:X-Spam-Status:X-Spam-Score:X-Spam-Report
|
headers_remove = X-Spam-Checker-Version:X-Spam-Flag:X-Spam-Level:X-Spam-Status:X-Spam-Score:X-Spam-Report
|
||||||
|
@ -914,7 +914,7 @@ user_filter:
|
||||||
domains = +local_domains
|
domains = +local_domains
|
||||||
local_part_suffix = +*
|
local_part_suffix = +*
|
||||||
local_part_suffix_optional = true
|
local_part_suffix_optional = true
|
||||||
data = ${lookup mysql{SELECT vm_filters.filter FROM vm_domains, vm_mboxes, vm_filters WHERE vm_domains.domain='${domain}' AND vm_mboxes.mbox='${local_part}' AND vm_domains.id = vm_mboxes.domain_id AND vm_mboxes.id = vm_filters.mbox_id AND vm_domains.status = '1' AND vm_mboxes.status > '0' }}
|
data = ${lookup mysql{SELECT vm_filters.filter FROM vm_domains, vm_mboxes, vm_filters WHERE vm_domains.domain='${domain}' AND vm_domains.status = '1' AND vm_mboxes.mbox='${local_part}' AND vm_mboxes.domain='${domain}' AND vm_mboxes.status > '0' AND vm_filters.mbox='${local_part}' AND vm_filters.domain='${domain}'}}
|
||||||
user = vmail
|
user = vmail
|
||||||
no_verify
|
no_verify
|
||||||
no_expn
|
no_expn
|
||||||
|
@ -931,7 +931,7 @@ lmtp_localuser:
|
||||||
domains = +local_domains
|
domains = +local_domains
|
||||||
local_part_suffix = +*
|
local_part_suffix = +*
|
||||||
local_part_suffix_optional = true
|
local_part_suffix_optional = true
|
||||||
condition = ${lookup mysql{SELECT vm_mboxes.id FROM vm_domains, vm_mboxes WHERE vm_domains.domain='${domain}' AND vm_mboxes.mbox='${local_part}' AND vm_domains.id = vm_mboxes.domain_id AND vm_domains.status = '1' AND vm_mboxes.status > '0'}}
|
condition = ${lookup mysql{SELECT vm_mboxes.id FROM vm_domains, vm_mboxes WHERE vm_domains.domain='${domain}' AND vm_domains.status = '1' AND vm_mboxes.mbox='${local_part}' AND vm_mboxes.domain='${domain}' AND vm_mboxes.status > '0'}}
|
||||||
# add checks to query for domain & mbox being active
|
# add checks to query for domain & mbox being active
|
||||||
transport = dovecot_lmtp
|
transport = dovecot_lmtp
|
||||||
cannot_route_message = Unknown user
|
cannot_route_message = Unknown user
|
||||||
|
@ -941,7 +941,7 @@ virtual_alias_catchall:
|
||||||
driver = redirect
|
driver = redirect
|
||||||
domains = +local_domains
|
domains = +local_domains
|
||||||
condition = ${if !eq {$received_protocol}{spam-scanned}}
|
condition = ${if !eq {$received_protocol}{spam-scanned}}
|
||||||
data = ${lookup mysql{SELECT CONCAT(vm_mboxes.mbox,'@${domain}') FROM vm_aliases, vm_mboxes, vm_domains WHERE vm_aliases.alias='catchall' AND vm_aliases.mbox_id = vm_mboxes.id AND vm_mboxes.domain_id = vm_domains.id AND vm_domains.domain='${domain}' AND vm_domains.status = '1' AND vm_mboxes.status > '0'}}
|
data = ${lookup mysql{SELECT CONCAT(vm_aliases.mbox,'@${domain}') FROM vm_aliases, vm_mboxes, vm_domains WHERE vm_aliases.alias='catchall' AND vm_aliases.domain='${domain}' AND vm_aliases.mbox=vm_mboxes.mbox AND vm_mboxes.domain='${domain} AND vm_mboxes.status > '0' AND vm_domains.domain='${domain}' AND vm_domains.status = '1'}}
|
||||||
|
|
||||||
# This router handles aliasing using a linearly searched alias file with the
|
# This router handles aliasing using a linearly searched alias file with the
|
||||||
# name SYSTEM_ALIASES_FILE. When this configuration is installed automatically,
|
# name SYSTEM_ALIASES_FILE. When this configuration is installed automatically,
|
||||||
|
@ -1082,10 +1082,8 @@ vacation_transport:
|
||||||
return_path = ${local_part}@${domain}
|
return_path = ${local_part}@${domain}
|
||||||
to = ${sender_address}
|
to = ${sender_address}
|
||||||
from = ${local_part}@${domain}
|
from = ${local_part}@${domain}
|
||||||
# subject = ${lookup mysql{SELECT subject FROM vm_autoresponder WHERE local_part='${local_part}' AND domain='${domain}'}{$value}{"Auto Reply"}}
|
subject = ${lookup mysql{SELECT vm_autoresponders.subject FROM vm_domains, vm_mboxes, vm_autoresponders WHERE vm_domains.domain='${domain}' AND vm_domains.status = '1' AND vm_mboxes.mbox='${local_part}' AND vm_mboxes.domain='${domain}' AND vm_mboxes.status > '0' AND vm_autoresponders.mbox='${local_part}' AND vm_autoresponders.domain='${domain}' AND vm_autoresponders.status='1' AND vm_autoresponders.mode='Vacation'}{$value}{"Auto Reply"}}
|
||||||
# text = ${lookup mysql{SELECT message FROM vm_autoresponder WHERE local_part='${local_part}' AND domain='${domain}'}{$value}fail}
|
text = ${lookup mysql{SELECT vm_autoresponders.body FROM vm_domains, vm_mboxes, vm_autoresponders WHERE vm_domains.domain='${domain}' AND vm_domains.status = '1' AND vm_mboxes.mbox='${local_part}' AND vm_mboxes.domain='${domain}' AND vm_mboxes.status > '0' AND vm_autoresponders.mbox='${local_part}' AND vm_autoresponders.domain='${domain}' AND vm_autoresponders.status='1' AND vm_autoresponders.mode='Vacation'}{$value}fail}
|
||||||
subject = ${lookup mysql{SELECT vm_autoresponders.subject FROM vm_domains, vm_mboxes, vm_autoresponders WHERE vm_domains.domain='${domain}' AND vm_mboxes.mbox='${local_part}' AND vm_domains.id = vm_mboxes.domain_id AND vm_autoresponders.mbox_id = vm_mboxes.id}{$value}{"Auto Reply"}}
|
|
||||||
text = ${lookup mysql{SELECT vm_autoresponders.body FROM vm_domains, vm_mboxes, vm_autoresponders WHERE vm_domains.domain='${domain}' AND vm_mboxes.mbox='${local_part}' AND vm_domains.id = vm_mboxes.domain_id AND vm_autoresponders.mbox_id = vm_mboxes.id}{$value}fail}
|
|
||||||
user = vmail
|
user = vmail
|
||||||
|
|
||||||
## for autoresponder
|
## for autoresponder
|
||||||
|
@ -1095,8 +1093,8 @@ autoresponder_transport:
|
||||||
return_path = ${local_part}@${domain}
|
return_path = ${local_part}@${domain}
|
||||||
to = ${sender_address}
|
to = ${sender_address}
|
||||||
from = ${local_part}@${domain}
|
from = ${local_part}@${domain}
|
||||||
subject = ${lookup mysql{SELECT vm_autoresponders.subject FROM vm_domains, vm_mboxes, vm_autoresponders WHERE vm_domains.domain='${domain}' AND vm_mboxes.mbox='${local_part}' AND vm_domains.id = vm_mboxes.domain_id AND vm_autoresponders.mbox_id = vm_mboxes.id}{$value}{"Auto Reply"}}
|
subject = ${lookup mysql{SELECT vm_autoresponders.subject FROM vm_domains, vm_mboxes, vm_autoresponders WHERE vm_domains.domain='${domain}' AND vm_domains.status = '1' AND vm_mboxes.mbox='${local_part}' AND vm_mboxes.domain='${domain}' AND vm_mboxes.status > '0' AND vm_autoresponders.mbox='${local_part}' AND vm_autoresponders.domain='${domain}' AND vm_autoresponders.status='1' AND vm_autoresponders.mode='Autoresponder'}{$value}{"Auto Reply"}}
|
||||||
text = ${lookup mysql{SELECT vm_autoresponders.body FROM vm_domains, vm_mboxes, vm_autoresponders WHERE vm_domains.domain='${domain}' AND vm_mboxes.mbox='${local_part}' AND vm_domains.id = vm_mboxes.domain_id AND vm_autoresponders.mbox_id = vm_mboxes.id}{$value}fail}
|
text = ${lookup mysql{SELECT vm_autoresponders.body FROM vm_domains, vm_mboxes, vm_autoresponders WHERE vm_domains.domain='${domain}' AND vm_domains.status = '1' AND vm_mboxes.mbox='${local_part}' AND vm_mboxes.domain='${domain}' AND vm_mboxes.status > '0' AND vm_autoresponders.mbox='${local_part}' AND vm_autoresponders.domain='${domain}' AND vm_autoresponders.status='1' AND vm_autoresponders.mode='Autoresponder'}{$value}fail}
|
||||||
user = vmail
|
user = vmail
|
||||||
|
|
||||||
maildir_delivery:
|
maildir_delivery:
|
||||||
|
|
44
vmail.sql
44
vmail.sql
|
@ -16,7 +16,8 @@ SET time_zone = "+00:00";
|
||||||
|
|
||||||
CREATE TABLE `vm_aliases` (
|
CREATE TABLE `vm_aliases` (
|
||||||
`id` int(10) UNSIGNED NOT NULL,
|
`id` int(10) UNSIGNED NOT NULL,
|
||||||
`mbox_id` int(10) UNSIGNED NOT NULL,
|
`mbox` varchar(128) NOT NULL,
|
||||||
|
`domain` varchar(255) NOT NULL,
|
||||||
`alias` varchar(128) NOT NULL
|
`alias` varchar(128) NOT NULL
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
|
@ -28,13 +29,14 @@ CREATE TABLE `vm_aliases` (
|
||||||
|
|
||||||
CREATE TABLE `vm_autoresponders` (
|
CREATE TABLE `vm_autoresponders` (
|
||||||
`id` int(10) UNSIGNED NOT NULL,
|
`id` int(10) UNSIGNED NOT NULL,
|
||||||
`mbox_id` int(10) UNSIGNED NOT NULL,
|
`mbox` varchar(128) NOT NULL,
|
||||||
|
`domain` varchar(255) NOT NULL,
|
||||||
`subject` varchar(128) NOT NULL,
|
`subject` varchar(128) NOT NULL,
|
||||||
`body` text NOT NULL,
|
`body` text NOT NULL,
|
||||||
`mode` enum('Vacation','Autoresponder') NOT NULL,
|
`mode` enum('Vacation','Autoresponder') NOT NULL DEFAULT 'Vacation',
|
||||||
`status` tinyint(1) NOT NULL DEFAULT 1,
|
`status` tinyint(1) NOT NULL DEFAULT 1,
|
||||||
`start` datetime DEFAULT NULL,
|
`start` date DEFAULT NULL,
|
||||||
`end` datetime DEFAULT NULL
|
`end` date DEFAULT NULL
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
-- --------------------------------------------------------
|
-- --------------------------------------------------------
|
||||||
|
@ -60,7 +62,8 @@ CREATE TABLE `vm_domains` (
|
||||||
|
|
||||||
CREATE TABLE `vm_filters` (
|
CREATE TABLE `vm_filters` (
|
||||||
`id` int(10) UNSIGNED NOT NULL,
|
`id` int(10) UNSIGNED NOT NULL,
|
||||||
`mbox_id` int(11) UNSIGNED NOT NULL,
|
`mbox` varchar(128) NOT NULL,
|
||||||
|
`domain` varchar(255) NOT NULL,
|
||||||
`filter` text NOT NULL
|
`filter` text NOT NULL
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
|
@ -72,7 +75,8 @@ CREATE TABLE `vm_filters` (
|
||||||
|
|
||||||
CREATE TABLE `vm_forwards` (
|
CREATE TABLE `vm_forwards` (
|
||||||
`id` int(10) UNSIGNED NOT NULL,
|
`id` int(10) UNSIGNED NOT NULL,
|
||||||
`mbox_id` int(10) UNSIGNED NOT NULL,
|
`mbox` varchar(128) NOT NULL,
|
||||||
|
`domain` varchar(255) NOT NULL,
|
||||||
`forward_to` varchar(128) NOT NULL,
|
`forward_to` varchar(128) NOT NULL,
|
||||||
`save_local` tinyint(1) NOT NULL DEFAULT 0
|
`save_local` tinyint(1) NOT NULL DEFAULT 0
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
@ -119,8 +123,8 @@ CREATE TABLE `vm_greylisting_resenders` (
|
||||||
|
|
||||||
CREATE TABLE `vm_mboxes` (
|
CREATE TABLE `vm_mboxes` (
|
||||||
`id` int(10) UNSIGNED NOT NULL,
|
`id` int(10) UNSIGNED NOT NULL,
|
||||||
`domain_id` int(10) UNSIGNED NOT NULL,
|
|
||||||
`mbox` varchar(128) NOT NULL,
|
`mbox` varchar(128) NOT NULL,
|
||||||
|
`domain` varchar(255) NOT NULL,
|
||||||
`passwd` char(128) NOT NULL,
|
`passwd` char(128) NOT NULL,
|
||||||
`status` tinyint(1) NOT NULL DEFAULT 1,
|
`status` tinyint(1) NOT NULL DEFAULT 1,
|
||||||
`quota` int(10) UNSIGNED DEFAULT NULL,
|
`quota` int(10) UNSIGNED DEFAULT NULL,
|
||||||
|
@ -137,35 +141,36 @@ CREATE TABLE `vm_mboxes` (
|
||||||
--
|
--
|
||||||
ALTER TABLE `vm_aliases`
|
ALTER TABLE `vm_aliases`
|
||||||
ADD PRIMARY KEY (`id`),
|
ADD PRIMARY KEY (`id`),
|
||||||
ADD KEY `mbox_delete_aliases` (`mbox_id`);
|
ADD UNIQUE KEY `alias` (`mbox`,`domain`,`alias`) USING BTREE,
|
||||||
|
ADD KEY `email` (`mbox`,`domain`) USING BTREE;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Indexes for table `vm_autoresponders`
|
-- Indexes for table `vm_autoresponders`
|
||||||
--
|
--
|
||||||
ALTER TABLE `vm_autoresponders`
|
ALTER TABLE `vm_autoresponders`
|
||||||
ADD PRIMARY KEY (`id`),
|
ADD PRIMARY KEY (`id`),
|
||||||
ADD UNIQUE KEY `autoresponder` (`mbox_id`);
|
ADD UNIQUE KEY `email` (`mbox`,`domain`) USING BTREE;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Indexes for table `vm_domains`
|
-- Indexes for table `vm_domains`
|
||||||
--
|
--
|
||||||
ALTER TABLE `vm_domains`
|
ALTER TABLE `vm_domains`
|
||||||
ADD PRIMARY KEY (`id`),
|
ADD PRIMARY KEY (`id`),
|
||||||
ADD KEY `domain` (`domain`(191));
|
ADD UNIQUE KEY `domain` (`domain`) USING BTREE;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Indexes for table `vm_filters`
|
-- Indexes for table `vm_filters`
|
||||||
--
|
--
|
||||||
ALTER TABLE `vm_filters`
|
ALTER TABLE `vm_filters`
|
||||||
ADD PRIMARY KEY (`id`),
|
ADD PRIMARY KEY (`id`),
|
||||||
ADD KEY `mbox_delete_filters` (`mbox_id`);
|
ADD UNIQUE KEY `email` (`mbox`,`domain`) USING BTREE;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Indexes for table `vm_forwards`
|
-- Indexes for table `vm_forwards`
|
||||||
--
|
--
|
||||||
ALTER TABLE `vm_forwards`
|
ALTER TABLE `vm_forwards`
|
||||||
ADD PRIMARY KEY (`id`),
|
ADD PRIMARY KEY (`id`),
|
||||||
ADD UNIQUE KEY `mbox_id` (`mbox_id`);
|
ADD UNIQUE KEY `email` (`mbox`,`domain`) USING BTREE;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Indexes for table `vm_greylisting`
|
-- Indexes for table `vm_greylisting`
|
||||||
|
@ -184,7 +189,8 @@ ALTER TABLE `vm_greylisting_resenders`
|
||||||
--
|
--
|
||||||
ALTER TABLE `vm_mboxes`
|
ALTER TABLE `vm_mboxes`
|
||||||
ADD PRIMARY KEY (`id`),
|
ADD PRIMARY KEY (`id`),
|
||||||
ADD KEY `email` (`domain_id`,`mbox`) USING BTREE;
|
ADD UNIQUE KEY `email` (`mbox`,`domain`) USING BTREE,
|
||||||
|
ADD KEY `domain_delete_mboxes` (`domain`);
|
||||||
|
|
||||||
--
|
--
|
||||||
-- AUTO_INCREMENT for dumped tables
|
-- AUTO_INCREMENT for dumped tables
|
||||||
|
@ -246,29 +252,29 @@ ALTER TABLE `vm_mboxes`
|
||||||
-- Constraints for table `vm_aliases`
|
-- Constraints for table `vm_aliases`
|
||||||
--
|
--
|
||||||
ALTER TABLE `vm_aliases`
|
ALTER TABLE `vm_aliases`
|
||||||
ADD CONSTRAINT `mbox_delete_aliases` FOREIGN KEY (`mbox_id`) REFERENCES `vm_mboxes` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
|
ADD CONSTRAINT `mbox_delete_aliases` FOREIGN KEY (`mbox`,`domain`) REFERENCES `vm_mboxes` (`mbox`, `domain`) ON DELETE CASCADE ON UPDATE NO ACTION;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Constraints for table `vm_autoresponders`
|
-- Constraints for table `vm_autoresponders`
|
||||||
--
|
--
|
||||||
ALTER TABLE `vm_autoresponders`
|
ALTER TABLE `vm_autoresponders`
|
||||||
ADD CONSTRAINT `mbox_delete_autoresponders` FOREIGN KEY (`mbox_id`) REFERENCES `vm_mboxes` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
|
ADD CONSTRAINT `mbox_delete_autoresponders` FOREIGN KEY (`mbox`,`domain`) REFERENCES `vm_mboxes` (`mbox`, `domain`) ON DELETE CASCADE ON UPDATE NO ACTION;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Constraints for table `vm_filters`
|
-- Constraints for table `vm_filters`
|
||||||
--
|
--
|
||||||
ALTER TABLE `vm_filters`
|
ALTER TABLE `vm_filters`
|
||||||
ADD CONSTRAINT `mbox_delete_filters` FOREIGN KEY (`mbox_id`) REFERENCES `vm_mboxes` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
|
ADD CONSTRAINT `mbox_delete_filters` FOREIGN KEY (`mbox`,`domain`) REFERENCES `vm_mboxes` (`mbox`, `domain`) ON DELETE CASCADE ON UPDATE NO ACTION;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Constraints for table `vm_forwards`
|
-- Constraints for table `vm_forwards`
|
||||||
--
|
--
|
||||||
ALTER TABLE `vm_forwards`
|
ALTER TABLE `vm_forwards`
|
||||||
ADD CONSTRAINT `mbox_delete_forwards` FOREIGN KEY (`mbox_id`) REFERENCES `vm_mboxes` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
|
ADD CONSTRAINT `mbox_delete_forwards` FOREIGN KEY (`mbox`,`domain`) REFERENCES `vm_mboxes` (`mbox`, `domain`) ON DELETE CASCADE ON UPDATE NO ACTION;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Constraints for table `vm_mboxes`
|
-- Constraints for table `vm_mboxes`
|
||||||
--
|
--
|
||||||
ALTER TABLE `vm_mboxes`
|
ALTER TABLE `vm_mboxes`
|
||||||
ADD CONSTRAINT `domain_delete_mboxes` FOREIGN KEY (`domain_id`) REFERENCES `vm_domains` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
|
ADD CONSTRAINT `domain_delete_mboxes` FOREIGN KEY (`domain`) REFERENCES `vm_domains` (`domain`) ON DELETE CASCADE ON UPDATE NO ACTION;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user