diff -u ../qmail-1.03/qmail-smtpd.c ./qmail-smtpd.c
--- ../qmail-1.03/qmail-smtpd.c	1998-06-15 06:53:16.000000000 -0400
+++ ./qmail-smtpd.c	2006-06-06 10:27:26.000000000 -0400
@@ -80,15 +80,23 @@
 char *remotehost;
 char *remoteinfo;
 char *local;
+char *localip;
 char *relayclient;
 
 stralloc helohost = {0};
 char *fakehelo; /* pointer into helohost, or 0 */
 
-void dohelo(arg) char *arg; {
+int dohelo(arg) char *arg; {
+  int i;
+
   if (!stralloc_copys(&helohost,arg)) die_nomem(); 
   if (!stralloc_0(&helohost)) die_nomem(); 
   fakehelo = case_diffs(remotehost,helohost.s) ? helohost.s : 0;
+  if (case_equals(local,helohost.s)) return 1;
+  if (case_equals(localip,helohost.s)) return 1;
+  for (i = 0; i < helohost.len-1; i++)
+    if (helohost.s[i] == '.') return 0;
+  return 1;
 }
 
 int liphostok = 0;
@@ -125,7 +133,8 @@
   remoteip = env_get("TCPREMOTEIP");
   if (!remoteip) remoteip = "unknown";
   local = env_get("TCPLOCALHOST");
-  if (!local) local = env_get("TCPLOCALIP");
+  localip = env_get("TCPLOCALIP");
+  if (!local) local = localip;
   if (!local) local = "unknown";
   remotehost = env_get("TCPREMOTEHOST");
   if (!remotehost) remotehost = "unknown";
@@ -218,29 +227,32 @@
 
 
 int seenmail = 0;
-int flagbarf; /* defined if seenmail */
+int flagbarf = 0;
 stralloc mailfrom = {0};
 stralloc rcptto = {0};
 
 void smtp_helo(arg) char *arg;
 {
   smtp_greet("250 "); out("\r\n");
-  seenmail = 0; dohelo(arg);
+  seenmail = 0;
+  flagbarf |= dohelo(arg);
 }
 void smtp_ehlo(arg) char *arg;
 {
   smtp_greet("250-"); out("\r\n250-PIPELINING\r\n250 8BITMIME\r\n");
-  seenmail = 0; dohelo(arg);
+  seenmail = 0;
+  flagbarf |= dohelo(arg);
 }
 void smtp_rset()
 {
   seenmail = 0;
+  flagbarf = 0;
   out("250 flushed\r\n");
 }
 void smtp_mail(arg) char *arg;
 {
   if (!addrparse(arg)) { err_syntax(); return; }
-  flagbarf = bmfcheck();
+  flagbarf |= bmfcheck();
   seenmail = 1;
   if (!stralloc_copys(&rcptto,"")) die_nomem();
   if (!stralloc_copys(&mailfrom,addr.s)) die_nomem();
@@ -373,6 +385,7 @@
   if (!seenmail) { err_wantmail(); return; }
   if (!rcptto.len) { err_wantrcpt(); return; }
   seenmail = 0;
+  flagbarf = 0;
   if (databytes) bytestooverflow = databytes + 1;
   if (qmail_open(&qqt) == -1) { err_qqt(); return; }
   qp = qmail_qp(&qqt);
