Exim. Проблема с обработкой кирилических имён файлов.

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
maxximpossible
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-12 16:39:21
Откуда: Наша RUSSIA
Контактная информация:

Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение maxximpossible » 2008-03-12 16:54:26

Поднял Exim4 + Exchange по мануалу на этом сайте.
Настроен фильтр запрещённых расширений файлов:

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

# Рубаем по расширениям
  deny	message = contains $found_extension file (blacklisted).
  demime = com:vbs:bat:pif:scr:exe:asf:avi:mpg:mp3:mp4:mpeg:wma:mov:vob:mp:msi:swf:wsh:wmv:js:dv:pst

# Архивы кидаем в карантин
  warn	message = contains $found_extension file (blacklisted).
  demime = zip:rar:7z:ace:arj:pps:ppt
  set acl_m16 = 1
Всё работает отлично за исключением одной проблемы.
Проблема:
Если во вложении файл с латинским именем, то всё нормально - ненужное отбивается, архивы уходят в карантин, остальное проходит до получателя.
Всё гуд.
Но, вот если во вложение файл с кириллическим именем, то письма проходят до получателя даже если во вложении лежит запрещённый тип файла.

В чём может быть засада?

Хостинговая компания 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/

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

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение Alex Keda » 2008-03-13 1:17:34

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

maxximpossible
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-12 16:39:21
Откуда: Наша RUSSIA
Контактная информация:

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение maxximpossible » 2008-03-13 12:57:44

Сегодня посмотрел в логах ClamAV.
Если у вложенного файла имя написано латиницой, то Exim извлекает файл в виде <хеш>.<ext>, где ext соответствует действительности.
А вот если имя кириллическое, то ext не совпадает с действительностью.
Например, в случае с RAR-архивами:
При латинском имени извлекался <хеш>.rar
При кириллическом имени извлекался <хеш>.com
Может как-то можно указать Exim'у кодировку.

maxximpossible
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-12 16:39:21
Откуда: Наша RUSSIA
Контактная информация:

Re: Exim. Проблема с обработкой кирилических имён файлов.

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

lissyara писал(а):дебажить...
запустить экземпляр на отдельном порту с дебагом и отправить.
или вечрком когда никого нет.
Сейчас посмотрел на дебаг.
Exim почему-то любые типы файлов с русским именем извлекает как <хеш>.com .
На проверке расширения говорит "condition test failed".
У меня мозг скоро закончится.

cyrus_user
сержант
Сообщения: 181
Зарегистрирован: 2007-04-24 12:16:36

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение cyrus_user » 2008-03-14 7:01:43

maxximpossible писал(а):

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

# Рубаем по расширениям
  deny	message = contains $found_extension file (blacklisted).
  demime = com:vbs:bat:pif:scr:exe:asf:avi:mpg:mp3:mp4:mpeg:wma:mov:vob:mp:msi:swf:wsh:wmv:js:dv:pst

# Архивы кидаем в карантин
  warn	message = contains $found_extension file (blacklisted).
  demime = zip:rar:7z:ace:arj:pps:ppt
  set acl_m16 = 1
В чём может быть засада?
засада в том, что: "demime" is deprecated
используйте нормальный механизм расписанный в 41.4 Scanning MIME parts

maxximpossible
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-12 16:39:21
Откуда: Наша RUSSIA
Контактная информация:

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение maxximpossible » 2008-03-14 11:58:44

cyrus_user писал(а): засада в том, что: "demime" is deprecated
используйте нормальный механизм расписанный в 41.4 Scanning MIME parts
Не получается его вообще заставить работать.
Вот кусок кода:

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

        warn condition	= ${if <{${strlen:$mime_filename}}{1}{yes}{no}}
             logwrite = "In e-mail found file - $mime_filename"
    
        deny message = Blacklisted file extension detected
             condition = \
${ifmatch{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}{1}{0}} 

  
        warn message = Blacklisted file extension detected
     	     condition = ${if match{${lc:$mime_filename}}{\N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N}{1}{0}}
             set acl_m16 = 1
так вот условие проверки длины переменной $mime_filename не срабатывает, т.к. в лог ничё не пишется.
Всё показывает на то, что эта переменная пуста, хотя в разделе 41.4 сказанно что после acl_smtp_mime она должна содержать имя файла во вложении.
Выше преведённый код находится в отдельном файле, а вот указание на него в основном конфиге Exim:

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

acl_smtp_mime:
     .include_if_exists /etc/exim4/includes/450.acl_smtp_mime.conf
Начинаю подумывать о бубне...

maxximpossible
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-12 16:39:21
Откуда: Наша RUSSIA
Контактная информация:

Re: Exim. Проблема с обработкой кирилических имён файлов.

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

Только что определил, что acl_smtp_mime почему-то вообще не срабатывает.

maxximpossible
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-12 16:39:21
Откуда: Наша RUSSIA
Контактная информация:

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение maxximpossible » 2008-03-14 13:58:23

cyrus_user писал(а): засада в том, что: "demime" is deprecated
используйте нормальный механизм расписанный в 41.4 Scanning MIME parts
Короче победил я не "deprecated" метод, описанный в 41.4 - он у меня заработал.
Но результат тот же, что и с "deprecated" demime.
Опять: Если латинское имя - обрабатывется, если кириллическое - игнорирует.

Вот код:

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

# DEBUG START
warn message = "In e-mail found file - $mime_filename"
	condition = ${if <{${strlen:$mime_filename}}{1}{yes}{no}}
	logwrite = "In e-mail found file - $mime_filename"     	

# DEBUG END

	deny message = Blacklisted file extension detected
     	condition = ${if match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}{1}{0}}
И ещё кое что не понимаю:
В дебаговом выражении переменная $mime_filename пуста в обоих случаях.
Вот лог:

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

2008-03-14 13:49:34 1Ja7Tf-0001tD-AP "In e-mail found file - "
2008-03-14 13:49:34 1Ja7Tf-0001tD-AP "In e-mail found file - "
2008-03-14 13:49:34 1Ja7Tf-0001tD-AP "In e-mail found file - "
Не пойму почему три раза выводится строка, но это пока самое меньшее из зол, так что я пока не парюсь с этим.

cyrus_user
сержант
Сообщения: 181
Зарегистрирован: 2007-04-24 12:16:36

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение cyrus_user » 2008-03-14 14:40:34

проверил у себя, работает даже если кириллическое имя файла подавалось в utf-8, cp-1251, koi-r.
вам, как и советовали выше - дебажить и смотреть

maxximpossible
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-12 16:39:21
Откуда: Наша RUSSIA
Контактная информация:

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение maxximpossible » 2008-03-14 15:40:22

cyrus_user писал(а):проверил у себя, работает даже если кириллическое имя файла подавалось в utf-8, cp-1251, koi-r.
вам, как и советовали выше - дебажить и смотреть
Если не трудно, сбросте пожалуйста конфиг.
Дебажить, я дебажил, но от этого не легче.
Там показывается что ACL тест либо провален, либо пройден вот и всё.

cyrus_user
сержант
Сообщения: 181
Зарегистрирован: 2007-04-24 12:16:36

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение cyrus_user » 2008-03-14 15:49:53

maxximpossible писал(а):
cyrus_user писал(а):проверил у себя, работает даже если кириллическое имя файла подавалось в utf-8, cp-1251, koi-r.
вам, как и советовали выше - дебажить и смотреть
Если не трудно, сбросте пожалуйста конфиг.
Дебажить, я дебажил, но от этого не легче.
Там показывается что ACL тест либо провален, либо пройден вот и всё.
я вашим конфигом воспользовался :)
но вы не указали, что именно делает копирование в карантин. я сделал просто:
test1_router:
no_verify
driver = redirect
data = "${if eq{$acl_m16}{1} {+public/test} {$local_part@$domain}}"

maxximpossible
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-12 16:39:21
Откуда: Наша RUSSIA
Контактная информация:

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение maxximpossible » 2008-03-14 15:52:31

И ещё.
При дебаге выявил, что проверка в дебаговом выражении из приведённого выше куска конфига проходит с результатом "yes" в обоих случаях, но переменная $mime_filename при этом пуста.

maxximpossible
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-12 16:39:21
Откуда: Наша RUSSIA
Контактная информация:

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение maxximpossible » 2008-03-14 15:55:19

cyrus_user писал(а): я вашим конфигом воспользовался :)
но вы не указали, что именно делает копирование в карантин. я сделал просто:
test1_router:
no_verify
driver = redirect
data = "${if eq{$acl_m16}{1} {+public/test} {$local_part@$domain}}"
Может что с версией самого Exima.
У меня стоит 4.63-17.


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

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение Alex Keda » 2008-03-14 23:54:03

насчёт трёх раз - сколько вложений столько раз и вызывается.
Убей их всех! Бог потом рассортирует...

maxximpossible
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-12 16:39:21
Откуда: Наша RUSSIA
Контактная информация:

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение maxximpossible » 2008-03-17 9:59:08

lissyara писал(а):насчёт трёх раз - сколько вложений столько раз и вызывается.
Я проверял только с одним вложением.

maxximpossible
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-12 16:39:21
Откуда: Наша RUSSIA
Контактная информация:

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение maxximpossible » 2008-03-17 10:01:54

cyrus_user писал(а):exim 4.69
Пробовал эту версию - результат тот же.

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

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение Alex Keda » 2008-03-17 10:31:09

maxximpossible писал(а):
lissyara писал(а):насчёт трёх раз - сколько вложений столько раз и вызывается.
Я проверял только с одним вложением.
debug?
Убей их всех! Бог потом рассортирует...

maxximpossible
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-12 16:39:21
Откуда: Наша RUSSIA
Контактная информация:

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение maxximpossible » 2008-03-17 10:56:21

lissyara писал(а):
maxximpossible писал(а):
lissyara писал(а):насчёт трёх раз - сколько вложений столько раз и вызывается.
Я проверял только с одним вложением.
debug?
да это пока не суть важно.
Мне срочняк надо разобраться с вложениями.
Не пойму что у меня не так.
Конфиг Ваш с наименьшими изменениями.
ОС: Debian Etch 4.0 R3
Локализация: ru_RU.UTF-8
Exim: Exim version 4.63 #1 built 20-Jan-2007 10:42:32 (из репозитория Debian)

maxximpossible
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-12 16:39:21
Откуда: Наша RUSSIA
Контактная информация:

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение maxximpossible » 2008-03-17 11:09:50

Привожу дебаг.
Имя файла во вложении "мпфул.exe".

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

 Found content-type: MIME header, value is 'multipart/mixed'
11093 Found boundary= MIME parameter in content-type: header, value is '------------060606090401010504030608'
11093 using ACL "acl_check_mime"
11093 processing "deny"
11093 expanding: $mime_filename
11093    result: 
11093 expanding: ${lc:$mime_filename}
11093    result: 
11093 expanding: \N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N
11093    result: (\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$
11093 condition: match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}
11093    result: false
11093 expanding: 1
11093    result: 1
11093 skipping: result is not used
11093 expanding: 0
11093    result: 0
11093 expanding: ${if match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}{1}{0}}
11093    result: 0
11093 check condition = ${if match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}{1}{0}}
11093                 = 0
11093 deny: condition test failed
11093 processing "warn"
11093 expanding: $mime_filename
11093    result: 
11093 expanding: ${lc:$mime_filename}
11093    result: 
11093 expanding: \N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N
11093    result: (\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$
11093 condition: match{${lc:$mime_filename}}{\N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N}
11093    result: false
11093 expanding: 1
11093    result: 1
11093 skipping: result is not used
11093 expanding: 0
11093    result: 0
11093 expanding: ${if match{${lc:$mime_filename}}{\N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N}{1}{0}}
11093    result: 0
11093 check condition = ${if match{${lc:$mime_filename}}{\N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N}{1}{0}}
11093                 = 0
11093 warn: condition test failed
11093 processing "accept"
11093 accept: condition test succeeded
11093 Entering multipart recursion, boundary '------------060606090401010504030608'
11093 Next part with boundary ------------060606090401010504030608
11093 Found content-type: MIME header, value is 'text/plain'
11093 Found charset= MIME parameter in content-type: header, value is 'KOI8-R'
11093 Found content-transfer-encoding: MIME header, value is '7bit'
11093 using ACL "acl_check_mime"
11093 processing "deny"
11093 expanding: $mime_filename
11093    result: 
11093 expanding: ${lc:$mime_filename}
11093    result: 
11093 expanding: \N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N
11093    result: (\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$
11093 condition: match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}
11093    result: false
11093 expanding: 1
11093    result: 1
11093 skipping: result is not used
11093 expanding: 0
11093    result: 0
11093 expanding: ${if match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}{1}{0}}
11093    result: 0
11093 check condition = ${if match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}{1}{0}}
11093                 = 0
11093 deny: condition test failed
11093 processing "warn"
11093 expanding: $mime_filename
11093    result: 
11093 expanding: ${lc:$mime_filename}
11093    result: 
11093 expanding: \N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N
11093    result: (\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$
11093 condition: match{${lc:$mime_filename}}{\N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N}
11093    result: false
11093 expanding: 1
11093    result: 1
11093 skipping: result is not used
11093 expanding: 0
11093    result: 0
11093 expanding: ${if match{${lc:$mime_filename}}{\N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N}{1}{0}}
11093    result: 0
11093 check condition = ${if match{${lc:$mime_filename}}{\N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N}{1}{0}}
11093                 = 0
11093 warn: condition test failed
11093 processing "accept"
11093 accept: condition test succeeded
11093 Next part with boundary ------------060606090401010504030608
11093 Found content-type: MIME header, value is 'application/x-executable'
11093 Found content-transfer-encoding: MIME header, value is 'base64'
11093 Found content-disposition: MIME header, value is 'inline'
11093 using ACL "acl_check_mime"
11093 processing "deny"
11093 expanding: $mime_filename
11093    result: 
11093 expanding: ${lc:$mime_filename}
11093    result: 
11093 expanding: \N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N
11093    result: (\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$
11093 condition: match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}
11093    result: false
11093 expanding: 1
11093    result: 1
11093 skipping: result is not used
11093 expanding: 0
11093    result: 0
11093 expanding: ${if match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}{1}{0}}
11093    result: 0
11093 check condition = ${if match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}{1}{0}}
11093                 = 0
11093 deny: condition test failed
11093 processing "warn"
11093 expanding: $mime_filename
11093    result: 
11093 expanding: ${lc:$mime_filename}
11093    result: 
11093 expanding: \N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N
11093    result: (\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$
11093 condition: match{${lc:$mime_filename}}{\N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N}
11093    result: false
11093 expanding: 1
11093    result: 1
11093 skipping: result is not used
11093 expanding: 0
11093    result: 0
11093 expanding: ${if match{${lc:$mime_filename}}{\N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N}{1}{0}}
11093    result: 0
11093 check condition = ${if match{${lc:$mime_filename}}{\N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N}{1}{0}}
11093                 = 0
11093 warn: condition test failed
11093 processing "accept"
11093 accept: condition test succeeded

При латинском имени в $mime_filename содержится имя и result его показывает.
А вот здесь ничего нет.

maxximpossible
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-12 16:39:21
Откуда: Наша RUSSIA
Контактная информация:

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение maxximpossible » 2008-03-17 11:28:16

А вот дебаг при латинском имени:

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

 Found content-type: MIME header, value is 'multipart/mixed'
11117 Found boundary= MIME parameter in content-type: header, value is '------------030902050703040905070609'
11117 using ACL "acl_check_mime"
11117 processing "deny"
11117 expanding: $mime_filename
11117    result: 
11117 expanding: ${lc:$mime_filename}
11117    result: 
11117 expanding: \N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N
11117    result: (\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$
11117 condition: match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}
11117    result: false
11117 expanding: 1
11117    result: 1
11117 skipping: result is not used
11117 expanding: 0
11117    result: 0
11117 expanding: ${if match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}{1}{0}}
11117    result: 0
11117 check condition = ${if match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}{1}{0}}
11117                 = 0
11117 deny: condition test failed
11117 processing "warn"
11117 expanding: $mime_filename
11117    result: 
11117 expanding: ${lc:$mime_filename}
11117    result: 
11117 expanding: \N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N
11117    result: (\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$
11117 condition: match{${lc:$mime_filename}}{\N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N}
11117    result: false
11117 expanding: 1
11117    result: 1
11117 skipping: result is not used
11117 expanding: 0
11117    result: 0
11117 expanding: ${if match{${lc:$mime_filename}}{\N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N}{1}{0}}
11117    result: 0
11117 check condition = ${if match{${lc:$mime_filename}}{\N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N}{1}{0}}
11117                 = 0
11117 warn: condition test failed
11117 processing "accept"
11117 accept: condition test succeeded
11117 Entering multipart recursion, boundary '------------030902050703040905070609'
11117 Next part with boundary ------------030902050703040905070609
11117 Found content-type: MIME header, value is 'text/plain'
11117 Found charset= MIME parameter in content-type: header, value is 'KOI8-R'
11117 Found content-transfer-encoding: MIME header, value is '7bit'
11117 using ACL "acl_check_mime"
11117 processing "deny"
11117 expanding: $mime_filename
11117    result: 
11117 expanding: ${lc:$mime_filename}
11117    result: 
11117 expanding: \N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N
11117    result: (\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$
11117 condition: match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}
11117    result: false
11117 expanding: 1
11117    result: 1
11117 skipping: result is not used
11117 expanding: 0
11117    result: 0
11117 expanding: ${if match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}{1}{0}}
11117    result: 0
11117 check condition = ${if match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}{1}{0}}
11117                 = 0
11117 deny: condition test failed
11117 processing "warn"
11117 expanding: $mime_filename
11117    result: 
11117 expanding: ${lc:$mime_filename}
11117    result: 
11117 expanding: \N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N
11117    result: (\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$
11117 condition: match{${lc:$mime_filename}}{\N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N}
11117    result: false
11117 expanding: 1
11117    result: 1
11117 skipping: result is not used
11117 expanding: 0
11117    result: 0
11117 expanding: ${if match{${lc:$mime_filename}}{\N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N}{1}{0}}
11117    result: 0
11117 check condition = ${if match{${lc:$mime_filename}}{\N(\.zip|\.rar|\.7z|\.ace|\.arj|\.pps|\.ppt)$\N}{1}{0}}
11117                 = 0
11117 warn: condition test failed
11117 processing "accept"
11117 accept: condition test succeeded
11117 Next part with boundary ------------030902050703040905070609
11117 Found content-type: MIME header, value is 'application/x-executable'
11117 Found name= MIME parameter in content-type: header, value is 'zuma-ppc-v1-03.exe'
11117 Found content-transfer-encoding: MIME header, value is 'base64'
11117 Found content-disposition: MIME header, value is 'inline'
11117 Found filename= MIME parameter in content-disposition: header, value is 'zuma-ppc-v1-03.exe'
11117 using ACL "acl_check_mime"
11117 processing "deny"
11117 expanding: $mime_filename
11117    result: zuma-ppc-v1-03.exe
11117 expanding: ${lc:$mime_filename}
11117    result: zuma-ppc-v1-03.exe
11117 expanding: \N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N
11117    result: (\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$
11117 condition: match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}
11117    result: true
11117 expanding: 1
11117    result: 1
11117 expanding: 0
11117    result: 0
11117 skipping: result is not used
11117 expanding: ${if match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}{1}{0}}
11117    result: 1
11117 check condition = ${if match{${lc:$mime_filename}}{\N(\.wav|\.cpl|\.pif|\.bat|\.scr|\.lnk|\.exe|\.vbs|\.com|\.asf|\.avi|\.mpg|\.mp3|\.mp4|\.mpeg|\.wma|\.mov|\.vob|\.mp|\.msi|\.swf|\.wsh|\.wmv|\.js|\.dv|\.pst)$\N}{1}{0}}
11117                 = 1
11117 deny: condition test succeeded
11117 unspool_mbox(): unlinking '/var/spool/exim4/scan/1JbAgZ-0002tJ-Fg/1JbAgZ-0002tJ-Fg.eml'
11117 SMTP>> 550 Blacklisted file extension detected
11117 LOG: MAIN REJECT
11117   H=linsrv.local [192.168.101.3]:50648 I=[192.168.101.4]:25 F=<inpos@yandex.ru> rejected during MIME ACL checks: Blacklisted file extension detected
11117 search_tidyup called
11117 Process 11117 is ready for new message
11117 smtp_setup_msg entered


maxximpossible
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-12 16:39:21
Откуда: Наша RUSSIA
Контактная информация:

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение maxximpossible » 2008-03-17 11:36:50

Что странно - в обоих случаях Exim определяет Content-type,
но в случае с русским вложением он не определяет имя файла.
Интересно, а можно отфильтровывать не по расширению, а по Content-type?

maxximpossible
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-12 16:39:21
Откуда: Наша RUSSIA
Контактная информация:

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение maxximpossible » 2008-03-17 14:08:36

Сделал фильтр по Content-type.
Фильтруется нормально.
Но при доставке русских имён архивов (они отсылаются в карантин для разбирательства - что в архиве) в карантин письмо приходит с вложенным файлом : ATT56465.DAT .
Час от часу не легче.

cyrus_user
сержант
Сообщения: 181
Зарегистрирован: 2007-04-24 12:16:36

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение cyrus_user » 2008-03-18 7:28:46

:) ну вы мученник..
проверяю на основе ваших записей, но упрощаю:
как видно будет писать вложение в лог и в само письмо

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

acl_smtp_mime:
warn message = X-MYTEST: attachment |$mime_filename|
log_message = attachment |$mime_filename|
condition = ${if match{${lc:$mime_filename}}{\N(\.ttt|\.yyy)$\N}{1}{0}}
set acl_m116 = 1
перенаправляю на какой-то ящик:

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

spam_test1_router:
no_verify
driver = redirect
data = "${if eq{$acl_m116}{1} {test1@sanctus.local.adm} {$local_part@$domain}}"
теперь отправляем тестовое письмо. поскольку я знаю, что записи будут в utf-8, а работаю в консоли в koi8-r, то для просмотра лога сразу запускаю uxterm и там вижу что и хотел:

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

exim[2586]: 2008-03-18 12:04:05 1JbT3V-0000fi-FW H=mx.local.adm (mx.local.adm) [10.0.0.20] Warning: attachment |тест12.ttt|
теперь лезу в мэйлбокс, нахожу нужно письмо и делаю:

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

$ cat 72785. | grep -i X-MYTEST | iconv -t KOI8R -f UTF-8
X-MYTEST: attachment |тест12.ttt|
Даже не понадобилось лазить в debug, поскольку всё произошло так, как я и ожидал.

Советую пройти подобный путь от простого к сложному

maxximpossible
рядовой
Сообщения: 19
Зарегистрирован: 2008-03-12 16:39:21
Откуда: Наша RUSSIA
Контактная информация:

Re: Exim. Проблема с обработкой кирилических имён файлов.

Непрочитанное сообщение maxximpossible » 2008-03-18 10:33:59

Прошёл Вашим путём.
Результат:

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

condition = ${if match{${lc:$mime_filename}}{\N(\.ttt|\.yyy)$\N}{1}{0}}
не сработало, т.к. $mime_filename оказался пустым, а с латинским именем всё нормально.