Upstream-Status: Pending [from other distro Debian] From a3410b0bc81ab03a889d9ffc14e351badf8372f1 Mon Sep 17 00:00:00 2001 From: Pierre Habouzit Date: Mon, 26 Nov 2007 16:02:04 +0100 Subject: [PATCH] Various fixes from the previous maintainer. --- xinetd/child.c | 20 +++++++++++++++++--- xinetd/service.c | 8 ++++---- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/xinetd/child.c b/xinetd/child.c index 89ee54c..48e9615 100644 --- a/xinetd/child.c +++ b/xinetd/child.c @@ -284,6 +284,7 @@ void child_process( struct server *serp ) connection_s *cp = SERVER_CONNECTION( serp ) ; struct service_config *scp = SVC_CONF( sp ) ; const char *func = "child_process" ; + int fd, null_fd; signal_default_state(); @@ -296,9 +297,22 @@ void child_process( struct server *serp ) signals_pending[0] = -1; signals_pending[1] = -1; - Sclose(0); - Sclose(1); - Sclose(2); + if ( ( null_fd = open( "/dev/null", O_RDONLY ) ) == -1 ) + { + msg( LOG_ERR, func, "open('/dev/null') failed: %m") ; + _exit( 1 ) ; + } + + for ( fd = 0 ; fd <= MAX_PASS_FD ; fd++ ) + { + if ( fd != null_fd && dup2( null_fd, fd ) == -1 ) + { + msg( LOG_ERR, func, "dup2(%d, %d) failed: %m") ; + _exit( 1 ) ; + } + } + if ( null_fd > MAX_PASS_FD ) + (void) Sclose( null_fd ) ; #ifdef DEBUG_SERVER diff --git a/xinetd/service.c b/xinetd/service.c index 3d68d78..0132d6c 100644 --- a/xinetd/service.c +++ b/xinetd/service.c @@ -745,8 +745,8 @@ static status_e failed_service(struct service *sp, return FAILED; if ( last == NULL ) { - last = SAIN( calloc( 1, sizeof(union xsockaddr) ) ); - SVC_LAST_DGRAM_ADDR(sp) = (union xsockaddr *)last; + SVC_LAST_DGRAM_ADDR(sp) = SAIN( calloc( 1, sizeof(union xsockaddr) ) ); + last = SAIN( SVC_LAST_DGRAM_ADDR(sp) ); } (void) time( ¤t_time ) ; @@ -772,8 +772,8 @@ static status_e failed_service(struct service *sp, return FAILED; if( last == NULL ) { - last = SAIN6(calloc( 1, sizeof(union xsockaddr) ) ); - SVC_LAST_DGRAM_ADDR( sp ) = (union xsockaddr *)last; + SVC_LAST_DGRAM_ADDR(sp) = SAIN6(calloc( 1, sizeof(union xsockaddr) ) ); + last = SAIN6(SVC_LAST_DGRAM_ADDR(sp)); } (void) time( ¤t_time ) ; -- 1.5.3.6.2040.g15e6