В Exim реализована проверка опасных вложений во вложенных архивах.
Да много где так уже сделано.
Но на днях пришло письмо.
Во вложении zip. А в архиве файл *.js
Начал разбираться, почему же прошло ...
Если выполнить в консоли, то все ок.
В архиве файл "рахунок до оплати №280 за октябрь 2020р..js"
/usr/local/bin/7z l -ba test.zip
2020-10-27 21:51:52 ..... 5661 1442 à å㮪 ¤® ®¯« â¨
ü280 § ®ªâï¡àì 2020à..js
А вот так - нет результата:
exim -be '${run{/usr/local/bin/7z l -ba test.zip}}'
Этот проблемный архив на самом деле lzh, переименованный в zip.
Но 7z его открывает без проблем, как видим.
Но почему-то через Exim не так выполняется команда, как задумано.
Сам архив здесь https://fex.net/s/krdefna (доступен до 6.11.2020)
В архиве вирус, поэтому осторожно.
С дебагом.
exim -d+all -be '${run{/usr/local/bin/7z l -ba test.zip}}'
***
07:11:47 1770 ╭considering: ${run{/usr/local/bin/7z l -ba test.zip}}
07:11:47 1770 ╭considering: /usr/local/bin/7z l -ba test.zip}}
07:11:47 1770 ├──expanding: /usr/local/bin/7z l -ba test.zip
07:11:47 1770 ╰─────result: /usr/local/bin/7z l -ba test.zip
07:11:47 1770 direct command:
07:11:47 1770 argv[0] = '/usr/local/bin/7z'
07:11:47 1770 argv[1] = 'l'
07:11:47 1770 argv[2] = '-ba'
07:11:47 1770 argv[3] = 'test.zip'
07:11:47 1770 fresh-exec forking for expand-run
07:11:47 1770 fresh-exec forked for expand-run: 1771
07:11:47 1771 postfork: expand-run
07:11:47 1770 ├──expanding: ${run{/usr/local/bin/7z l -ba test.zip}}
07:11:47 1770 ╰─────result:
07:11:47 1770 search_tidyup called
07:11:47 1770 >>>>>>>>>>>>>>>> Exim pid=1770 (fresh-exec) terminating
with rc=0 >>>>>>>>>>>>>>>>
Exim version 4.94 #2 (FreeBSD 12.1)
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=ru_RU.UTF-8,Utf16=on,HugeFiles=on,64 bits,2
CPUs x64)
_______________________________________________
Exim-users mailing list
Exim-...@mailground.net
http://mailground.net/mailman/listinfo/exim-users
Но выдает ненулевой код возврата. Поэтому Exim использует <string2>
которой нет.
> Но почему-то через Exim не так выполняется команда, как задумано.
Проверять надо так:
exim -be '${run{/usr/local/bin/7z l -ba /path/test.zip}{$value}{$value}}'
Ну и в рабочий код добавить это: {$value}{$value}
ERROR: No more files
test.zip
System ERROR:
Unknown error: -2147024872
И так же и на нормальный архив.
>
> Ну и в рабочий код добавить это: {$value}{$value}
Рабочий код не замысловатый.
set acl_m_winbin_atach = ${if match{${run{/usr/local/bin/7z l -ba
$mime_decoded_filename}}} {\N(?i)\.(WINBIN)($|\n)\N} {$1}}
При такой проверке нужно указывать путь к файлу,
т.к. текущая директория при выполнении команды из Exim другая
(кажется /var/spool/exim).
> Рабочий код не замысловатый.
> set acl_m_winbin_atach = ${if match{${run{/usr/local/bin/7z l -ba
> $mime_decoded_filename}}} {\N(?i)\.(WINBIN)($|\n)\N} {$1}}
$mime_decoded_filename содержит и путь тоже.
On 31.10.2020 7:33, Le...@lena.kiev.ua wrote:
>>> Проверять надо так:
>>>
>>> exim -be '${run{/usr/local/bin/7z l -ba /path/test.zip}{$value}{$value}}'
>> exim -be '${run{/usr/local/bin/7z l -ba test.zip}{$value}{$value}}'
>>
>> ERROR: No more files
>> test.zip
>
> При такой проверке нужно указывать путь к файлу,
> т.к. текущая директория при выполнении команды из Exim другая
> (кажется /var/spool/exim).
Да, я указывал.
Просто в рассылку сократил путь, указав только файл.
>
>> Рабочий код не замысловатый.
>> set acl_m_winbin_atach = ${if match{${run{/usr/local/bin/7z l -ba
>> $mime_decoded_filename}}} {\N(?i)\.(WINBIN)($|\n)\N} {$1}}
>
> $mime_decoded_filename содержит и путь тоже.
Да.
Работает проверка уже несколько лет.
А на этом архиве не сработала :(
И пока не могу понять почему.
У меня такая ошибка была при проверке, если не указать путь.
А если указать, и вставить {$value}{$value}
то работает.
> >>Рабочий код не замысловатый.
> >>set acl_m_winbin_atach = ${if match{${run{/usr/local/bin/7z l -ba
> >>$mime_decoded_filename}}} {\N(?i)\.(WINBIN)($|\n)\N} {$1}}
> >
> >$mime_decoded_filename содержит и путь тоже.
> Да.
> Работает проверка уже несколько лет.
> А на этом архиве не сработала :(
> И пока не могу понять почему.
Потому что код возврата 7z неулевой. Нужно вставить {$value}{$value}