Thanks Tomas -- I just checked in 6345b62e82ef68e6d8b9afb011401e935f06ee0e to my tree which fixes this bug in a slightly different way.
-R Tomas Lee wrote: > > I found a minor bug in plugins/check_badmailfrom, and I didn't know > where to send it, so I'm posting it here. > > When a badmailfrom issues the "RCPT TO" command, a 550 error code is > sent with the reason it was rejected. The default reason is supposed > to be "sorry, your envelope sender is in my badmailfrom list". > > An extension to plugins/check_badmailfrom to allows people to put in a > reason for specific badmailfroms to override the default reason. > (commit cab7466c08fec71c48cba5a77beee08ec3b190a4) You put the reason > on the same line as the envelope sender you wish to deny, separated by > whitespace. > > The problem is that if you don't put in a reason (which is the normal > case), the default reason doesn't get used. Instead it uses the > envelope sender as the reason. > > That's because on line 41, where it, $reason can never be empty. The > line in config/badmailfrom would have to end in whitespace, which > isn't normal, and whitespace is trimmed at the beginning and end of > the line before it got there anyway. (It could be a false value, but > that would mean that "0" should be the reason, not the default.) > > It might not be a big deal what reason you give in this case, but > someone cared enough about it to write code to allow per-line reasons, > so there must be some people out there who do care. > > Here's the patch I used to correct this minor bug: > > > --- original/plugins/check_badmailfrom 2009-04-02 22:48:33.000000000 -0700 > +++ revision/plugins/check_badmailfrom 2009-06-19 23:18:27.000000000 -0700 > @@ -37,9 +37,10 @@ > my $from = lc($sender->user) . '@' . $host; > > for my $bad (@badmailfrom) { > - my $reason = $bad; > - $reason =~ s/^\s*(\S+)[\t\s]+//; > - $reason = "sorry, your envelope sender is in my badmailfrom list" unless > $reason; > + my $reason = "sorry, your envelope sender is in my badmailfrom list"; > + if ($bad =~ /^\s*\S+[\t\s]+(.*)/) { > + $reason = $1; > + } > $bad =~ s/^\s*(\S+).*/$1/; > next unless $bad; > $bad = lc $bad;