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