[Exim-users] Mime acl match "+"

Mikhail Golub gmn на gmn.org.ua
Пт Ноя 2 08:53:52 UTC 2018


Добрый день.

Как выяснил, дело не в Exim ...

В общем, сделал простейшее правило - если mime-часть архив, то выполнить 
внешний скрипт.

warn condition = ${if match{$mime_filename}{\N(?i)\.(ARCEXT)$\N}}
      logwrite = "$mime_filename"
      logwrite = "${run{/usr/local/bin/7z l $mime_decoded_filename}}"

Отправляю письмо с архивом multivolume - в логе пусто:
2018-11-02 10:45:01 1gIV4f-000Ml5-C5 "TeamViewer_Setup.part01.rar"
2018-11-02 10:45:01 1gIV4f-000Ml5-C5 ""

Письмо с вложенным обычным архивом - все ок:
2018-11-02 10:45:43 1gIV5L-000MlL-48 "pack.rar"
2018-11-02 10:45:43 1gIV5L-000MlL-48 "\n7-Zip [64] 16.02 : Copyright (c) 
1999-2016 Igor Pavlov : 2016-05-21\np7zip Version 16.02 
(locale=C,Utf16=off,HugeFiles=on,64 bits,2 CPUs x64)\n\nScanning the 
drive for archives:\n1 file, 166 bytes (1 KiB)\n\nListing archive: 
/var/spool/exim/scan/1gIV5L-000MlL-48/1gIV5L-000MlL-48-00002\n\n--\nPath 
= /var/spool/exim/scan/1gIV5L-000MlL-48/1gIV5L-000MlL-48-00002\nType = 
Rar5\nPhysical Size = 166\nSolid = -\nBlocks = 1\nEncrypted = 
-\nMultivolume = -\nVolumes = 1\n\n   Date      Time    Attr 
Size   Compressed  Name\n------------------- ----- ------------ 
------------  ------------------------\n2018-10-30 14:43:21 ....A 
   121           94  test.zip\n------------------- ----- ------------ 
------------  ------------------------\n2018-10-30 14:43:21 
   121           94  1 files\n"


Т.е. почему-то не отрабатывает обработка многотомного архива :(

Пока писал письмо - нашел ответ :)
"7z l" на многотомный архив возвращает ошибку. См. в конце.

# 7z l
p7zip Version 16.02 (locale=ru_RU.UTF-8,Utf16=on,HugeFiles=on,64 bits,2 
CPUs x64)

Scanning the drive for archives:
1 file, 1457664 bytes (1424 KiB)

Listing archive: /home/gmn/6/TeamViewer_Setup.part01.rar

--
Path = /home/gmn/6/TeamViewer_Setup.part01.rar
Type = Rar5
ERROR = Missing volume : TeamViewer_Setup.part02.rar
Physical Size = 1457664
Characteristics = Volume
Solid = -
Blocks = 1
Encrypted = -
Multivolume = +
Volume Index = 0
Volumes = 1

    Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------ 
------------------------
2018-05-22 13:59:40 ....A     20367104      1457471  TeamViewer_Setup.exe
------------------- ----- ------------ ------------ 
------------------------
2018-05-22 13:59:40           20367104      1457471  1 files

Errors: 1





01.11.2018 17:58, George L. Yermulnik пишет:
> Hello!
> 
> On Thu, 01 Nov 2018 at 17:47:18 (+0200), Mikhail Golub wrote:
> 
>> 01.11.2018 17:28, George L. Yermulnik пишет:
>>>> warn set acl_m_test = ${if match{${run{/usr/local/bin/7z l
>>>> $mime_decoded_filename}}} {\N(Multivolume = +)\N} {$1}}
> 
>>> 1. Убрать "\N" - их наличие тут, имхо, бессмысленно.
>> Имеет смыл.
> 
> Какой?
> 
>>> 2. Заэкранировать сам слеш: \\+
>> Проверил. Не помогло.
> 
> Мне помогает:
> [--- cut ---]
> $ exim -be
>> warn set acl_m_test = ${if match{Multivolume = +} {(Multivolume = \\+)} {$1}}
> warn set acl_m_test = Multivolume = +
>> warn set acl_m_test = ${if match{Multivolume = -} {\N(Multivolume = [+-])\N} {$1}}
> warn set acl_m_test = Multivolume = -
>> warn set acl_m_test = ${if match{Multivolume = +} {\N(Multivolume = [+-])\N} {$1}}
> warn set acl_m_test = Multivolume = +
>> ^D
> [--- cut ---]
> 
>>> 3. Круглые скобки, судя по приведённому примеру, тоже смысла не имеют.
>> Тоже имеют смысл. Переменная раскрывается в $1.
> 
> Этого не заметил. Прошу прощения.
> 
>> Переделал немного.
>> warn set acl_m_test = ${if match{${run{/usr/local/bin/7z l
>> $mime_decoded_filename}}} {\NMultivolume = (\+|\-)\N} {$1}}
> 
>> Если архив не многотомный, то set acl_m_test получает значение "-".
>> А вот если многотомный (Multivolume = +) - не срабатывает правило :(
> 





Подробная информация о списке рассылки Exim-users