d'oh!  the return value from catchalarm looks reversed.  from notify(2)

          [...] A handler must
          return a non-zero number if the note was recognized (and
          resolved); otherwise it must return zero.  When the system
  
i think you're getting into some sort of note loop.  i think it would
be helpful to log all notes.  i would try something like this

static int
catchalarm(void *, char *msg)
{
        static int chattycathy;

        if(chattycathy++ > 5)
                return 0;
        if(senders.first && rcvers.first)
                syslog(0, "smtpd", "note: %s->%s: %s",
                        s_to_c(senders.first->p),
                        s_to_c(rcvers.first->p), msg);
        else
                syslog(0, "smtpd", "note: %s", msg);
        if(pp){
                syskillpg(pp->pid);
                pp = 0;
        }
        return strstr(msg, "alarm") != 0;
}

but at a minimum, i would reverse the return values.

- erik


Reply via email to