diff options
author | Rob Funk <rfunk@funknet.net> | 2004-06-08 03:59:01 +0000 |
---|---|---|
committer | Rob Funk <rfunk@funknet.net> | 2004-06-08 03:59:01 +0000 |
commit | d78b61e3efaea197a6e5b2b72bf2981a9ed69461 (patch) | |
tree | 1704e13ce5d767d59868a2d5e834cb2e988ed90f /contrib/domino | |
parent | d9e84e176fe538e110d9612f9832d69846e8d3e7 (diff) | |
download | fetchmail-d78b61e3efaea197a6e5b2b72bf2981a9ed69461.tar.gz fetchmail-d78b61e3efaea197a6e5b2b72bf2981a9ed69461.tar.bz2 fetchmail-d78b61e3efaea197a6e5b2b72bf2981a9ed69461.zip |
Add files from ESR's dev directory that weren't under version control
svn path=/trunk/; revision=3881
Diffstat (limited to 'contrib/domino')
-rw-r--r-- | contrib/domino | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/contrib/domino b/contrib/domino new file mode 100644 index 00000000..a5802718 --- /dev/null +++ b/contrib/domino @@ -0,0 +1,84 @@ +#!/usr/bin/perl -w +# correct-domino-mime-conversion - does it! +# $Id: domino,v 1.1 2004/06/08 03:59:00 rfunk Exp $ + +use strict; + +# Any arguments are expected to be an mda invocation. +if (@ARGV) { + my $mda = join(' ', @ARGV); + open(MDA, "| $mda") or die "Can't exec $mda: $!\n"; + select(MDA); +} + +# Look for a Boundary declaration in the message header +my $decltag; +while (<STDIN>) { + print; + if (/boundary=\"(.*)\"$/i) { + $decltag = $1; + } elsif (/^$/) { + # An empty line marks the end of the headers. + last; + } +} + +# If we didn't find a Boundary declaration just pipe the rest of the +# message unchanged. +if (!defined $decltag) { + while (<STDIN>) { + print; + } + exit 0; +} + +# Substitute $decltag for every ocurrence of an outer-level boundary +# string found in the body of the message. +my $usedtag; +while (<STDIN>) { + if (/^--(.*)$/) { + $usedtag = $1 unless defined $usedtag; + if ($1 eq $usedtag) { + $_ = "--$decltag\n"; + } elsif ($1 eq "$usedtag--") { + $_ = "--$decltag--\n"; + } + } + print; +} + +=pod + +This script can be used to bypass a bug in the Domino-5.0.2b IMAP +service that manifests itself when you use fetchmail as the IMAP +client. The problem is that fetchmail (differently from other IMAP +clients) fetches messages in two parts, first the headers and then the +body. It seems that Domino converts the messages from its internal +format into MIME twice. In doing so, it declared a boundary string in +the messages Content-type header and uses another one to separate the +parts in the body. + +This script should be used as a mda option for fetchmail. As +arguments to it, pass the former mda you used. I, for example, use the following entry in my .fetchmailrc: + + poll server ... mda "/usr/bin/procmail -d %T"; + +To use this filter, I changed the above into the following: + + poll server ... mda "/home/gustavo/bin/correct-domino-mime-conversion /usr/bin/procmail -d %T"; + +If you do not use a mda normally, you can try the following to call sendmail directly: + + poll server ... mda "/home/gustavo/bin/correct-domino-mime-conversion //wherever/is/your/sendmail -oem -f %F %T"; + +Without argumets this script is a filter that reads from its stdin and +outputs the result into its stdout. + +I should mention that this bug seems to be solved in Domino 5.0.3 +(http://www.notes.net/46dom.nsf/434e319a66960d8385256857005cd97b/4499e0db6e43732b852568b2006ef7e9?OpenDocument) +but I have not checked it. + +Gustavo. +<gustavo@cpqd.com.br> + +=cut |