diff options
author | dinoex <dinoex@FreeBSD.org> | 2005-02-18 14:40:02 +0000 |
---|---|---|
committer | dinoex <dinoex@FreeBSD.org> | 2005-02-18 14:40:02 +0000 |
commit | a5f96534f1bdded7dc2e90213bd48917f947d4f8 (patch) | |
tree | ef476ee3efffb465e4d2816c67660c7138aa4f09 | |
parent | 59886166060ab433c1f665cded379a9cc1bd698e (diff) | |
download | FreeBSD-ports-a5f96534f1bdded7dc2e90213bd48917f947d4f8.zip FreeBSD-ports-a5f96534f1bdded7dc2e90213bd48917f947d4f8.tar.gz |
- add patch to fix connections that stay in CLOSE_WAIT
http://www.sendmail.org/patches/close_wait.p2
Submitted by: Dmitry Pryanishnikov
Obtained from: sendmail.org
-rw-r--r-- | mail/sendmail/files/patch-close_wait | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/mail/sendmail/files/patch-close_wait b/mail/sendmail/files/patch-close_wait new file mode 100644 index 0000000..d74c648 --- /dev/null +++ b/mail/sendmail/files/patch-close_wait @@ -0,0 +1,109 @@ +--- sendmail/mci.c.orig Wed Aug 4 14:11:31 2004 ++++ sendmail/mci.c Mon Jan 17 10:29:28 2005 +@@ -398,6 +398,57 @@ + + 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 + ** +--- sendmail/sendmail.h.orig Tue Nov 9 11:45:46 2004 ++++ sendmail/sendmail.h Mon Jan 17 09:39:56 2005 +@@ -728,6 +728,7 @@ + + /* 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 *)); +--- sendmail/usersmtp.c.orig Fri Jan 14 07:34:00 2005 ++++ sendmail/usersmtp.c Mon Jan 17 09:40:57 2005 +@@ -89,6 +89,7 @@ + */ + + SmtpError[0] = '\0'; ++ SmtpMsgBuffer[0] = '\0'; + CurHostName = mci->mci_host; /* XXX UGLY XXX */ + if (CurHostName == NULL) + CurHostName = MyHostName; +@@ -2899,7 +2900,10 @@ + 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 @@ + 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 @@ + /* errors on QUIT should be ignored */ + if (strncmp(SmtpMsgBuffer, "QUIT", 4) == 0) + { +- mci->mci_state = MCIS_CLOSED; ++ mci_close(mci, "reply:2"); + return -1; + } + |