On Wed, 9 Jul 2003, Richard Gilbert wrote:
> I came across this message while searching the archive to answer the
> question as to why callout sender verification was occasionally failing
> with an apparently illegal response to the RSET command.
The patch below should fix this problem. Feedback appreciated...
Philip
--
Philip Hazel University of Cambridge Computing Service,
ph10@??? Cambridge, England. Phone: +44 1223 334714.
*** exim-4.20/src/verify.c Mon May 12 14:39:23 2003
--- verify.c Tue Jul 15 15:12:09 2003
***************
*** 463,471 ****
state to send RCPT. Unless there's some problem such as a dropped
connection, we expect to succeed, because the commands succeeded above. */
! else
{
! if (errno == 0 && randombuffer[0] == '5')
new_domain_record.random_result = ccache_reject;
done =
--- 463,471 ----
state to send RCPT. Unless there's some problem such as a dropped
connection, we expect to succeed, because the commands succeeded above. */
! else if (errno == 0)
{
! if (randombuffer[0] == '5')
new_domain_record.random_result = ccache_reject;
done =
***************
*** 477,483 ****
smtp_read_response(&inblock, responsebuffer, sizeof(responsebuffer),
'2', callout);
}
! } /* Random check */
/* If the host is accepting all local parts, as determined by the "random"
check, we don't need to waste time doing any further checking. */
--- 477,484 ----
smtp_read_response(&inblock, responsebuffer, sizeof(responsebuffer),
'2', callout);
}
! else done = FALSE; /* Some timeout/connection problem */
! } /* Random check */
/* If the host is accepting all local parts, as determined by the "random"
check, we don't need to waste time doing any further checking. */
***************
*** 531,557 ****
don't give the IP address because this may be an internal host whose identity
is not to be widely broadcast. */
! if (!done && errno == 0)
{
! if (*responsebuffer == 0) Ustrcpy(responsebuffer, US"connection dropped");
! addr->message =
! string_sprintf("response to \"%s\" from %s [%s] was: %s",
! big_buffer, host->name, host->address,
! string_printing(responsebuffer));
! addr->user_message = is_recipient?
! string_sprintf("Callout verification failed:\n%s", responsebuffer)
! :
! string_sprintf("Called: %s\nSent: %s\nResponse: %s",
! host->address, big_buffer, responsebuffer);
! /* Hard rejection ends the process */
! if (responsebuffer[0] == '5') /* Address rejected */
! {
! yield = FAIL;
! done = TRUE;
}
}
--- 532,565 ----
don't give the IP address because this may be an internal host whose identity
is not to be widely broadcast. */
! if (!done)
{
! if (errno == ETIMEDOUT)
! {
! DEBUG(D_verify) debug_printf("SMTP timeout\n");
! }
! else if (errno == 0)
! {
! if (*responsebuffer == 0) Ustrcpy(responsebuffer, US"connection dropped");
! addr->message =
! string_sprintf("response to \"%s\" from %s [%s] was: %s",
! big_buffer, host->name, host->address,
! string_printing(responsebuffer));
! addr->user_message = is_recipient?
! string_sprintf("Callout verification failed:\n%s", responsebuffer)
! :
! string_sprintf("Called: %s\nSent: %s\nResponse: %s",
! host->address, big_buffer, responsebuffer);
! /* Hard rejection ends the process */
! if (responsebuffer[0] == '5') /* Address rejected */
! {
! yield = FAIL;
! done = TRUE;
! }
}
}