Hi!

After further investigation of the problem I've written a script for
procmail or any other mail filter program. This script does one nice
thing, which I missed in "formail".
"formail" can only change lines in the header of emails. The
Content-Type being to be changed for pgp attachments is in the body of
the email.
Therefore my script scans through the body of an email. If it finds an
attachment with the sequence "^-----BEGIN PGP MESSAGE-----" it changes
the Content-Type of the attachment to
"Content-Type: application/pgp; format=text; x-action=encrypt".
The header of the email stays "multipart/".

To get procmail execute the script, the whole pgp section in my
.procmailrc is now:

---------------------------- cut here ----------------------------
##
## PGP
##

MAILFILTER_PGP_ATTACHMENT=${HOME}/bin/mailfilter_pgp_attachment

:0
* !^Content-Type: message/
* !^Content-Type: multipart/
* !^Content-Type: application/pgp
{
        :0 fBw
        * ^-----BEGIN PGP MESSAGE-----
        * ^-----END PGP MESSAGE-----
        | $FORMAIL -i "Content-Type: application/pgp; format=text; x-action=encrypt"

        :0 fBw
        * ^-----BEGIN PGP SIGNED MESSAGE-----
        * ^-----BEGIN PGP SIGNATURE-----
        * ^-----END PGP SIGNATURE-----
        | $FORMAIL -i "Content-Type: application/pgp; format=text; x-action=sign"
}

:0
* ^Content-Type: multipart/
{
        :0 fBw
        * ^-----BEGIN PGP MESSAGE-----
        * ^-----END PGP MESSAGE-----
        | $MAILFILTER_PGP_ATTACHMENT -
}
---------------------------- cut here ----------------------------

The filter script "mailfilter_pgp_attachment" is attached to this msg.

What do you think about this solution? Ideas, comments are welcome.


Regards,
Daniel.

On Wed, Feb 07, 2001 at 10:28:00AM +0100, Daniel Kollar wrote:
> Date: Wed, 7 Feb 2001 10:28:00 +0100
> From: Daniel Kollar <[EMAIL PROTECTED]>
> To: Mutt User List <[EMAIL PROTECTED]>
> Subject: multipart application/pgp
> Mail-Followup-To: Mutt User List <[EMAIL PROTECTED]>
> 
> Hi!
> 
> I often get emails with several pgp encrypted attachments.
> 
> The "Content-Type" in the header of the message is "multipart/", so
> mutt does not recongnize the pgp encryption.
> Procmail can change this "multipart/" content type to "application/pgp".
> Now mutt can decrypt the whole msg and show it in the pager. This works fine, as 
>long as
> there are only ASCII attachments encrypted.
> But when there are e.g. tar, gz attachments or images, I run into
> problems.
> 
> Nice would be, if mutt could recognize the multipart and the encryption.
> Then the normal attachment browser could be used to read or save the
> attachments separately.
> 
> What do you think about this?
> 
> 
> Regards,
> Daniel.
eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
& eval 'exec perl -S $0 $argv:q'
       if 0;

($script = $0) =~ s#.*/(.*)$#$1#;
$USAGE = "
# Usage: $script mail
#
# Task: This script converts the Content-Type of attachments to
#       application/pgp ...
#       if the attachment is pgp encrypted.
#       The output will be the stdout.
#
# Version : 1.0
# Author: Daniel.Kollar\@bigfoot.de
#
";
$user=`whoami`;
$date=`date`;

die "$USAGE" if @ARGV == 0;

$header = 1;

while (<>) {
  $line = $_;

  if ( $header && $line =~ /^[\s\t]*$/ ) {
    $header = 0;
    print "$line";
    next;
  }

  if ( $header == 1 ) {   # skip header
    print "$line";
    next;
  }

  if ( !$header && $line =~ /^------.*/ ) {
    print "$line";
    $aheader = 1;
    @lines1 = ();
    $content_type = "";
    @lines = ();
    while (<>) {
      $line = $_;

      if ( $aheader && $line =~ /^Content-Type:.*/) {   # save Content-Type separately
        @lines1 = @lines;
        $content_type = $line;
        @lines = ();
        next;
      }

      if ( $aheader && $line =~ /^[\s\t]*$/ ) {   # look for header of attachment
        $aheader = 0;
        push(@lines, $line);
        next;
      }

      if ( $aheader == 1 ) {
        push(@lines, $line);
        next;
      }

      if ( !$aheader && $line =~ /^-----BEGIN PGP MESSAGE-----.*/ ) {   # attachment 
pgp encrypted
        $content_type = "Old-${content_type}Content-Type: application/pgp; 
format=text; x-action=encrypt\n";
        push (@lines, $line);
        next;
      }

      if ( !$aheader && $line =~ /^------.*/ ) {   # next attachment begins
        print join '',@lines1;
        print "$content_type";
        print join '',@lines;
        print "$line";
        $aheader = 1;
        @lines1 = ();
        $content_type = "";
        @lines = ();
        next;
      }

      push(@lines, $line);
    }
    print join '',@lines1;
    print "$content_type";
    print join '',@lines;

    last;
  }

  print "$line";

}

Reply via email to