<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Vain tekstinä Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
span.Shkpostityyli17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.VaintekstinChar
        {mso-style-name:"Vain tekstinä Char";
        mso-style-priority:99;
        mso-style-link:"Vain tekstinä";
        font-family:"Calibri","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=FI link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span lang=EN-US>In order to guard against malicious macros, we have banned all macro-enabled Office document formats, i.e. added the following to $banned_filename_re:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal style='text-indent:65.2pt'><span lang=EN-US># block macro-enabled office files<o:p></o:p></span></p><p class=MsoNormal style='text-indent:65.2pt'><span lang=EN-US>qr'.\.(xlsm|xltm|xlam|docm|dotm|pptm|potm|ppam|ppsm|sldm)$'i,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Since modern Office documents are technically zip-files, amavisd-new opens and processes the zip archive. For originating (outgoing) messages we bounce the banned emails so the poor sender can understand why his emails are not delivered, but in this case amavisd-new does not report the actual office document being banned but instead blames the first file inside the zip-archive. This results in very cryptic error messages, like:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>                             Subject: BANNED contents from you (.txt,[Content_Types].xml)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText style='margin-left:65.2pt'><span lang=EN-US>Our content checker found<o:p></o:p></span></p><p class=MsoPlainText style='margin-left:65.2pt'><span lang=EN-US>    banned name: .txt,[Content_Types].xml<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                             in email presumable from you<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>It seems amavisd has a small “optimization” that skips banned checks for non-leaf nodes. I propose removing that so the actual office documents can be directly banned and correctly reported:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal style='margin-left:65.2pt'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>--- amavisd     5 Apr 2016 06:30:18 -0000       1.24<o:p></o:p></span></p><p class=MsoNormal style='margin-left:65.2pt'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>+++ amavisd     5 Apr 2016 06:30:29 -0000<o:p></o:p></span></p><p class=MsoNormal style='margin-left:65.2pt'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>@@ -9912,7 +9912,9 @@<o:p></o:p></span></p><p class=MsoNormal style='margin-left:65.2pt'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>       my(@path) = @{$part->path};<o:p></o:p></span></p><p class=MsoNormal style='margin-left:65.2pt'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>       next  if @path <= 1;<o:p></o:p></span></p><p class=MsoNormal style='margin-left:65.2pt'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>       shift(@path);  # ignore place-holder root node<o:p></o:p></span></p><p class=MsoNormal style='margin-left:65.2pt'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>-      next  if @{$part->children};  # ignore non-leaf nodes<o:p></o:p></span></p><p class=MsoNormal style='margin-left:65.2pt'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>+      # also process non-leaf nodes or we cannot block office documents<o:p></o:p></span></p><p class=MsoNormal style='margin-left:65.2pt'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>+      # without alert about wrong parts (blames the innocent zip member)<o:p></o:p></span></p><p class=MsoNormal style='margin-left:65.2pt'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>+      # next  if @{$part->children};  # ignore non-leaf nodes<o:p></o:p></span></p><p class=MsoNormal style='margin-left:65.2pt'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>       my(@descr_trad);  # a part path: list of predecessors of a message part<o:p></o:p></span></p><p class=MsoNormal style='margin-left:65.2pt'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>       my(@descr);  # same, but in form suitable for check on banned_namepath_re<o:p></o:p></span></p><p class=MsoNormal style='margin-left:65.2pt'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'>       for my $p (@path) {<o:p></o:p></span></p><p class=MsoNormal style='margin-left:65.2pt'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#595959;mso-fareast-language:FI'>--<o:p></o:p></span></p><p class=MsoNormal><span style='color:#595959;mso-fareast-language:FI'>Kai.Risku@arrak.fi                     GSM +358-40-7678282<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#595959;mso-fareast-language:FI'>Oy Arrak Software Ab              http://www.arrak.fi<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div></body></html>