Disclaimer problem

Julian Field mailscanner at ecs.soton.ac.uk
Fri May 30 09:32:14 IST 2003


At 08:39 30/05/2003, you wrote:
>Hello,
>
>I am currently evaluating MailScanner and have come across a small problem
>regarding signing of mail. I have added a disclaimer to all out going mail
>using a ruleset but have noticed that any mail that has an attachment but
>does not have any body text does not get signed. All other mail is signed
>correctly.
>
>I have upgraded to the latest version and started with an new
>MailScanner.conf but the problem persists.
>
>I am using Redhat8/Sendmail/F-prot.
>
>Does anyone have any idea's as to what I may be doing wrong.
>
>Thanks in advance.
>
>Dean Plant

Try applying this patch to /usr/lib/MailScanner/MailScanner/Message.pm.
Read the man page for the "patch" command if you don't know how to drive
it, saves you doing it by hand :)
It appears to work okay for me, and will be in the next stable release (due
this weekend).

--- Message.pm  2003-05-30 09:09:21.000000000 +0100
+++ Message.pm.new2     2003-05-30 09:24:43.000000000 +0100
@@ -1447,6 +1447,7 @@

    # If multipart, try to sign our first part
    if ($top->is_multipart) {
+    my $sigcounter = 0;
      # JKF Signed and encrypted multiparts must not be touched.
      # JKF Instead put the sig in the epilogue. Breaks the RFC
      # JKF but in a harmless way.
@@ -1456,18 +1457,33 @@
        @signature = map { "$_\n" } split(/\n/, $signature);
        unshift @signature, "\n";
        $top->epilogue(\@signature);
-      return;
+      return 1;
      }
-    $this->SignCleanEntity($top->parts(0));
-    $this->SignCleanEntity($top->parts(1))
+    $sigcounter += $this->SignCleanEntity($top->parts(0));
+    $sigcounter += $this->SignCleanEntity($top->parts(1))
        if $top->head and $top->effective_type =~ /multipart\/alternative/i;
-    return;
+
+    if ($sigcounter == 0) {
+      # If we haven't signed anything by now, it must be a multipart
+      # message containing only things we can't sign. So add a text/plain
+      # section on the front and sign that.
+      my $text = $this->ReadVirusWarning('inlinetextsig') . "\n\n";
+      my $newpart = build MIME::Entity
+                          Type => 'text/plain',
+                          Disposition => 'inline',
+                          Data => $text,
+                          Encoding => 'quoted-printable',
+                          Top => 0;
+      $top->add_part($newpart, 0);
+      $sigcounter = 1;
+    }
+    return $sigcounter;
    }

    $MimeType = $top->head->mime_type if $top->head;
-  return unless $MimeType =~ m{text/}i; # Won't sign non-text message.
+  return 0 unless $MimeType =~ m{text/}i; # Won't sign non-text message.
    # Won't sign attachments.
-  return if $top->head->mime_attr('content-disposition') =~ /attachment/i;
+  return 0 if $top->head->mime_attr('content-disposition') =~ /attachment/i;

    # Get body data as array of newline-terminated lines
    $top->bodyhandle or return undef;
@@ -1489,6 +1505,9 @@
      $io->print("\n$signature\n");
    }
    $io->close;
+
+  # We signed something
+  return 1;
  }

--
Julian Field
www.MailScanner.info
MailScanner thanks transtec Computers for their support



More information about the MailScanner mailing list