chiark / gitweb /
Merge branch 'master' of /u/webstump/live/
[modbot-mtm.git] / stump / bin / decodeBase64
1 #!/usr/bin/perl
2
3 $isEncoded = 0;
4 $FullHeaders = "";
5 $DecodedHeaders = "";
6 $switch = "";
7 $inctype = 0;
8
9 while(<>) {
10   chop;
11
12   last if( /^$/ );
13
14   $FullHeaders .= "$_\n";
15
16   if ( /^\s+/ && $inctype ) {
17       next;
18   }
19
20   $inctype=0;
21
22   if( /^Content-Transfer-Encoding: BASE64/i ) {
23
24     $isEncoded = 1;
25     $switch = "-b"; # base64 - default
26
27   } elsif( /^Content-Transfer-Encoding: quoted-printable/i ) {
28
29     $isEncoded = 1;
30     $switch = "-q"; # quoted-printable
31
32   } elsif( /^Content-Type: /i ) {
33     $inctype = 1;
34
35   } elsif( ! /^Mime-Version: /i && ! /Content-Type: /i ) {
36     $DecodedHeaders .= "$_\n";
37   }
38 }
39
40 # body
41
42 if( !$isEncoded ) {
43   print $FullHeaders . "\n";
44   while( <> ) {
45     print or die $!;
46   }
47   exit 0;
48 }
49
50 print $DecodedHeaders . "\n" or die $!;
51
52 if( $ENV{'TMP'} ) {
53   $TmpFile = "$ENV{'TMP'}/letter.$$";
54 } else {
55   $TmpFile = "/tmp/letter.$$";
56 }
57
58 open( DECODE, "|mimencode -u $switch > $TmpFile" ) 
59   || die "Can't run mmencode writing to $TmpFile";
60
61   while( <> ) {
62     print DECODE or die $!;
63   }
64 close( DECODE ) or die "$? $!";
65
66 open( DECODED, $TmpFile ) || die "Can't open just decoded file $TmpFile";
67   while( <DECODED> ) {
68     print or die $!;
69   }
70 close( DECODED ) or die "$? $!";
71
72 unlink( $TmpFile );