Еще раз про auto_whitelist (в полезных скриптах)

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
DeVeO
ефрейтор
Сообщения: 68
Зарегистрирован: 2006-09-25 12:53:38

Еще раз про auto_whitelist (в полезных скриптах)

Непрочитанное сообщение DeVeO » 2008-12-03 12:25:46

Добрый день. Введена система auto_whitelist (dikens3-полезные скрипты). Введена без изменений (т.е. как в полезных скриптах). Все работает хорошо. Но время от времени в логах появляются записи типа

Код: Выделить всё

Warning: ACL "warn" statement skipped: condition test deferred: MYSQL: query failed: Duplicate entry 'box@moi_domen.ru-box1@domen.com' for key 1
Не могу понять с чем это связано. Версия mysql

Код: Выделить всё

mysql-client-5.0.27 Multithreaded SQL database (client)
mysql-server-5.0.27 Multithreaded SQL database (server)
Может кто поможет советом.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

strmaks
рядовой
Сообщения: 47
Зарегистрирован: 2008-04-23 15:58:59
Откуда: Minsk

Re: Еще раз про auto_whitelist (в полезных скриптах)

Непрочитанное сообщение strmaks » 2008-12-03 12:46:19

Ну, на лицо ошибка по пересечению первичного ключа, как вариант, замени команду INSERT на REPLACE должно избавить от подобных нюансов.
Не спрашивайте, по ком гудит трансформатор, он гудит сам по себе...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Еще раз про auto_whitelist (в полезных скриптах)

Непрочитанное сообщение Alex Keda » 2008-12-03 13:15:49

адресс транный - не находите?
=======
а вообще - там где пересечения должны быть - там прописано - он дупликате кей упдате....
======
или это не мои вайт-листы? =)
Убей их всех! Бог потом рассортирует...

DeVeO
ефрейтор
Сообщения: 68
Зарегистрирован: 2006-09-25 12:53:38

Re: Еще раз про auto_whitelist (в полезных скриптах)

Непрочитанное сообщение DeVeO » 2008-12-03 13:21:55

Насчет адреса - это я переписал (чтоб в форумах реальные адреса не светить). А белые листы - по dikens3 (первый скрипт в полезных скриптах). Вроде там пересечений не должно быть. Сейчас посмотрю ваши.

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Еще раз про auto_whitelist (в полезных скриптах)

Непрочитанное сообщение dikens3 » 2008-12-03 14:29:08

У меня такого не выдавало пока ещё.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

DeVeO
ефрейтор
Сообщения: 68
Зарегистрирован: 2006-09-25 12:53:38

Re: Еще раз про auto_whitelist (в полезных скриптах)

Непрочитанное сообщение DeVeO » 2008-12-03 14:53:41

Прошу прощения - соврал-я все-таки немного подрихтовал конфиг dikens3. Наверное дело в этом. А рихтовал-потому что у меня пользователи локальной сети шлют почту без аутентификации. Соответственно, надо было отделить исходящие письма от своих пользователей не на свои домены. Ниже привожу этот кусок конфига.

Код: Выделить всё

# Закинем в переменные акла наличие в белых списках домена получателя, локальную часть получателя,
  # доменную часть получателя
  warn    set acl_m10 = ${lookup mysql{MYSQL_DOMAINS}}
             set acl_m11 = $local_part
             set acl_m12 = $domain 
         
# Для наших пользователей записываем наш $sender_address и адрес получателя($local_part@$domain).
# Существуют записи для данной пары src-dst email? Если нет, вернёт 0.
warn
        hosts         = +relay_from_hosts
        condition     = ${if and {{eq{$acl_m10}{}}{match_domain{$sender_address_domain}{$qualify_domain}} \
                                                  {match_ip{$sender_host_address}{127.0.0.0/8:192.168.0.0/24}}}{yes}{no}}       
        set acl_m19   = ${lookup mysql{MYSQL_TESTMYLIST}{$value}{0}}
        logwrite      = "acl_m10=$acl_m10"  
        logwrite      = "acl_m19=$acl_m19 (0-not exist)"  
        logwrite      = "sender_address_domain local?=${if match_domain{$sender_address_domain}{$qualify_domain}{yes}{no}}"  
        logwrite      = "sender_address_ip local?=${if match_ip{$sender_host_address}{127.0.0.0/8:192.168.0.0/24}{yes}{no}}"  
        logwrite      = "sender_address_domain=$sender_address_domain"
        logwrite      = "sender_address_ip=$sender_host_address"
                    
# Если существует, изменяем поле record_expire
warn
        hosts         = +relay_from_hosts
        condition     = ${if and {{eq{$acl_m10}{}}{!eq{$acl_m19}{0}}{match_domain{$sender_address_domain}{$qualify_domain}} \
                                 {match_ip{$sender_host_address}{127.0.0.0/8:192.168.0.0/24}}}{yes}{no}}
        set acl_m19   = ${lookup mysql{MYSQL_UPDATEMYLIST}}
        logwrite      = "update record expire=now"
        
# Если не существует такой записи, добавляем в базу.
warn
        hosts         = +relay_from_hosts
        condition     = ${if and {{eq{$acl_m10}{}}{eq{$acl_m19}{0}}{match_domain{$sender_address_domain}{$qualify_domain}} \
                                 {match_ip{$sender_host_address}{127.0.0.0/8:192.168.0.0/24}}}{yes}{no}}
        set acl_m19   = ${lookup mysql{MYSQL_MYLIST}}
        logwrite      = "new record expire=now"  


Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Еще раз про auto_whitelist (в полезных скриптах)

Непрочитанное сообщение dikens3 » 2008-12-03 15:07:48

Ну почитай полезные скрипты, там есть отладка. Подставь свои данные (которые ошибку выдают) и смотри логи.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.


DeVeO
ефрейтор
Сообщения: 68
Зарегистрирован: 2006-09-25 12:53:38

Re: Еще раз про auto_whitelist (в полезных скриптах)

Непрочитанное сообщение DeVeO » 2008-12-03 16:32:51

У меня еще вопрос (прежде всего к dikens3-как автору конфига autowhite_list). Что если вставлять записи в таблицу mylist одним запросом (с IGNORE и ON DUPLICATE KEY UPDATE)? Например вот так

Код: Выделить всё

INSERT IGNORE INTO mylist(src_email,dst_email,record_expires) VALUES ('$sender_address','$acl_m11@$acl_m12',DATE_ADD(now(), INTERVAL 30 DAY)) ON DUPLICATE KEY UPDATE record_expires=DATE_ADD(now(), INTERVAL 30 DAY))
Вот описания опций
#
If you use the IGNORE keyword, errors that occur while executing the INSERT statement are treated as warnings instead. For example, without IGNORE, a row that duplicates an existing UNIQUE index or PRIMARY KEY value in the table causes a duplicate-key error and the statement is aborted. With IGNORE, the row still is not inserted, but no error is issued. Data conversions that would trigger errors abort the statement if IGNORE is not specified. With IGNORE, invalid values are adjusted to the closest values and inserted; warnings are produced but the statement does not abort. You can determine with the mysql_info() C API function how many rows were actually inserted into the table.
#
If you specify ON DUPLICATE KEY UPDATE, and a row is inserted that would cause a duplicate value in a UNIQUE index or PRIMARY KEY, an UPDATE of the old row is performed. The affected-rows value per row is 1 if the row is inserted as a new row and 2 if an existing row is updated. See Section 12.2.5.3, “INSERT ... ON DUPLICATE KEY UPDATE Syntax”.
Вроде тогда контроль за пересечением первичного ключа отдается mysql и можно не волноваться что что-то не отработает. Или я не прав?

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Еще раз про auto_whitelist (в полезных скриптах)

Непрочитанное сообщение dikens3 » 2008-12-03 16:39:57

Зачем делать то, что уже сделано?

Если запись уже есть, проще сделать проверку, а есть ли такая запись?
Мне кажется сама проверка не работает.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

DeVeO
ефрейтор
Сообщения: 68
Зарегистрирован: 2006-09-25 12:53:38

Re: Еще раз про auto_whitelist (в полезных скриптах)

Непрочитанное сообщение DeVeO » 2008-12-03 17:10:37

Это понятно... Попробую плотнее заняться отладкой. Мне кажется уже, что проще (да и правильнее) настроить пользователей локалки на пересылку только через аутентификацию. Но просто вариант с ON DUPLICATE KEY UPDATE сократит и упростит код.