dnl dnl Таблица виртуальных пользователей dnl dnl пример: dnl user1@domain1: user2@domain2 dnl user1@domain1: %1@domain2 dnl @domain1: %1@domain2 dnl @domain1: user2@domain2 dnl user1@domain1: defer: error message dnl user1@domain1: deny: error message dnl user1@domain1: reject: error message dnl ifelse(SECTION, `MAIN', `dnl ifdef(`confVIRTUSERTABLE', `ifelse(confVIRTUSERTABLE, `DOMAINS_FILES', `dnl', `dnl ifdef(`confVIRTUSERTABLE', `ifelse(confVIRTUSERTABLE, `DOMAINS_DBM', `dnl', `dnl domainlist virtuser_domains = lsearch;CONFDIR/domains-virtuser define(`confVIRTUSERTABLE_DOMAINS_LISTS', `: +local_domains')dnl ifdef(`confSECONDARY_RELAY', `ifelse(confSECONDARY_RELAY, `NO', `dnl', `dnl define(`confVIRTUSERTABLE_DOMAINS_LISTS', confVIRTUSERTABLE_DOMAINS_LISTS` : +relay_to_domains')dnl ')') ')') ')') ') dnl ifelse(SECTION, `ACL_CHECK_RCPT', `dnl # Поиск адреса получетеля в virtusertable warn set acl_m0 = dnl ifelse_strstr(confVIRTUSERTABLE, `DOMAINS_FILES', `dnl warn condition = ${if eq{$acl_m0}{}{yes}{no}} condition = ${if exists{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable}} set acl_m0 = ${sg{\ ${lookup{$local_part}wildlsearch{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable}\ {$value}{\ ${lookup{@}wildlsearch{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable}{$value}{}}\ }}\ }{\N%1\N}{$local_part}} ') dnl ifelse_strstr(confVIRTUSERTABLE, `DOMAINS_DBM', `dnl warn condition = ${if eq{$acl_m0}{}{yes}{no}} condition = ${if exists{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable.db}} set acl_m0 = ${sg{\ ${lookup{$local_part}dbm{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable.db}\ {$value}{\ ${lookup{@}dbm{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable.db}{$value}{}}\ }}\ }{\N%1\N}{$local_part}} ') dnl ifelse_strstr(confVIRTUSERTABLE, `SINGLE_FILE', `dnl warn condition = ${if eq{$acl_m0}{}{yes}{no}} domains = +virtuser_domains confVIRTUSERTABLE_DOMAINS_LISTS set acl_m0 = ${lookup{$local_part@$domain}wildlsearch{CONFDIR/virtusertable}{\ ${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}\ }{\ ${lookup{@$domain}wildlsearch{CONFDIR/virtusertable}{\ ${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}\ }{}}\ }} ') dnl ifelse_strstr(confVIRTUSERTABLE, `SINGLE_DBM', `dnl warn condition = ${if eq{$acl_m0}{}{yes}{no}} domains = +virtuser_domains confVIRTUSERTABLE_DOMAINS_LISTS set acl_m0 = ${lookup{$local_part@$domain}dbm{confVIRTUSERTABLE_SINGLE.db}{\ ${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}\ }{\ ${lookup{@$domain}dbm{confVIRTUSERTABLE_SINGLE.db}{\ ${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}\ }{}}\ }} ') dnl ifelse_strstr(confVIRTUSERTABLE, `MYSQL', `dnl warn condition = ${if eq{$acl_m0}{}{yes}{no}} domains = +virtuser_domains confVIRTUSERTABLE_DOMAINS_LISTS set acl_m0 = ${sg{\ ${lookup mysql{\ confVIRTUSERTABLE_MYSQL\ }{$value}{\ ${lookup mysql{\ confVIRTUSERTABLE_DOMAIN_MYSQL\ }{$value}{}}\ }}\ }{\N%1\N}{$local_part}} ') dnl ifelse_strstr(confVIRTUSERTABLE, `SQLITE', `dnl warn condition = ${if eq{$acl_m0}{}{yes}{no}} domains = +virtuser_domains confVIRTUSERTABLE_DOMAINS_LISTS set acl_m0 = ${sg{\ ${lookup sqlite{confSQLITE \ confVIRTUSERTABLE_SQLITE\ }{$value}{\ ${lookup sqlite{confSQLITE \ confVIRTUSERTABLE_DOMAIN_SQLITE\ }{$value}{}}\ }}\ }{\N%1\N}{$local_part}} ') deny condition = ${if match{$acl_m0}{\N(?i)^\s*(deny|reject)\s*:(.+)$\N}{yes}{no}} message = ${if match{$acl_m0}{\N(?i)^\s*(deny|reject)\s*:(.+)$\N}{$2}{}} defer condition = ${if match{$acl_m0}{\N(?i)^\s*defer\s*:(.+)$\N}{yes}{no}} message = ${if match{$acl_m0}{\N(?i)^\s*defer\s*:(.+)$\N}{$1}{}} ') ifelse(SECTION, `ROUTERS', `dnl ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', ` ifdef(`confVIRTUSERTABLE_SKIP_QUARANTINED', `ifelse(confVIRTUSERTABLE_SKIP_QUARANTINED, `YES', `dnl virtusertable_skip_quarantined: driver = accept transport = fake_transport domains = +virtuser_domains confVIRTUSERTABLE_DOMAINS_LISTS ## condition = ${if eq{$acl_m_quarantined}{}{no}{yes}} # condition = ${if IS_NOT_QUARANTINED{no}{yes}} condition = ${if or{\ {IS_NOT_QUARANTINED}\ ifelse_strstr(confVIRTUSERTABLE, `DOMAINS_FILES', `dnl {match\ {${lookup{$local_part}wildlsearch{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable}\ {$value}{\ ${lookup{@}wildlsearch{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable}{$value}{no}}\ }}}\ {\N(?i)^\s*(no|(warn|reject|deny|defer)\S*:)\N}\ }\ ')dnl ifelse_strstr(confVIRTUSERTABLE, `DOMAINS_FILES', `') ifelse_strstr(confVIRTUSERTABLE, `DOMAINS_DBM', `dnl {match\ {${lookup{$local_part}dbm{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable.db}\ {$value}{\ ${lookup{@}dbm{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable.db}{$value}{no}}\ }}}\ {\N(?i)^\s*(no|(warn|reject|deny|defer)\S*:)\N}\ }\ ')dnl ifelse_strstr(confVIRTUSERTABLE, `DOMAINS_DBM', `') ifelse_strstr(confVIRTUSERTABLE, `SINGLE_FILE', `dnl {match\ {${lookup{$local_part@$domain}wildlsearch{confVIRTUSERTABLE_SINGLE}\ {$value}{\ ${lookup{@$domain}wildlsearch{confVIRTUSERTABLE_SINGLE}{$value}{no}}\ }}}\ {\N(?i)^\s*(no|(warn|reject|deny|defer)\S*:)\N}\ }\ ')dnl ifelse_strstr(confVIRTUSERTABLE, `SINGLE_FILE', `') ifelse_strstr(confVIRTUSERTABLE, `SINGLE_DBM', `dnl {match\ {${lookup{$local_part@$domain}dbm{confVIRTUSERTABLE_SINGLE.db}\ {$value}{\ ${lookup{@$domain}dbm{confVIRTUSERTABLE_SINGLE.db}{$value}{no}}\ }}}\ {\N(?i)^\s*(no|(warn|reject|deny|defer)\S*:)\N}\ }\ ')dnl ifelse_strstr(confVIRTUSERTABLE, `SINGLE_DBM', `') ifelse_strstr(confVIRTUSERTABLE, `MYSQL', `dnl {match\ {${lookup mysql{\ confVIRTUSERTABLE_MYSQL\ }\ {$value}{\ ${lookup mysql{\ confVIRTUSERTABLE_DOMAIN_MYSQL\ }{$value}{no}}\ }}}\ {\N(?i)^\s*(no|(warn|reject|deny|defer)\S*:)\N}\ }\ ')dnl ifelse_strstr(confVIRTUSERTABLE, `MYSQL', `') ifelse_strstr(confVIRTUSERTABLE, `SQLITE', `dnl {match\ {${lookup sqlite{confSQLITE \ confVIRTUSERTABLE_SQLITE\ }\ {$value}{\ ${lookup sqlite{confSQLITE \ confVIRTUSERTABLE_DOMAIN_SQLITE\ }{$value}{no}}\ }}}\ {\N(?i)^\s*(no|(warn|reject|deny|defer)\S*:)\N}\ }\ ')dnl ifelse_strstr(confVIRTUSERTABLE, `SQLITE', `') }{no}{yes}} no_more ')') dnl ifdef(`confVIRTUSERTABLE_SKIP_QUARANTINED', `ifelse(confVIRTUSERTABLE_SKIP_QUARANTINED, `YES', `')') ')dnl ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', `') ifelse_strstr(confVIRTUSERTABLE, `DOMAINS_FILES', `dnl virtusertable_perdomain: driver = redirect require_files = confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable condition = ${if match\ {${lookup{$local_part}wildlsearch{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable}\ {$value}{\ ${lookup{@}wildlsearch{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable}{$value}{no}}\ }}}\ {\N(?i)^\s*(no|(warn|reject|deny|defer)\S*:)\N}{no}{yes}} data = ${sg{\ ${lookup{$local_part}wildlsearch{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable}\ {$value}{\ ${lookup{@}wildlsearch{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable}{$value}{}}\ }}\ }{\N%1\N}{$local_part}} no_more ')dnl ifelse_strstr(confVIRTUSERTABLE, `DOMAINS_FILES', `') dnl ifelse_strstr(confVIRTUSERTABLE, `DOMAINS_DBM', `dnl virtusertable_domain: driver = redirect require_files = confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable.db condition = ${if match\ {${lookup{$local_part}dbm{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable.db}\ {$value}{\ ${lookup{@}dbm{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable.db}{$value}{no}}\ }}}\ {\N(?i)^\s*(no|(warn|reject|deny|defer)\S*:)\N}{no}{yes}} data = ${sg{\ ${lookup{$local_part}dbm{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable.db}\ {$value}{\ ${lookup{@}dbm{confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/virtusertable.db}{$value}{}}\ }}\ }{\N%1\N}{$local_part}} no_more ')dnl ifelse_strstr(confVIRTUSERTABLE, `DOMAINS_DBM', `') dnl ifelse_strstr(confVIRTUSERTABLE, `SINGLE_FILE', `dnl virtusertable: driver = redirect domains = +virtuser_domains confVIRTUSERTABLE_DOMAINS_LISTS condition = ${if match\ {${lookup{$local_part@$domain}wildlsearch{confVIRTUSERTABLE_SINGLE}\ {$value}{\ ${lookup{@$domain}wildlsearch{confVIRTUSERTABLE_SINGLE}{$value}{no}}\ }}}\ {\N(?i)^\s*(no|(warn|reject|deny|defer)\S*:)\N}{no}{yes}} data = ${sg{\ ${lookup{$local_part@$domain}wildlsearch{confVIRTUSERTABLE_SINGLE}{\ ${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}\ }{\ ${lookup{@$domain}wildlsearch{confVIRTUSERTABLE_SINGLE}{\ ${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}\ }{}}\ }}\ }{\N%1\N}{$local_part}} no_more ')dnl ifelse_strstr(confVIRTUSERTABLE, `SINGLE_FILE', `') dnl ifelse_strstr(confVIRTUSERTABLE, `SINGLE_DBM', `dnl virtusertable: driver = redirect domains = +virtuser_domains confVIRTUSERTABLE_DOMAINS_LISTS condition = ${if match\ {${lookup{$local_part@$domain}dbm{confVIRTUSERTABLE_SINGLE.db}\ {$value}{\ ${lookup{@$domain}dbm{confVIRTUSERTABLE_SINGLE.db}{$value}{no}}\ }}}\ {\N(?i)^\s*(no|(warn|reject|deny|defer)\S*:)\N}{no}{yes}} data = ${sg{\ ${lookup{$local_part@$domain}dbm{confVIRTUSERTABLE_SINGLE.db}{\ ${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}\ }{\ ${lookup{@$domain}dbm{confVIRTUSERTABLE_SINGLE.db}{\ ${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}\ }{}}\ }}\ }{\N%1\N}{$local_part}} no_more ')dnl ifelse_strstr(confVIRTUSERTABLE, `SINGLE_DBM', `') dnl ifelse_strstr(confVIRTUSERTABLE, `MYSQL', `dnl virtusertable_mysql: driver = redirect domains = +virtuser_domains confVIRTUSERTABLE_DOMAINS_LISTS condition = ${if match\ {${lookup mysql{\ confVIRTUSERTABLE_MYSQL\ }\ {$value}{\ ${lookup mysql{\ confVIRTUSERTABLE_DOMAIN_MYSQL\ }{$value}{no}}\ }}}\ {\N(?i)^\s*(no|(warn|reject|deny|defer)\S*:)\N}{no}{yes}} data = ${sg{\ ${lookup mysql{\ confVIRTUSERTABLE_MYSQL\ }{$value}{\ ${lookup mysql{\ confVIRTUSERTABLE_DOMAIN_MYSQL\ }{$value}{}}\ }}\ }{\N%1\N}{$local_part}} no_more ')dnl ifelse_strstr(confVIRTUSERTABLE, `MYSQL', `') dnl ifelse_strstr(confVIRTUSERTABLE, `SQLITE', `dnl virtusertable_sqlite: driver = redirect domains = +virtuser_domains confVIRTUSERTABLE_DOMAINS_LISTS condition = ${if match\ {${lookup sqlite{confSQLITE \ confVIRTUSERTABLE_SQLITE\ }\ {$value}{\ ${lookup sqlite{confSQLITE \ confVIRTUSERTABLE_DOMAIN_SQLITE\ }{$value}{no}}\ }}}\ {\N(?i)^\s*(no|(warn|reject|deny|defer)\S*:)\N}{no}{yes}} data = ${sg{\ ${lookup sqlite{confSQLITE \ confVIRTUSERTABLE_SQLITE\ }{$value}{\ ${lookup sqlite{confSQLITE \ confVIRTUSERTABLE_DOMAIN_SQLITE\ }{$value}{}}\ }}\ }{\N%1\N}{$local_part}} no_more ')dnl ifelse_strstr(confVIRTUSERTABLE, `SQLITE', `') dnl pipe_transport = address_pipe ') dnl ifelse(SECTION, `ROUTERS', `')