[vox-tech] procmail problem SOLVED (was: procmail question:
filtering message mangles headers)
Henry House
hajhouse at houseag.com
Fri Oct 15 09:52:53 PDT 2004
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
På fredag, 15 oktober 2004, skrev Peter Jay Salzman:
> On Fri 15 Oct 04, 7:33 AM, Henry House <hajhouse at houseag.com> said:
> > I have the following procmail recipes to create a makeshift mailing list:
> >
> > :0:
> > * ^To:.*m10-update
> > * !^X-Loop: m10 at houseag.com
> > * ^Received: from wotan.hajhouse.org # accept messages from my host only
> > {
> > :0c
> > updates.mbox
> >
> > :0fh
> > | sed -e 's/^Subject: /Subject: \[M-10\] /'
> >
> > :0
> > ! `$HOME/_sendmails`
> > }
> >
> > The first recipe in the bracketed block archives to a mailbox and the third
> > forwards the message to the list of addresses produced by the script
> > _sendmails.
> >
> > The second recipe is supposed to tag the subject header of incoming messages to
> > make them easy for their recipients to identify, just a many mailing lists do.
> > It does not work! Instead the messages are mangled---the subject is completely
> > blank and the To: and From: headers are re-written. This does not happen when I
> > comment-out the second recipe.
> >
> > Offhand, I see no reason for this difference in behavior either in the
> > recipes or in the logfile. Clearly I am missing some subtlety. Can anyone
> > enlighten me?
>
> Probably not, I'm afraid.
>
> Clearly, your sed line is correct. Total shot in the dark:
>
> 1. Isn't an email considered delivered when it hits a recipe? Don't you need
> a "c" on that 2nd recipe?
The 'f' flag implies 'c' and additionally causes the following recipes to run
on the captured output of the subprocess:
Non-delivering recipes are: those that cause the output of a program or
filter to be captured back by proc mail or those that start a nesting block.
You can tell procmail to treat a delivering recipe as if it were a
non-delivering recipe by specifying the `c' flag on such a recipe. This
will make procmail generate a carbon copy of the mail by delivering it to this
recipe, yet continue processing the rcfile.
source: procmailrc(5)
> 2. How about sending the output of the 2nd recipe to an mbox to make sure
> that the 3rd recipe isn't doing anything funky?
>
> Pretty mysterious --- I agree!
Okay, I solved it.
- - if you have any of the characters in $SHELLMETAS in the string after the pipe
character, procmail passes that string to a shell to execute.
- - the default value of $SHELLMETAS includes '[', which my filter recipe included:
| sed -e 's/^Subject: /Subject: \[M-10\] /'
- - the user under which procmail ran had /bin/false as its shell for security
So of course the shell could not execute the command string. Since shell
interpretation was not actually needed or desirable in this case, I set
SHELLMETAS="" and the recipe works!
I figured this out by adding the w flag to the filter recipe, which causes
procmail to check the subprocess's exit code and complain if it is nonzero. It
did. Then I saw that the verbose log showed
procmail: Executing "sed -e 's/^Subject: /Subject: \[M-10\] /'"
procmail: Program failure (1) of "sed -e 's/^Subject: /Subject: \[M-10\] /'"
procmail: Rescue of unfiltered data succeeded
whereas it shows this if procmail executes the subprocess directly without a shell
procmail: Executing "sed,-e,s/^Subject: /Subject: \[M-10\] /"
i.e., with commas separating the arguments instead of spaces.
I consider myself lucky to have figured this one out---that answer was really
obscure.
- --
Henry House
Please don't send me HTML mail! My mail system will reject it.
The unintelligible text that may follow is a digital signature.
See <http://hajhouse.org/pgp> to find out how to use it.
My OpenPGP key: <http://hajhouse.org/hajhouse.asc>.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
iD8DBQFBcABli3lu92AVGcIRAoz2AJ9x/1TuZiJLVzLuy9T/L4+KAxfTZgCdHMVF
w9mHMtwgslYP9IgXiUCBoX8=
=ofQJ
-----END PGP SIGNATURE-----
More information about the vox-tech
mailing list