80 lines
2.5 KiB
Diff
80 lines
2.5 KiB
Diff
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
|
|
|