summaryrefslogtreecommitdiff
path: root/mail/sendmail
diff options
context:
space:
mode:
authorDirk Meyer <dinoex@FreeBSD.org>2005-02-18 14:40:02 +0000
committerDirk Meyer <dinoex@FreeBSD.org>2005-02-18 14:40:02 +0000
commit814ab79c6a76ae07cfcb498663d27b53637815c0 (patch)
tree4f7a88cc53c7407d5085c95fa8f9792d1c880c17 /mail/sendmail
parent- catch up autoconf changes (diff)
- 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
Notes
Notes: svn path=/head/; revision=129181
Diffstat (limited to 'mail/sendmail')
-rw-r--r--mail/sendmail/files/patch-close_wait109
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 000000000000..d74c648328f3
--- /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;
+ }
+