This patch is for Balazs's qmail-1.03-mfcheck.4.patch, which changes the behavior a bit. Using qmail-1.03-mfcheck.4.patch, an envelope sender of "foo" is considered valid. Not seeing how anyone using mfcheck could appreciate this behavior, I've patched the patch. A new patch is available at: http://jeremy.kister.net/code/mfcheck/qmail-1.03-mfcheck.4jk.patch before the changes: 220 qmail-04.example.net ESMTP MAIL FROM: 250 ok after the changes: 220 qmail-04.example.net ESMTP MAIL FROM: 553 sorry, your envelope sender domain must exist (#5.7.1) ################## --- qmail-1.03-mfcheck.4.patch 2005-05-28 22:23:29.505574000 -0400 +++ qmail-1.03-mfcheck.4jk.patch 2005-05-29 04:07:32.653531000 -0400 @@ -45,8 +45,8 @@ Extra allowed RCPT domains. If diff -ruN qmail-1.03-orig/qmail-smtpd.c qmail-1.03/qmail-smtpd.c ---- qmail-1.03-orig/qmail-smtpd.c Mon Jun 15 12:53:16 1998 -+++ qmail-1.03/qmail-smtpd.c Fri May 28 11:24:33 2004 +--- ../qmail-1.03/qmail-smtpd.c 1998-06-15 06:53:16.000000000 -0400 ++++ qmail-smtpd.c 2005-05-29 01:14:30.187278000 -0400 @@ -23,9 +23,11 @@ #include "timeoutread.h" #include "timeoutwrite.h" @@ -79,7 +79,7 @@ bmfok = control_readfile(&bmf,"control/badmailfrom",0); if (bmfok == -1) die_control(); if (bmfok) -@@ -208,6 +216,26 @@ +@@ -208,6 +216,30 @@ return 0; } @@ -94,19 +94,23 @@ + if (!mfchk) return 0; + random = now() + (getpid() << 16); + j = byte_rchr(addr.s,addr.len,'@') + 1; -+ if (j < addr.len) { ++ if(addr.len == 1){ ++ return 0; ++ }else if (j < addr.len) { + stralloc_copys(&sa, addr.s + j); + dns_init(0); + j = dns_mxip(&ia,&sa,random); -+ if (j < 0) return j; ++ if (j < 0){ return j; ++ }else{ return 0; } ++ }else{ ++ return -2; + } -+ return 0; +} + int addrallowed() { int r; -@@ -241,6 +269,11 @@ +@@ -241,6 +273,11 @@ { if (!addrparse(arg)) { err_syntax(); return; } flagbarf = bmfcheck();