dnl dnl проверка наличия угловых скобок в командах MAIL FROM и RCPT TO dnl dnl NO - не проводить проверку dnl REJECT - возврата по умолчанию клиенту кода 5xx dnl DROP - возврат клиенту кода 5xx и обрыв соединения dnl DEFER - возврата по умолчанию клиенту кода 4xx dnl WARN - вывода по умолчанию в лог файл предупреждения dnl PAUSE:XX - пауза XX секунд dnl GREYLIST:XX - добавить XX баллов к счетчику опционального greylisting'а dnl REJECT:XX - добавить XX баллов к счетчику опционального reject'а dnl define(`confCHECK_ANGLE_BRACKETS', `WARN PAUSE=20')dnl dnl dnl действия WARN, PAUSE:XX, GREYLIST:XX, REJECT:XX можно указывать через пробел dnl define(`_CHECK_RELAY_COUNTRY_ACCESS_TMP', `NORMALIZE_ACTION(confCHECK_ANGLE_BRACKETS)')dnl define(`confCHECK_ANGLE_BRACKETS', _CHECK_RELAY_COUNTRY_ACCESS_TMP` ')dnl dnl ifelse(SECTION, `ACL_CHECK_MAIL', ` dnl warn set acl_m_smtp_command_mail_from = $smtp_command dnl ')dnl ifelse(SECTION, `ACL_CHECK_MAIL', `') ifelse(SECTION, `ACL_CHECK_RCPT', ` warn set acl_m0 = hosts = !+relay_from_hosts ! authenticated = * condition = ${if !match {${extract{2}{:}{$acl_m_smtp_command_mail_from}}}{\N^\s*<.*>\N}} # message = $acl_m2 # log_message = $acl_m0 set acl_m2 = Go and read RFC2821. The angle brackets in MAIL FROM command are a requirement set acl_m0 = "$acl_m_smtp_command_mail_from" - MAIL FROM address without angle brackets ifelse_strstr(confCHECK_ANGLE_BRACKETS, `warn', ` warn condition = ${if eq{$acl_m0}{}{no}{yes}} add_header = X-Warn-Mail: $acl_m0 log_message = $acl_m0 ')dnl ifelse_strstr(confCHECK_ANGLE_BRACKETS, `warn', `') ifelse_strstr(confCHECK_ANGLE_BRACKETS, `pause', ` warn condition = ${if eq{$acl_m0}{}{no}{yes}} delay = EXTRACT_NAMED(`pause', confCHECK_ANGLE_BRACKETS)s set acl_m15 = ${acl_m15}\t\ delay=EXTRACT_NAMED(`pause', confCHECK_ANGLE_BRACKETS)s\t\t\ $acl_m0\n ')dnl ifelse_strstr(confCHECK_ANGLE_BRACKETS, `pause', `') ifelse_strstr(confCHECK_ANGLE_BRACKETS, `reject ', ` deny condition = ${if eq{$acl_m0}{}{no}{yes}} message = $acl_m2 log_message = $acl_m0 ')dnl ifelse_strstr(confCHECK_ANGLE_BRACKETS, `reject ', `') ifelse_strstr(confCHECK_ANGLE_BRACKETS, `defer', ` defer condition = ${if eq{$acl_m0}{}{no}{yes}} message = $acl_m2 log_message = $acl_m0 ')dnl ifelse_strstr(confCHECK_ANGLE_BRACKETS, `defer', `') ifelse_strstr(confCHECK_ANGLE_BRACKETS, `drop', ` drop condition = ${if eq{$acl_m0}{}{no}{yes}} message = $acl_m2 log_message = $acl_m0 ')dnl ifelse_strstr(confCHECK_ANGLE_BRACKETS, `drop', `') ifelse(confGREYLIST, `OPTIONAL', ` ifelse_strstr(confCHECK_ANGLE_BRACKETS, `greylist', ` warn condition = ${if eq{$acl_m0}{}{no}{yes}} set acl_c8 = \ scores=${eval:${extract{scores}{$acl_c8}}+EXTRACT_NAMED(`greylist', confCHECK_ANGLE_BRACKETS)} \ log_message="${extract{log_message}{$acl_c8}} $acl_m0;" set acl_m15 = ${acl_m15}\t\ greylist scores=EXTRACT_NAMED(`greylist', confCHECK_ANGLE_BRACKETS)\t\ $acl_m0\n ')dnl ifelse_strstr(confCHECK_ANGLE_BRACKETS, `greylist', `') ')dnl ifelse(confGREYLIST, `OPTIONAL', `') ifdef(`confOPTIONAL_REJECT', `ifelse(confOPTIONAL_REJECT, `NO', `dnl', `dnl ifelse_strstr(confCHECK_ANGLE_BRACKETS, `reject=', ` warn condition = ${if eq{$acl_m0}{}{no}{yes}} set acl_c6 = \ scores=${eval:${extract{scores}{$acl_c6}}+EXTRACT_NAMED(`reject', confCHECK_ANGLE_BRACKETS)} \ log_message="${extract{log_message}{$acl_c6}} $acl_m0;" set acl_m15 = ${acl_m15}\t\ reject scores=EXTRACT_NAMED(`reject', confCHECK_ANGLE_BRACKETS)\t\t\ $acl_m0\n ')dnl ifelse_strstr(confCHECK_ANGLE_BRACKETS, `reject=', `') ')') dnl ifdef(`confOPTIONAL_REJECT', `ifelse(confOPTIONAL_REJECT, `NO', `', `')') ') dnl ifelse(SECTION, `ACL_CHECK_RCPT', `')