2

I have this code in /etc/procmailrc:

DROPPRIVS=yes

DEFAULT=$HOME/Maildir/

:0
* ? /usr/bin/test -d $DEFAULT || /bin/mkdir $DEFAULT
{ }
:0 E
{
        # Bail out if directory could not be created
        EXITCODE=127
        HOST=bail.out
}

MAILDIR=$HOME/Maildir/

But, when the directory already exists, sometimes it will send a return email with this error: 554 5.3.0 unknown mailer error 127. The email still gets delivered, mind you, but it sends back an error code to the sending user as well.

I fixed this temporarily by commenting out the EXITCODE and HOST lines, but I'd like to know if there is a better solution.

I found this block of code in multiple places across the net, but couldn't really find why this error was coming back to me. It seems to happen when I send an email to a local user. Sometimes the user has a .forward file to send it on to other users, sometimes not, but the result has been the same. I also tried removing DROPPRIVS, just in case it was messing up the forwarding, but it did not seem to affect it.

  • Is the line starting with * ? /usr/bin/test a problem?
  • The * signifies a regex, but the ? makes it return an integer value, correct?
  • What is the integer being matched against? Or is it just comparing the integer return value?
  • Do I need a space between the two blocks?

Thanks for the help.

bradlis7
  • 353
  • 1
  • 5
  • 17

2 Answers2

1

I'd bet on some kind of race condition. Does it matter if you wrap up the /usr/bin/test line into a little shell script? like:

* ? /usr/local/bin/make-sure-exists-dir $DEFAULT

with a make-sure-exists-dir that does:

/usr/bin/test -d "$1" || mkdir "$1"

also, in looking at the manpage for mkdir, -p doesn't error on existence, so you could just do:

* ? mkdir -p $DEFAULT
pjz
  • 10,595
  • 1
  • 32
  • 40
  • Good thinking, but it's been a while, so I'll need to put this back on my todo list. If I get a chance to try it out, I will accept it if your answer comes back to be right. – bradlis7 May 03 '10 at 20:43
0

Actually the dovecot instructions for procmail is what I was looking for.

# file: /etc/procmailrc
# system-wide settings for procmail
SHELL="/bin/bash"
SENDMAIL="/usr/sbin/sendmail -oi -t"
LOGFILE="/var/log/procmail.log"
DROPPRIVS="yes"
DELIVER="/usr/lib/dovecot/deliver"
# fallback:
DEFAULT="$HOME/Maildir/"
MAILDIR="$HOME/Maildir/"
:0 w
* ^X-Spam-Status: Yes
| $DELIVER -m spam
:0 w
| $DELIVER

Thanks for the assistance.

bradlis7
  • 353
  • 1
  • 5
  • 17