Страница 1 из 1

Amavisd-New.Использованием хешей из внешнего файла

Добавлено: 2018-11-30 12:48:16
Amaka
В Amavisd-new активно используются хеши. Стандартно предлагается описывать все хеши в конфиг файле. Вот пример нескольких строк конфига:

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

   
{ # a hash-type lookup table (associative array)
     'promoconcert.es'                        => -3.0,
     'nobody@cert.org'                        => -3.0,
     'cert-advisory@us-cert.gov'              => -3.0,
}
Это хорошо для простых конфигураций.
Но меня несколько сложнее. Поэтому стараюсь перенести все хеши во внешние файлы. Вот пример успешно перенесенного хеша:

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

# Хеши по отдельным адресам с начислением баллов
# Все хеши(адрес-баллы) перечислены в файле:
 read_hash("/var/amavis/sender_scores_sitewide");
Где содержимое файла "/var/amavis/sender_scores_sitewide" такое:

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

mailma.vedomosti.ru            -5.0
rostelecom.ru                   -3.0
info@aeroexpress.ru             -10.0
Следую этой логике я решил перенести в файл хеш с репутициями DKIM подписей.
Вот так было и работало:

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

# $reputation_factor = 0.2;
# Репутация для некоторых подписей DKIM
# default => @signer_reputation_maps = ();
@signer_reputation_maps = ( {
  'ebay.ca'                  =>  -9.57,
  'ebay.de'                  =>  -3.38,
  'ebay.fr'                  => -10.95,
   'emailro.club'       => 50.0,
} );
Перенес хеш в файл "/var/amavis/dkim_signer_reputation",
и перестало работать:

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

@signer_reputation_maps = ( {
  'ebay.ca'                  =>  -9.57,
  'ebay.de'                  =>  -3.38,
  'ebay.fr'                  => -10.95,
#   'emailro.club'       => 50.0,
  read_hash("/var/amavis/dkim_signer_reputation"),
} );
Репутация подписи для домена 'emailro.club' не срабатывает. В чем причина?
Как после изменения провести проверку значений, которые получили массивы и хеши?
Режим amavisd debug не показывает.

Amavisd-New.Использованием хешей из внешнего файла

Добавлено: 2018-12-05 12:08:46
Amaka
Похоже, что amavisd-new уже никто не интересует. Возможно им перестали пользоваться.
Я все-таки сумел побороть мою проблему. Не могу судить правильный ли у меня был подход к решению проблемы,
но вдруг кому-то понадобиться решать что-от подобное.

Вот что я сделал.
1. Я решил, что по стилю файл конфигурации amavisd.conf это перловый файл. Только расширние у него не .pl или .pm.
Соответственно в этом файле я попробовал вставить перловые инструкции:

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

use Data::Dumper;
print Dumper(@signer_reputation_maps);
2. Потом проверил корректность файла amavisd.conf запустив режим debug:

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

amavisd debug
Ошибок компиляции не было. Вставленные инструкции работали. В результате отладочной информации на экране будет содержимое массива @signer_reputation_maps.
Получается, так я могу смотреть любой массив из конфига перед принятием его в работу.

3. В результате у меня рабочий вариант конфига такой:

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

############# @signer_reputation_maps #####################
# Репутация для некоторых подписей DKIM (AM.DKIM_REPUT)
# default => $reputation_factor = 0.2;
# default => @signer_reputation_maps = ();

# Чтение хеша %dkim_signer_reputation из файла 
my %dkim_signer_reputation;
read_hash(\%dkim_signer_reputation, "/var/amavis/dkim_signer_reputation");
####для проверки данных -> ### use Data::Dumper;
####для проверки данных -> ### print Dumper(%dkim_signer_reputation);

@signer_reputation_maps = ( {
  'ebay.ca'                  =>  -9.57,
  'ebay.de'                  =>  -3.38,
  'ebay.fr'                  => -10.95,
   %dkim_signer_reputation,
} );
####для проверки данных -> ### print Dumper(@signer_reputation_maps);
############# @signer_reputation_maps #####################
Содержимое файла с репутациями подписей (/var/amavis/dkim_signer_reputation) такое:

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

emailro.club   50.0
mail.ru		-20.0
Все.