diff --git a/cron/purge.sh b/cron/purge.sh new file mode 100755 index 0000000..6f06586 --- /dev/null +++ b/cron/purge.sh @@ -0,0 +1,18 @@ +#!/bin/bash +#Gnieark https://blog-du-grouik.tinad.fr 2017 +#GNU GPL V2 license +#inactivate alias olders than on +MYSQLPATH="/usr/bin/mysql" +MYSQLDB="postfix" +MYSQLUSER="postfix" +MYSQLPWD="******" +TTL="3600" + +$MYSQLPATH -u $MYSQLDB -p$MYSQLPWD << EOF + UPDATE alias + SET active='0' + WHERE DOMAIN='tinad.fr' + AND active = '1' + AND created < (UNIX_TIMESTAMP() - $TTL) + AND temporary='1'; +EOF diff --git a/execute/genalias.sh b/execute/genalias.sh new file mode 100755 index 0000000..5fa7293 --- /dev/null +++ b/execute/genalias.sh @@ -0,0 +1,73 @@ +#!/bin/bash +#Gnieark https://blog-du-grouik.tinad.fr 2017 +#GNU GPL V2 license +# +#This script generate the random alias: Create it on postfix bdd +# +#First and only param is the mail "GOTO" + + +if [ -z "$1" ] + then + echo "Error, argument missing. usage: $0 mail@domaine.com" + exit 2 +fi + +MYSQLPATH="/usr/bin/mysql" +MYSQLDB="postfix" +MYSQLUSER="postfix" +MYSQLPWD="******" +OPENSSLPATH="/usr/bin/openssl" +DOMAIN="tinad.fr" +LOGGERPATH="/usr/bin/logger" +#escape mail: +printf -v MAIL "%q" "$1" + +#Check if the sender is already knowed on the database +EXISTS=`$MYSQLPATH -B -u $MYSQLUSER -p$MYSQLPWD -D $MYSQLDB --disable-column-names -e "SELECT count(*) FROM alias WHERE goto='$MAIL'"` + +if [ $EXISTS -eq 0 ]; then + #unknowed user ************************************************* + #Generate random string for the alias. If already exists, retry. + COUNT=1 + while [ $COUNT -gt 0 ]; do + #gererate random + RD=$($OPENSSLPATH rand -base64 8) + #Delete = char at the end of string + PART=${RD::-1} + COUNT=`$MYSQLPATH -B -u $MYSQLUSER -p$MYSQLPWD -D $MYSQLDB --disable-column-names -e "SELECT count(*) FROM alias WHERE address='$PART@$DOMAIN'"` + done + ALIASFULL=$PART@$DOMAIN + +#Feed the database +$MYSQLPATH -u $MYSQLUSER -p$MYSQLPWD $MYSQLDB << EOF + INSERT INTO alias(address,goto,domain,created,modified,active,temporary) VALUES + ('$PART@$DOMAIN', + '$MAIL', + '$DOMAIN', + NOW(), + NOW(), + '1', + '1' + ); +EOF + +else +#user is already knowed, simply reactivate his alias************ +$MYSQLPATH -u $MYSQLUSER -p$MYSQLPWD $MYSQLDB << EOF + UPDATE alias SET + modified=NOW(), + active='1' + WHERE goto='$MAIL' + AND temporary='1'; +EOF +#get his alias +ALIASFULL=`$MYSQLPATH -B -u $MYSQLUSER -p$MYSQLPWD -D $MYSQLDB --disable-column-names -e "SELECT address FROM alias WHERE goto='$MAIL'"` + +fi + +printf "Hi, Your requested alias is $ALIASFULL, You will receive all mails sending to this alias during one hour from now. Thanks for using this service." + +$LOGGERPATH -i -p genalias.info "Activate alias $ALIASFULL FOR $MAIL" +exit 0 + diff --git a/global.sieve b/global.sieve new file mode 100644 index 0000000..b645b7c --- /dev/null +++ b/global.sieve @@ -0,0 +1,14 @@ +require ["vnd.dovecot.execute","variables","fileinto", "envelope", "subaddress","vacation","vacation-seconds"]; +if envelope :detail "to" "spam"{ + fileinto "Spam"; +} +if header :contains ["to", "cc"] + [ + "alias@tinad.fr" + ]{ + if address :matches "from" "*" { set "from" "${1}"; } + if execute :output "response" "genalias.sh" [ "${from}" ]{ + vacation :seconds 1801 "${response}"; + } +} +