Hello Stefan, On Thu, Dec 09, 2010 at 08:31:53AM +0100, Stefan Hornburg (Racke) wrote: > On 12/08/2010 08:47 PM, Helge Kreutzmann wrote: >> severity 582765 important >> thanks >> >> This bug now prevents me from sending e-mails not only to individuals >> but also to maitainer groups within Debian. Hence it is important, >> maybe a fix for Squeeze is still possible?
I'll really would like to contact Alioth, which I can't right now: >> UNDELIVERABLE MAIL >> >> Your message to the following recipients cannot be delivered: >> >> <[email protected]>: >> lists.alioth.debian.org [217.196.43.134]: >> >>> DATA >> <<< 550 Broken MIME container (Long MIME Boundary) (I already filed a bug on Alioth to relax this check, but some Debian Developers also have strict filters and the current behaviour violates an RFC, this even when changed, this is at most a bandaid for a single service). >> (A configuration which blocks parts of the recipient space is IMHO >> possible even grave, but policy is a bit vague about this) >> > > is it possible to get a sample of an email that fails the boundary checks? I send that to you. Did you find something out? It is definitly something with courier, as even when delivery is done locally, the MIM boundary is 1 character too long. I had a look at the sources of courier. As far as I can tell, the following two functions are in question: static int tryboundary(afxipipestream &io, const char *boundary) { int boundary_l=strlen(boundary); std::string line; io.clear(); io.seekg(0); if (io.fail()) return (-1); while (std::getline(io, line).good()) { if (strncmp(line.c_str(), boundary, boundary_l) == 0) return (1); } io.clear(); return (0); } // Create MIME multipart boundary delimiter. std::string mkboundary_msg_s(afxipipestream &io) { std::string base=mkfilename(); unsigned i=0; std::string boundary; int rc; do { std::ostringstream o; o << base << "." << std::setw(3) << std::setfill('0') << i++; boundary=o.str(); } while ((rc=tryboundary(io, boundary.c_str())) > 0); if (rc) return (""); return (boundary); } I cannot see a length check there, and my C++ is *very* weak, so I'm not sure I fully understand the code. Maybe something like the following needs added before the final return (in pseudo code): if (rc) return (""); + if (length(boundary) > 70) { substr(1,70,boundary) } return (boundary); } What do you think? Or is there indeed a length check somewhere hidden? Greetings Helge -- Dr. Helge Kreutzmann [email protected] Dipl.-Phys. http://www.helgefjell.de/debian.php 64bit GNU powered gpg signed mail preferred Help keep free software "libre": http://www.ffii.de/
signature.asc
Description: Digital signature

