Your message dated Mon, 11 Dec 2006 16:55:10 +0100
with message-id <[EMAIL PROTECTED]>
has caused the Debian Bug report #312164,
regarding feature greet_pause produces false positives on empty connections
to be marked as having been forwarded to the upstream software
author(s) [EMAIL PROTECTED]

(NB: If you are a system administrator and have no idea what I am
talking about this indicates a serious mail system misconfiguration
somewhere.  Please contact me immediately.)

Debian bug tracking system administrator
(administrator, Debian Bugs database)

--- Begin Message ---
tag 312164 patch
stop

Hello,

As discussed earlier on comp.mail.sendmail [1], the greet_pause code
produces false positives for connections immediately closed by the
client.  I.e. Sendmail logs

    rejecting commands from X due to pre-greeting traffic

when it would be expected to log

    X did not issue MAIL/EXPN/VRFY/ETRN during connection to stdin

One way of fixing this while preserving the existing I/O layering is to
check whether sm_io_getc() returns EOF, and, if not, to undo it with
sm_io_ungetc().  Patch for 8.13.8 below.

[1] <http://google.com/group/comp.mail.sendmail/msg/224f3a9253c21e88>

Thanks,

Matej
--- sendmail-8.13.8~/sendmail/srvrsmtp.c
+++ sendmail-8.13.8/sendmail/srvrsmtp.c
@@ -936,6 +936,7 @@
 #if _FFR_LOG_GREET_PAUSE
                        struct timeval bp, ep, tp; /* {begin,end,total}pause */
 #endif /* _FFR_LOG_GREET_PAUSE */
+                       int eoftest;
 
                        /* pause for a moment */
                        timeout.tv_sec = msecs / 1000;
@@ -957,8 +958,10 @@
 #endif /* _FFR_LOG_GREET_PAUSE */
                        if (select(fd + 1, FDSET_CAST &readfds,
                            NULL, NULL, &timeout) > 0 &&
-                           FD_ISSET(fd, &readfds))
+                           FD_ISSET(fd, &readfds) &&
+                           (eoftest = sm_io_getc(InChannel, SM_TIME_DEFAULT)) 
!= SM_IO_EOF)
                        {
+                               sm_io_ungetc(InChannel, SM_TIME_DEFAULT, 
eoftest);
 #if _FFR_LOG_GREET_PAUSE
                                gettimeofday(&ep, NULL);
                                timersub(&ep, &bp, &tp);

--- End Message ---

Reply via email to