mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-12-04 12:28:58 +00:00
Commit patch from sendmail.org web site for socket close bug:
http://www.sendmail.org/patches/close_wait.p2 This is being put in the vendor branch as it is in the vendor's repo.
This commit is contained in:
parent
b37a166a40
commit
27bec48138
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/vendor/sendmail/dist/; revision=141867
@ -398,6 +398,57 @@ mci_get(host, m)
|
||||
|
||||
return mci;
|
||||
}
|
||||
|
||||
/*
|
||||
** MCI_CLOSE -- (forcefully) close files used for a connection.
|
||||
** Note: this is a last resort, usually smtpquit() or endmailer()
|
||||
** should be used to close a connection.
|
||||
**
|
||||
** Parameters:
|
||||
** mci -- the connection to close.
|
||||
** where -- where has this been called?
|
||||
**
|
||||
** Returns:
|
||||
** none.
|
||||
*/
|
||||
|
||||
void
|
||||
mci_close(mci, where)
|
||||
MCI *mci;
|
||||
char *where;
|
||||
{
|
||||
bool dumped;
|
||||
|
||||
if (mci == NULL)
|
||||
return;
|
||||
dumped = false;
|
||||
if (mci->mci_out != NULL)
|
||||
{
|
||||
if (tTd(56, 1))
|
||||
{
|
||||
sm_dprintf("mci_close: mci_out!=NULL, where=%s\n",
|
||||
where);
|
||||
mci_dump(sm_debug_file(), mci, false);
|
||||
dumped = true;
|
||||
}
|
||||
(void) sm_io_close(mci->mci_out, SM_TIME_DEFAULT);
|
||||
mci->mci_out = NULL;
|
||||
}
|
||||
if (mci->mci_in != NULL)
|
||||
{
|
||||
if (tTd(56, 1))
|
||||
{
|
||||
sm_dprintf("mci_close: mci_in!=NULL, where=%s\n",
|
||||
where);
|
||||
if (!dumped)
|
||||
mci_dump(sm_debug_file(), mci, false);
|
||||
}
|
||||
(void) sm_io_close(mci->mci_in, SM_TIME_DEFAULT);
|
||||
mci->mci_in = NULL;
|
||||
}
|
||||
mci->mci_state = MCIS_CLOSED;
|
||||
}
|
||||
|
||||
/*
|
||||
** MCI_NEW -- allocate new MCI structure
|
||||
**
|
||||
|
@ -728,6 +728,7 @@ MCI
|
||||
|
||||
/* functions */
|
||||
extern void mci_cache __P((MCI *));
|
||||
extern void mci_close __P((MCI *, char *where));
|
||||
extern void mci_dump __P((SM_FILE_T *, MCI *, bool));
|
||||
extern void mci_dump_all __P((SM_FILE_T *, bool));
|
||||
extern void mci_flush __P((bool, MCI *));
|
||||
|
@ -89,6 +89,7 @@ smtpinit(m, mci, e, onlyhelo)
|
||||
*/
|
||||
|
||||
SmtpError[0] = '\0';
|
||||
SmtpMsgBuffer[0] = '\0';
|
||||
CurHostName = mci->mci_host; /* XXX UGLY XXX */
|
||||
if (CurHostName == NULL)
|
||||
CurHostName = MyHostName;
|
||||
@ -2899,7 +2900,10 @@ smtpquit(m, mci, e)
|
||||
char *oldcurhost;
|
||||
|
||||
if (mci->mci_state == MCIS_CLOSED)
|
||||
{
|
||||
mci_close(mci, "smtpquit:1");
|
||||
return;
|
||||
}
|
||||
|
||||
oldcurhost = CurHostName;
|
||||
CurHostName = mci->mci_host; /* XXX UGLY XXX */
|
||||
@ -3133,7 +3137,7 @@ reply(m, mci, e, timeout, pfunc, enhstat, rtype)
|
||||
if (strncmp(SmtpMsgBuffer, "QUIT", 4) == 0)
|
||||
{
|
||||
errno = mci->mci_errno;
|
||||
mci->mci_state = MCIS_CLOSED;
|
||||
mci_close(mci, "reply:1");
|
||||
return -1;
|
||||
}
|
||||
mci->mci_state = MCIS_ERROR;
|
||||
@ -3158,7 +3162,7 @@ reply(m, mci, e, timeout, pfunc, enhstat, rtype)
|
||||
/* errors on QUIT should be ignored */
|
||||
if (strncmp(SmtpMsgBuffer, "QUIT", 4) == 0)
|
||||
{
|
||||
mci->mci_state = MCIS_CLOSED;
|
||||
mci_close(mci, "reply:2");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user