Fix problem with fd 0 getting closed unintentionally by closelog.
authorPaul Mackerras <paulus@samba.org>
Tue, 19 Dec 2006 07:48:19 +0000 (07:48 +0000)
committerPaul Mackerras <paulus@samba.org>
Tue, 19 Dec 2006 07:48:19 +0000 (07:48 +0000)
Patch from Alan Curry in
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=298582.

Basically, openlog was getting fd 0 for the log in some circumstances,
and safe_fork() was doing closelog after getting the desired stdin
dup'd to fd 0.  This fixes it by doing the closelog a little earlier.

pppd/main.c

index 9c4cb46a8dc7e5bc45d44305ef6de54d12789fa7..7924b5df7dbb583ba4a1385f8ca4f9d436333bc9 100644 (file)
@@ -66,7 +66,7 @@
  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#define RCSID  "$Id: main.c,v 1.153 2006/06/04 03:52:50 paulus Exp $"
+#define RCSID  "$Id: main.c,v 1.154 2006/12/19 07:48:19 paulus Exp $"
 
 #include <stdio.h>
 #include <ctype.h>
@@ -1567,6 +1567,8 @@ safe_fork(int infd, int outfd, int errfd)
        if (errfd == 0 || errfd == 1)
                errfd = dup(errfd);
 
+       closelog();
+
        /* dup the in, out, err fds to 0, 1, 2 */
        if (infd != 0)
                dup2(infd, 0);
@@ -1575,7 +1577,6 @@ safe_fork(int infd, int outfd, int errfd)
        if (errfd != 2)
                dup2(errfd, 2);
 
-       closelog();
        if (log_to_fd > 2)
                close(log_to_fd);
        if (the_channel->close)