#!/bin/sh include(confFEATURES_DIR`/cfhead.m4')dnl include(confM4_DIR`/conf.default')dnl include(confSITE_DIR/`conf')dnl changequote([[, ]]) dnl если используется проверка хоста рилея отправителя в DNSBL ifdef([[confCHECK_RELAY_DNSBL]], [[ifelse(confCHECK_RELAY_DNSBL, [[NO]], [[]], [[ dnl если существует список DNSBL-ей if [ -f confSITE_DIR/dnsbls.list ] ; then dnl конвертируем список DNSBL-ей из файла с набор конструкций DNS_BL в site/conf perl -n -e " unless (/^[\#\r\n]/) { chomp(\$_); (\$list, \$action, \$action_defer, \$msg) = split(/ *: */, \$_); \$list =~ s/\s+\$//; print(\"DNS\".\"_\".\"BL(\`\".\$list.\"', \`\".\$action.\"', \`\".\$action_defer.\"', \`\".\$msg.\"')\n\"); }" < confSITE_DIR/dnsbls.list >> confSITE_DIR/conf dnl удаляем файл со списком DNSBL-ей rm -rf confSITE_DIR/dnsbls.list dnl удаляем временные файлы rm -rf confACLS_DIR/dnsbls.* 2> /dev/null fi ]])]]) dnl удаляем из site/conf строки, содержащие переменную confCHECK_RELAY_DNSBL perl -ni -e "print(\$_) unless (/CHECK_RELAY_DNSBL/)" confSITE_DIR/conf dnl если ипользуется проверка домена отправителя в RFC Ignorant Lists ifdef([[confCHECK_RFC_IGNORANT]], [[ifelse(confCHECK_RFC_IGNORANT, [[NO]], [[]], [[ ifdef([[confCHECK_RFC_IGNORANT_ABUSE]], [[ifelse(confCHECK_RFC_IGNORANT_ABUSE, [[NO]], [[]], [[ echo "RFC_IGNORANT""_LIST(\`abuse.rfc-ignorant.org', \`confCHECK_RFC_IGNORANT_ABUSE', \`pass', \`MX of domain does not have a working abuse address')" >> confSITE_DIR/conf ]])]]) ifdef([[confCHECK_RFC_IGNORANT_POSTMASTER]], [[ifelse(confCHECK_RFC_IGNORANT_POSTMASTER, [[NO]], [[]], [[ echo "RFC_IGNORANT""_LIST(\`postmaster.rfc-ignorant.org',\`confCHECK_RFC_IGNORANT_POSTMASTER', \`pass', \`MX of domain does not have a working postmaster address')" >> confSITE_DIR/conf ]])]]) ifdef([[confCHECK_RFC_IGNORANT_DSN]], [[ifelse(confCHECK_RFC_IGNORANT_DSN, [[NO]], [[]], [[ echo "RFC_IGNORANT""_LIST(\`dsn.rfc-ignorant.org', \`confCHECK_RFC_IGNORANT_DSN', \`pass',\`MX of domain do not accept bounces. This violates RFC 821/2505/2821')" >> confSITE_DIR/conf ]])]]) ifdef([[confCHECK_RFC_IGNORANT_BOGUSMX]], [[ifelse(confCHECK_RFC_IGNORANT_BOGUSMX, [[NO]], [[]], [[ echo "RFC_IGNORANT""_LIST(\`bogusmx.rfc-ignorant.org', \`confCHECK_RFC_IGNORANT_BOGUSMX', \`pass', \`')" >> confSITE_DIR/conf ]])]]) dnl удаляем из site/conf строки, содержащие переменные confCHECK_RFC_IGNORANT* perl -ni -e "print(\$_) unless (/CHECK_RFC_IGNORANT/)" confSITE_DIR/conf ]])]]) dnl переименовываем переменную confCHECK_MAIL_BLACKLIST в confCHECK_MAIL_ACCESS, dnl значение YES заменяем на значение REJECT perl -pi -e "s/(CHECK_MAIL_BLACKLIST.+)YES/\${1}REJECT/i;s/CHECK_MAIL_BLACKLIST/CHECK_MAIL_ACCESS/" confSITE_DIR/conf dnl если использовалась переменная confCHECK_HELO_DIALUP, добавляем содержимое файла access-relay-dialup dnl в конец файла access-helo с действием, указанным в confCHECK_HELO_DIALUP, и умолчательным сообщением об ошибке ifdef([[confCHECK_HELO_DIALUP]], [[ifelse(confCHECK_HELO_DIALUP, [[NO]], [[]], [[ if [ -f confCONFIGURE_DIR/access-relay-dialup ] ; then ( \ echo "" ; echo "##########" ; echo "" ; \ cat confCONFIGURE_DIR/access-relay-dialup \ ) | perl -p -e " unless (/^[\x23\r\n]/) { chomp(\$_); (\$key, \$action, \$msg) = split(/\s*:\s*/); \$action = lc(\"confCHECK_HELO_DIALUP\") unless (\$action); unless (\$msg) { \$msg = \"Access from dial-up\/dsl\/cable relays denied according to the local policy.\\\nUse mail server of your ISP : dial-up\/dsl\/cable HELO used\"; } if (\$action !~ /(ok|accept)/i) { s/^(.+)\$/\$key\t\t: \$action : \$msg\n/; } else { \$_ .= \"\n\"; } } " >> confCONFIGURE_DIR/access-helo fi ]])]]) perl -ni -e "print(\$_) unless (/CHECK_HELO_DIALUP/)" confSITE_DIR/conf dnl переименовываем переменную confCHECK_HELO_BLACKLIST в confCHECK_HELO_ACCESS, dnl значение YES заменяем на значение REJECT perl -pi -e "s/(CHECK_HELO_BLACKLIST.+)YES/\${1}REJECT/i;s/CHECK_HELO_BLACKLIST/CHECK_HELO_ACCESS/" confSITE_DIR/conf if [ -f confCONFIGURE_DIR/access-relay-host ] ; then cat confCONFIGURE_DIR/access-relay-host | perl -p -e "s/\|/ : /" > confCONFIGURE_DIR/access-relay rm -rf confCONFIGURE_DIR/access-relay-host fi dnl если использовалась переменная confCHECK_RELAY_DIALUP, добавляем содержимое файла access-relay-dialup dnl в конец файла access-relay с действием, указанным в confCHECK_RELAY_DIALUP, и умолчательным сообщением об ошибке ifdef([[confCHECK_RELAY_DIALUP]], [[ifelse(confCHECK_RELAY_DIALUP, [[NO]], [[]], [[ if [ -f confCONFIGURE_DIR/access-relay-dialup ] ; then ( \ echo "" ; echo "##########" ; echo "" ; \ cat confCONFIGURE_DIR/access-relay-dialup \ ) | perl -p -e " unless (/^[\x23\r\n]/) { chomp(\$_); (\$key, \$action, \$msg) = split(/\s*:\s*/); \$action = lc(\"confCHECK_RELAY_DIALUP\") unless (\$action); unless (\$msg) { \$msg = \"Access from dial-up\/dsl\/cable relays denied according to the local policy.\\\nUse mail server of your ISP : Access from dial-up\/dsl\/cable relays denied\"; if (\$key =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s+\$/) { \$msg .= \" (A record)\"; } else { \$msg .= \" (PTR record)\"; } } if (\$action !~ /(ok|accept)/i) { s/^(.+)\$/\$key\t\t: \$action : \$msg\n/; } else { \$_ .= \"\n\"; } } " >> confCONFIGURE_DIR/access-relay fi if [ -f confCONFIGURE_DIR/access-relay-dialup-addr ] ; then mv -f confCONFIGURE_DIR/access-relay-dialup-addr confCONFIGURE_DIR/access-relay-dialup else echo -n > confCONFIGURE_DIR/access-relay-dialup fi ]])]]) if [ -f confCONFIGURE_DIR/access-relay-addr ] ; then mv -f confCONFIGURE_DIR/access-relay-addr confCONFIGURE_DIR/access-relay-blacklist fi dnl переименовываем переменную confCHECK_RELAY_BLACKLIST в confCHECK_RELAY_ACCESS, dnl значение YES заменяем на значение REJECT perl -pi -e "s/(CHECK_RELAY_BLACKLIST.+)YES/\${1}REJECT/i;s/CHECK_RELAY_BLACKLIST/CHECK_RELAY_ACCESS/" confSITE_DIR/conf ifdef([[confWHITE_LIST_RELAYS]], [[ifelse(confWHITE_LIST_RELAYS, [[NO]], [[]], [[ hosts_whitelist=`echo confWHITE_LIST_RELAYS | perl -p -e s/CONFDIR/confCONFIGURE_DIR/` if [ -f ${hosts_whitelist} ] ; then if [ ! -f confCONFIGURE_DIR/hosts-whitelist ] ; then mv ${hosts_whitelist} confCONFIGURE_DIR/hosts-whitelist fi fi perl -pi -e "s/^(dn.{0}l\s*)?(.+conf.?WHITE_LIST_RELAYS).+(dn.{0}l)?\$/\${1}\${2}',\t\t\`YES'\)\${3}/ unless (/WHITE_LIST_RELAYS.+NO/)" confSITE_DIR/conf ]])]]) if [ -f confCONFIGURE_DIR/addresses_incoming_only ] ; then mv -f confCONFIGURE_DIR/addresses_incoming_only confCONFIGURE_DIR/recipients_incoming_only fi ifdef([[confCHECK_DIGITS]], [[ifelse(confCHECK_DIGITS, [[NO]], [[]], [[ ( \ echo "" ; \ echo "\N^(.*\d){eval(confMAX_DIGITS_SENDER_HOSTNAME+1),}\N : confCHECK_DIGITS : There are too many digits in sender hostname" echo "\N^([^\.]*\d){eval(confMAX_DIGITS_SENDER_SUBHOSTNAME+1),}\N : confCHECK_DIGITS : There are too many digits at the beginning of sender hostname" ) >> confCONFIGURE_DIR/access-relay ( \ echo "" ; \ echo "\N^.+\@(.*\d){eval(confMAX_DIGITS_SENDER_ADDRESS_DOMAIN+1),}\N : confCHECK_DIGITS : There are too many digits in sender address domain" echo "\N^.+\@([^\@]*\d){eval(confMAX_DIGITS_SENDER_ADDRESS_SUBDOMAIN+1),}\N : confCHECK_DIGITS : There are too many digits at the beginning of sender address domain" ) >> confCONFIGURE_DIR/access-mail ( \ echo "" ; \ echo "\N^(.*\d){eval(confMAX_DIGITS_SENDER_HELO+1),}\N : confCHECK_DIGITS : There are too many digits in sender helo" echo "\N^([^\.]*\d){eval(confMAX_DIGITS_SENDER_SUBHELO+1),}\N : confCHECK_DIGITS : There are too many digits at the beginning of sender helo" ) >> confCONFIGURE_DIR/access-helo perl -ni -e "print(\$_) unless (/CHECK_DIGITS/)" confSITE_DIR/conf perl -ni -e "print(\$_) unless (/MAX_DIGITS/)" confSITE_DIR/conf ]])]]) perl -pi -e "s/4\.60/4.61/" confM4_DIR/Makefile if [ -f confCONFIGURE_DIR/access-spf ] ; then if [ -f confCONFIGURE_DIR/access-spf.tmp ] ; then rm -rf confCONFIGURE_DIR/access-spf.tmp fi perl -n -e "if (s/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s*:\s*skip\$/ : \$1/) { chomp(\$_); print \$_ }" confCONFIGURE_DIR/access-spf >> confCONFIGURE_DIR/access-spf.tmp perl -ni -e "unless (/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s*:\s*skip\$/) { print \$_ }" confCONFIGURE_DIR/access-spf if [ ! -z "`cat confCONFIGURE_DIR/access-spf.tmp`" ] ; then ( \ echo "" ; \ echo -n "*|skip" ; \ cat confCONFIGURE_DIR/access-spf.tmp ; \ echo "" \ ) >> confCONFIGURE_DIR/access-spf fi rm -rf confCONFIGURE_DIR/access-spf.tmp fi changequote