From: Todd C. Miller <Todd.Miller@courtesan.com>
Date: Tue, 14 Jan 2014 17:54:56 +0000 (-0700)
Subject: If not logging I/O we may get EOF when the command is executed and
X-Git-Tag: SUDO_1_8_9p4~5
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4248b0366cf9dcebda5d814375425dc09883093e;p=sudo

If not logging I/O we may get EOF when the command is executed and
the other end of the backchannel is closed.  Just remove the
backchannel event in this case or we will continue to receive
the event.  Bug #631

--HG--
branch : 1.8
---

diff --git a/src/exec.c b/src/exec.c
index 705573e19..744ee615b 100644
--- a/src/exec.c
+++ b/src/exec.c
@@ -230,11 +230,14 @@ backchannel_cb(int fd, int what, void *v)
 	    /* Short read or EOF. */
 	    sudo_debug_printf(SUDO_DEBUG_ERROR,
 		"failed to read child status: %s", n ? "short read" : "EOF");
-	    /*
-	     * If not logging I/O we may get EOF when the command is
-	     * executed and sv is closed.  It is safe to ignore this.
-	     */
-	    if (ec->log_io || n != 0) {
+	    if (!ec->log_io && n == 0) {
+		/*
+		 * If not logging I/O we may get EOF when the command is
+		 * executed and the other end of the backchannel is closed.
+		 * Just remove the event in this case.
+		 */
+		(void)sudo_ev_del(ec->evbase, backchannel_event);
+	    } else {
 		/* XXX - need new CMD_ type for monitor errors. */
 		errno = n ? EIO : ECONNRESET;
 		ec->cstat->type = CMD_ERRNO;