[Mailman-Developers] Stripping binaries attachments

Dan Mick Dan Mick <dmick@utopia.West.Sun.COM>
Fri, 19 Apr 2002 15:55:28 -0700 (PDT)


> At 05:28 PM 4/19/02 -0400, Barry A. Warsaw wrote:
> >bin/dumpdb knows how to print out the plaintext representation of a
> >.pck message file, so
> >
> >    % bin/dumpdb qfiles/in/...pck > msg.txt
> >
> >ought to do the trick.  The other direction is fairly easy if you
> >don't mind not saving the message metadata file (.db).  Use
> >bin/inject, possibly with the -q option.
> 
> And, you know, I actually knew that at the time, and now that you've
> mentioned it again, realize I actually did that eventually...
> 
> Although I hadn't thought about using inject to shove it back in.

Inject has given me problems, unless I go and remove some magic
header manually (well, with sed); IIRC, it was X-BeenThere.

Here are a couple of scripts I find useful for manually
investigating bad or shunt messages:

Create symlinks to all the shunted messages' .pck and .db files,
in ~mailman, for investigation with debugshunt.py

$ cat ~/bin/linkshunt
#!/bin/ksh
i=0
for f in $(ls qfiles/shunt/*pck); do 
        ip=$(printf %03s $i)
        base=$(basename $f .pck)
        ln -s qfiles/shunt/${base}.pck shunt${ip}.pck
        ln -s qfiles/shunt/${base}.db shunt${ip}.db
        ((i=i+1))
done

Set up some gunge to poke around shunted messages by hand
(particularly when they won't parse, so dumpdb is no help).
Create a msg object from argv[1], and have a pp function
around for pretty-printing various things as you poke, then
start an interactive console:

$ cat debugshunt.py
#!/usr/local/bin/python
import sys
sys.path.insert(0, './bin')
import paths
import cPickle
import pprint
import code

f=open(sys.argv[1])
msg=cPickle.load(f)
pp=pprint.PrettyPrinter().pprint

try:
    import readline
except ImportError:
    pass
namespace = globals().copy()
namespace.update(locals())
code.InteractiveConsole(namespace).interact("got console?")