| Upstream-Status: Pending [from other distro Debian] |
| |
| From a3410b0bc81ab03a889d9ffc14e351badf8372f1 Mon Sep 17 00:00:00 2001 |
| From: Pierre Habouzit <madcoder@debian.org> |
| 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 |
| |