Compare commits

..

No commits in common. "c10s" and "c8s" have entirely different histories.
c10s ... c8s

22 changed files with 2161 additions and 4 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
xinetd-2.3.14.tar.gz
/xinetd-2.3.15.tar.gz

View File

@ -1,3 +0,0 @@
# Package Not Available
This package is not available on CentOS Stream 10.
It may be available on another branch.

View File

@ -1 +0,0 @@
xinetd package is retired on branch c10s for CS-2551

6
gating.yaml Normal file
View File

@ -0,0 +1,6 @@
--- !Policy
product_versions:
- rhel-8
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1.functional}

1
sources Normal file
View File

@ -0,0 +1 @@
SHA512 (xinetd-2.3.15.tar.gz) = 9d6fee1fbc90329629d84086ae7de5cd51c25af7b68e52aa704d6f74bee5f0e3d54ca1bcf780f90f74ddc8d336ae0abb5e5e368d43c426a26b8dd2c4676d26aa

View File

@ -0,0 +1,251 @@
--- xinetd-2.3.14/configure.in 2009-07-27 13:27:59.000000000 +0200
+++ xinetd-2.3.14-mod/configure.in 2009-07-29 10:05:44.000000000 +0200
@@ -20,34 +20,34 @@ AC_CHECK_FUNCS(ecvt, ,
AC_CHECK_FUNCS(gcvt, ,
AC_CHECK_LIB(m, gcvt))
-AC_CHECK_FUNC(strerror, [AC_DEFINE(HAVE_STRERROR)])
-AC_CHECK_FUNC(strcasecmp, [AC_DEFINE(HAVE_STRCASECMP)])
+AC_CHECK_FUNC(strerror, [AC_DEFINE(HAVE_STRERROR, 1, "")])
+AC_CHECK_FUNC(strcasecmp, [AC_DEFINE(HAVE_STRCASECMP, 1, "")])
AC_CHECK_FUNC(socket, ,
AC_CHECK_LIB(socket, socket, ,
AC_CHECK_LIB(nsl, socket)))
AC_CHECK_FUNC(inet_aton, ,
AC_CHECK_LIB(nsl, inet_aton, ,
AC_CHECK_LIB(socket, inet_aton, ,
- AC_CHECK_LIB(resolv, inet_aton, ,[AC_DEFINE(NO_INET_ATON)]))))
-AC_CHECK_FUNC(setenv,[AC_DEFINE(HAVE_SETENV)])
-AC_CHECK_FUNC(strsignal, [AC_DEFINE(HAVE_STRSIGNAL)])
-AC_CHECK_LIB(c, sys_siglist, [AC_DEFINE(HAVE_SYS_SIGLIST)])
-AC_CHECK_FUNC(gai_strerror,[AC_DEFINE(HAVE_GAI_STRERROR)])
-AC_CHECK_FUNC(freeaddrinfo,[AC_DEFINE(HAVE_FREEADDRINFO)])
-AC_CHECK_FUNC(getaddrinfo,[AC_DEFINE(HAVE_GETADDRINFO)])
+ AC_CHECK_LIB(resolv, inet_aton, ,[AC_DEFINE(NO_INET_ATON, 1, "")]))))
+AC_CHECK_FUNC(setenv,[AC_DEFINE(HAVE_SETENV, 1, "")])
+AC_CHECK_FUNC(strsignal, [AC_DEFINE(HAVE_STRSIGNAL, 1, "")])
+AC_CHECK_LIB(c, sys_siglist, [AC_DEFINE(HAVE_SYS_SIGLIST, 1, "")])
+AC_CHECK_FUNC(gai_strerror,[AC_DEFINE(HAVE_GAI_STRERROR, 1, "")])
+AC_CHECK_FUNC(freeaddrinfo,[AC_DEFINE(HAVE_FREEADDRINFO, 1, "")])
+AC_CHECK_FUNC(getaddrinfo,[AC_DEFINE(HAVE_GETADDRINFO, 1, "")])
AC_CHECK_HEADERS(sys/types.h sys/termios.h termios.h sys/ioctl.h sys/select.h rpc/rpc.h rpc/rpcent.h sys/file.h ftw.h machine/reg.h netdb.h)
-AC_CHECK_HEADER(sys/resource.h, [AC_DEFINE(HAVE_SYS_RESOURCE_H)])
-AC_CHECK_HEADER(arpa/inet.h, [AC_DEFINE(HAVE_ARPA_INET_H)])
-AC_CHECK_HEADER(grp.h, [AC_DEFINE(HAVE_GRP_H)])
-AC_CHECK_HEADER(rpc/pmap_clnt.h, [AC_DEFINE(HAVE_RPC_PMAP_CLNT_H)])
-AC_CHECK_HEADER(sys/socket.h, [AC_DEFINE(HAVE_SYS_SOCKET_H)])
-AC_CHECK_HEADER(sys/signal.h, [AC_DEFINE(HAVE_SYS_SIGNAL_H)])
-AC_CHECK_HEADER(crypt.h, [AC_DEFINE(HAVE_CRYPT_H)])
-AC_CHECK_HEADER(stdint.h, [AC_DEFINE(HAVE_STDINT_H)])
-AC_CHECK_HEADER(stdbool.h, [AC_DEFINE(HAVE_STDBOOL_H)])
-AC_CHECK_HEADER(sys/filio.h, [AC_DEFINE(HAVE_SYS_FILIO_H)])
-AC_CHECK_HEADER(DNSServiceDiscovery/DNSServiceDiscovery.h, [AC_DEFINE(HAVE_DNSREGISTRATION) AC_DEFINE(HAVE_MDNS)])
+AC_CHECK_HEADER(sys/resource.h, [AC_DEFINE(HAVE_SYS_RESOURCE_H, 1, "")])
+AC_CHECK_HEADER(arpa/inet.h, [AC_DEFINE(HAVE_ARPA_INET_H, 1, "")])
+AC_CHECK_HEADER(grp.h, [AC_DEFINE(HAVE_GRP_H, 1, "")])
+AC_CHECK_HEADER(rpc/pmap_clnt.h, [AC_DEFINE(HAVE_RPC_PMAP_CLNT_H, 1, "")])
+AC_CHECK_HEADER(sys/socket.h, [AC_DEFINE(HAVE_SYS_SOCKET_H, 1, "")])
+AC_CHECK_HEADER(sys/signal.h, [AC_DEFINE(HAVE_SYS_SIGNAL_H, 1, "")])
+AC_CHECK_HEADER(crypt.h, [AC_DEFINE(HAVE_CRYPT_H, 1, "")])
+AC_CHECK_HEADER(stdint.h, [AC_DEFINE(HAVE_STDINT_H, 1, "")])
+AC_CHECK_HEADER(stdbool.h, [AC_DEFINE(HAVE_STDBOOL_H, 1, "")])
+AC_CHECK_HEADER(sys/filio.h, [AC_DEFINE(HAVE_SYS_FILIO_H, 1, "")])
+AC_CHECK_HEADER(DNSServiceDiscovery/DNSServiceDiscovery.h, [AC_DEFINE(HAVE_DNSREGISTRATION, 1, "") AC_DEFINE(HAVE_MDNS, 1, "")])
AC_ARG_WITH(howl, [ --with-howl=PATH Compile in howl support.
PATH is the prefix where howl is installed,
@@ -56,7 +56,7 @@ AC_ARG_WITH(howl, [ --with-howl=PATH
OLDLDFLAGS=$LDFLAGS; LDFLAGS="-L$withval/lib/ $LDFLAGS";
OLDCPPFLAGS=$CPPFLAGS; CPPFLAGS="-I$withval/include/howl/ $CPPFLAGS";
AC_CHECK_HEADER($withval/include/howl/howl.h,
- [AC_DEFINE(HAVE_HOWL) AC_DEFINE(HAVE_MDNS)],
+ [AC_DEFINE(HAVE_HOWL, 1, "") AC_DEFINE(HAVE_MDNS, 1, "")],
[CFLAGS=$OLDCFLAGS; LDFLAGS=$OLDLDFLAGS; CPPFLAGS=$OLDCPPFLAGS;])
AC_CHECK_LIB(howl, sw_discovery_publish, [LIBS="-lhowl $LIBS"], [
OLDLIBS=$LIBS; LIBS="-lpthread $LIBS";
@@ -88,7 +88,7 @@ AC_CACHE_CHECK([for struct addrinfo], ac
)
])
if test "x$ac_cv_have_struct_addrinfo" = "xyes" ; then
- AC_DEFINE(HAVE_STRUCT_ADDRINFO)
+ AC_DEFINE(HAVE_STRUCT_ADDRINFO, 1, "")
fi
AC_CACHE_CHECK([for struct in6_addr], ac_cv_have_struct_in6_addr, [
@@ -103,7 +103,7 @@ AC_CACHE_CHECK([for struct in6_addr], ac
)
])
if test "x$ac_cv_have_struct_in6_addr" = "xyes" ; then
- AC_DEFINE(HAVE_STRUCT_IN6_ADDR)
+ AC_DEFINE(HAVE_STRUCT_IN6_ADDR, 1, "")
fi
AC_CACHE_CHECK([for struct sockaddr_in6], ac_cv_have_struct_sockaddr_in6, [
@@ -118,7 +118,7 @@ AC_CACHE_CHECK([for struct sockaddr_in6]
)
])
if test "x$ac_cv_have_struct_sockaddr_in6" = "xyes" ; then
- AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)
+ AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6, 1, "")
fi
AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_have_struct_sockaddr_storage, [
@@ -133,15 +133,15 @@ AC_CACHE_CHECK([for struct sockaddr_stor
)
])
if test "x$ac_cv_have_struct_sockaddr_storage" = "xyes" ; then
- AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)
+ AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1, "")
fi
case "$target_os" in
solaris*)
- AC_DEFINE(N0_SIGLIST)
- AC_DEFINE(solaris)
+ AC_DEFINE(N0_SIGLIST, 1, "")
+ AC_DEFINE(solaris, 1, "")
AC_MSG_CHECKING(whether to compile in loadavg)
AC_ARG_WITH(loadavg,
@@ -153,12 +153,12 @@ solaris*)
yes)
AC_MSG_RESULT(yes)
AC_CHECK_LIB(kstat, main)
- AC_CHECK_HEADER(kstat.h, [AC_DEFINE(HAVE_KSTAT_H)])
- AC_DEFINE(HAVE_LOADAVG)
+ AC_CHECK_HEADER(kstat.h, [AC_DEFINE(HAVE_KSTAT_H, 1, "")])
+ AC_DEFINE(HAVE_LOADAVG, 1, "")
;;
*)
AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_LOADAVG)
+ AC_DEFINE(HAVE_LOADAVG, 1, "")
;;
esac ], AC_MSG_RESULT(no) )
;;
@@ -172,11 +172,11 @@ osf*)
;;
yes)
AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_LOADAVG)
+ AC_DEFINE(HAVE_LOADAVG, 1, "")
;;
*)
AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_LOADAVG)
+ AC_DEFINE(HAVE_LOADAVG, 1, "")
;;
esac ], AC_MSG_RESULT(no))
;;
@@ -191,18 +191,18 @@ linux*|freebsd*)
;;
yes)
AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_LOADAVG)
+ AC_DEFINE(HAVE_LOADAVG, 1, "")
;;
*)
AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_LOADAVG)
+ AC_DEFINE(HAVE_LOADAVG, 1, "")
;;
esac ], AC_MSG_RESULT(no))
;;
darwin* | "Mac OS"*)
ac_cv_prog_RANLIB="ranlib"
# AC_CHECK_FUNCS doesn't look in the proper header file...
- AC_DEFINE(HAVE_ISATTY)
+ AC_DEFINE(HAVE_ISATTY, 1, "")
CFLAGS="$CFLAGS -no-cpp-precomp"
AC_MSG_CHECKING(whether to compile in loadavg)
AC_ARG_WITH(loadavg,,
@@ -212,11 +212,11 @@ darwin* | "Mac OS"*)
;;
yes)
AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_LOADAVG)
+ AC_DEFINE(HAVE_LOADAVG, 1, "")
;;
*)
AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_LOADAVG)
+ AC_DEFINE(HAVE_LOADAVG, 1, "")
;;
esac ], AC_MSG_RESULT(no))
;;
@@ -229,13 +229,13 @@ darwin* | "Mac OS"*)
;;
yes)
AC_MSG_RESULT(yes)
- AC_DEFINE(bsdi)
- AC_DEFINE(HAVE_LOADAVG)
+ AC_DEFINE(bsdi, 1, "")
+ AC_DEFINE(HAVE_LOADAVG, 1, "")
;;
*)
AC_MSG_RESULT(yes)
- AC_DEFINE(bsdi)
- AC_DEFINE(HAVE_LOADAVG)
+ AC_DEFINE(bsdi, 1, "")
+ AC_DEFINE(HAVE_LOADAVG, 1, "")
;;
esac ], AC_MSG_RESULT(no))
;;
@@ -245,7 +245,7 @@ esac
AC_CHECK_LIB(c, crypt, [:], [
AC_CHECK_LIB(crypt, crypt, [
LIBS="-lcrypt $LIBS"
- AC_DEFINE(HAVE_LIBCRYPT) ], []) ])
+ AC_DEFINE(HAVE_LIBCRYPT, 1, "") ], []) ])
AC_CHECK_LIB(m, log10, [ LIBS="-lm $LIBS" ], [])
@@ -263,16 +263,16 @@ AC_ARG_WITH(libwrap,
yes)
AC_MSG_RESULT(yes)
AC_CHECK_LIB(wrap, request_init, [
- AC_DEFINE(LIBWRAP)
+ AC_DEFINE(LIBWRAP, 1, "")
WRAPLIBS="-lwrap"
- AC_DEFINE(HAVE_LIBWRAP) ])
+ AC_DEFINE(HAVE_LIBWRAP, 1, "") ])
AC_CHECK_LIB(nsl, yp_get_default_domain, [
WRAPLIBS="$WRAPLIBS -lnsl" ])
LIBS="$WRAPLIBS $LIBS"
;;
*)
AC_MSG_RESULT(yes)
- AC_DEFINE(LIBWRAP)
+ AC_DEFINE(LIBWRAP, 1, "")
if test -d "$withval"; then
WRAPLIBS="-L$withval -lwrap"
else
@@ -299,13 +299,13 @@ AC_ARG_WITH(labeled-networking,
yes)
AC_MSG_RESULT(yes)
AC_CHECK_LIB(selinux, setexeccon, [
- AC_DEFINE(LABELED_NET)
+ AC_DEFINE(LABELED_NET, 1, "")
LABELLIBS="-lselinux" ])
LIBS="$LABELLIBS $LIBS"
;;
*)
AC_MSG_RESULT(yes)
- AC_DEFINE(LABELED_NET)
+ AC_DEFINE(LABELED_NET, 1, "")
if test -d "$withval"; then
LABELLIBS="-L$withval -lselinux"
else
--- xinetd-2.3.14/aclocal.m4 2003-02-19 18:29:27.000000000 +0100
+++ xinetd-2.3.14-mod/aclocal.m4 2009-07-29 10:10:03.000000000 +0200
@@ -22,6 +22,6 @@ AC_CACHE_VAL(xinetd_cv_type_$1,
#endif], xinetd_cv_type_$1=yes, xinetd_cv_type_$1=no)])dnl
AC_MSG_RESULT($xinetd_cv_type_$1)
if test $xinetd_cv_type_$1 = no; then
- AC_DEFINE($1, $2)
+ AC_DEFINE($1, $2, "")
fi
])

View File

@ -0,0 +1,29 @@
--- xinetd-2.3.14/xinetd/service.c.old 2007-05-16 15:33:41.000000000 +0200
+++ xinetd-2.3.14/xinetd/service.c 2007-05-16 15:29:53.000000000 +0200
@@ -335,6 +335,15 @@
if ( SVC_FD(sp) == -1 )
{
+ if (SC_BIND_ADDR(scp) == NULL && SC_IPV6( scp ))
+ {
+ /* there was no bind address configured and IPv6 fails. Try IPv4 */
+ msg( LOG_NOTICE, func, "IPv6 socket creation failed for service %s, trying IPv4", SC_ID( scp ) ) ;
+ M_CLEAR(SC_XFLAGS(scp), SF_IPV6);
+ M_SET(SC_XFLAGS(scp), SF_IPV4);
+ return svc_activate(sp);
+ }
+
msg( LOG_ERR, func,
"socket creation failed (%m). service = %s", SC_ID( scp ) ) ;
return( FAILED ) ;
--- xinetd-2.3.14/xinetd/confparse.c.old 2007-05-16 15:33:26.000000000 +0200
+++ xinetd-2.3.14/xinetd/confparse.c 2007-05-16 15:15:22.000000000 +0200
@@ -245,7 +245,7 @@
M_SET(SC_XFLAGS(scp), SF_IPV6);
}
else
- M_SET(SC_XFLAGS(scp), SF_IPV4);
+ M_SET(SC_XFLAGS(scp), SF_IPV6); /*try bind IPv6 by default*/
}
if (SC_ORIG_BIND_ADDR(scp))

View File

@ -0,0 +1,10 @@
--- xinetd-2.3.14/xinetd/service.c.orig 2010-03-18 17:09:20.000000000 +0100
+++ xinetd-2.3.14/xinetd/service.c 2010-03-18 17:09:37.000000000 +0100
@@ -470,6 +470,7 @@ void svc_deactivate( struct service *sp
{
#ifdef HAVE_POLL
SVC_EVENTS( sp ) = 0;
+ SVC_FD( sp ) = 0;
#else
FD_CLR( SVC_FD( sp ), &ps.rws.socket_mask ) ;
#endif /* HAVE_POLL */

View File

@ -0,0 +1,126 @@
diff -Nurp xinetd-2.3.14-orig/xinetd/attr.h xinetd-2.3.14-files/xinetd/attr.h
--- xinetd-2.3.14-orig/xinetd/attr.h 2005-10-05 19:15:33.000000000 +0200
+++ xinetd-2.3.14-files/xinetd/attr.h 2009-10-20 13:08:45.000000000 +0200
@@ -61,12 +61,13 @@
#define A_DISABLED 43
#define A_MDNS 44
#define A_LIBWRAP 45
+#define A_RLIMIT_FILES 46
/*
* SERVICE_ATTRIBUTES is the number of service attributes and also
* the number from which defaults-only attributes start.
*/
-#define SERVICE_ATTRIBUTES ( A_MDNS + 1 )
+#define SERVICE_ATTRIBUTES ( A_MDNS + 2 )
/*
* Mask of attributes that must be specified.
diff -Nurp xinetd-2.3.14-orig/xinetd/child.c xinetd-2.3.14-files/xinetd/child.c
--- xinetd-2.3.14-orig/xinetd/child.c 2009-10-20 13:07:34.000000000 +0200
+++ xinetd-2.3.14-files/xinetd/child.c 2009-10-20 13:10:16.000000000 +0200
@@ -109,6 +109,10 @@ void exec_server( const struct server *s
#ifdef RLIMIT_NOFILE
+ if ( SC_RLIM_FILES( scp ))
+ {
+ ps.ros.max_descriptors = SC_RLIM_FILES( scp );
+ }
rl.rlim_max = rl.rlim_cur = ps.ros.max_descriptors ;
(void) setrlimit( RLIMIT_NOFILE, &rl ) ;
#endif
diff -Nurp xinetd-2.3.14-orig/xinetd/parse.c xinetd-2.3.14-files/xinetd/parse.c
--- xinetd-2.3.14-orig/xinetd/parse.c 2005-10-05 19:15:33.000000000 +0200
+++ xinetd-2.3.14-files/xinetd/parse.c 2009-10-20 13:08:45.000000000 +0200
@@ -92,6 +92,9 @@ static const struct attribute service_at
#ifdef RLIMIT_DATA
{ "rlimit_data", A_RLIMIT_DATA, 1, rlim_data_parser },
#endif
+#ifdef RLIMIT_NOFILE
+ { "rlimit_files", A_RLIMIT_FILES, 1, rlim_files_parser },
+#endif
#ifdef RLIMIT_RSS
{ "rlimit_rss", A_RLIMIT_RSS, 1, rlim_rss_parser },
#endif
diff -Nurp xinetd-2.3.14-orig/xinetd/parsers.c xinetd-2.3.14-files/xinetd/parsers.c
--- xinetd-2.3.14-orig/xinetd/parsers.c 2005-10-05 23:45:41.000000000 +0200
+++ xinetd-2.3.14-files/xinetd/parsers.c 2009-10-20 13:08:45.000000000 +0200
@@ -1415,6 +1415,29 @@ status_e rlim_data_parser( pset_h values
}
#endif
+#ifdef RLIMIT_NOFILE
+status_e rlim_files_parser( pset_h values,
+ struct service_config *scp,
+ enum assign_op op )
+{
+ char *mem = (char *) pset_pointer( values, 0 ) ;
+ const char *func = "rlim_files_parser" ;
+
+ if ( EQ( mem, "UNLIMITED" ) )
+ SC_RLIM_FILES(scp) = (rlim_t)RLIM_INFINITY ;
+ else
+ {
+ if ( get_limit ( mem, &SC_RLIM_FILES(scp)) )
+ {
+ parsemsg( LOG_ERR, func,
+ "Max files limit is invalid: %s", mem ) ;
+ return( FAILED ) ;
+ }
+ }
+ return( OK ) ;
+}
+#endif
+
#ifdef RLIMIT_RSS
status_e rlim_rss_parser( pset_h values,
struct service_config *scp,
diff -Nurp xinetd-2.3.14-orig/xinetd/parsers.h xinetd-2.3.14-files/xinetd/parsers.h
--- xinetd-2.3.14-orig/xinetd/parsers.h 2005-10-05 19:15:33.000000000 +0200
+++ xinetd-2.3.14-files/xinetd/parsers.h 2009-10-20 13:08:45.000000000 +0200
@@ -57,6 +57,9 @@ status_e rlim_cpu_parser(pset_h, struct
#ifdef RLIMIT_DATA
status_e rlim_data_parser(pset_h, struct service_config *, enum assign_op) ;
#endif
+#ifdef RLIMIT_NOFILE
+status_e rlim_files_parser(pset_h, struct service_config *, enum assign_op) ;
+#endif
#ifdef RLIMIT_RSS
status_e rlim_rss_parser(pset_h, struct service_config *, enum assign_op) ;
#endif
diff -Nurp xinetd-2.3.14-orig/xinetd/sconf.h xinetd-2.3.14-files/xinetd/sconf.h
--- xinetd-2.3.14-orig/xinetd/sconf.h 2009-10-20 13:07:34.000000000 +0200
+++ xinetd-2.3.14-files/xinetd/sconf.h 2009-10-20 13:08:45.000000000 +0200
@@ -143,6 +143,7 @@ struct service_config
rlim_t sc_rlim_as;
rlim_t sc_rlim_cpu;
rlim_t sc_rlim_data;
+ rlim_t sc_rlim_files;
rlim_t sc_rlim_rss;
rlim_t sc_rlim_stack;
mode_t sc_umask;
@@ -191,6 +192,7 @@ struct service_config
#define SC_RLIM_AS( scp ) (scp)->sc_rlim_as
#define SC_RLIM_CPU( scp ) (scp)->sc_rlim_cpu
#define SC_RLIM_DATA( scp ) (scp)->sc_rlim_data
+#define SC_RLIM_FILES( scp ) (scp)->sc_rlim_files
#define SC_RLIM_RSS( scp ) (scp)->sc_rlim_rss
#define SC_RLIM_STACK( scp ) (scp)->sc_rlim_stack
#define SC_TYPE( scp ) (scp)->sc_type
diff -Nurp xinetd-2.3.14-orig/xinetd/xinetd.conf.man xinetd-2.3.14-files/xinetd/xinetd.conf.man
--- xinetd-2.3.14-orig/xinetd/xinetd.conf.man 2009-10-20 13:07:34.000000000 +0200
+++ xinetd-2.3.14-files/xinetd/xinetd.conf.man 2009-10-20 13:08:45.000000000 +0200
@@ -569,6 +569,12 @@ is implemented, it is more useful to set
rlimit_rss and rlimit_stack. This resource limit is only implemented on
Linux systems.
.TP
+.B rlimit_files
+Sets the maximum number of open files that the service may use.
+One parameter is required, which is a positive integer representing
+the number of open file descriptors. Practical limit of this number
+is around 1024000.
+.TP
.B rlimit_cpu
Sets the maximum number of CPU seconds that the service may use.
One parameter is required, which is either a positive integer representing

View File

@ -0,0 +1,22 @@
diff --git a/sensor.c b/sensor.c
index 09d0877..e65018c 100644
--- a/xinetd/sensor.c
+++ b/xinetd/sensor.c
@@ -100,14 +100,15 @@ void process_sensor( const struct service *sp, const union xsockaddr *addr)
{
/* Here again, eh?...update time stamp. */
char *exp_time;
- time_t stored_time;
+ int stored_time;
item_matched--; /* Is # plus 1, to even get here must be >= 1 */
exp_time = pset_pointer( global_no_access_time, item_matched ) ;
if (exp_time == NULL)
return ;
- if ( parse_base10(exp_time, (int *)&stored_time) )
+ /* FIXME: Parse (long int) instead of (int) prior to possible Y2K38 bug. */
+ if ( parse_base10(exp_time, &stored_time ) )
{ /* if never let them off, bypass */
if (stored_time != -1)
{

View File

@ -0,0 +1,42 @@
448069: xinetd: socket bind: Invalid argument (errno = 22) when using USERID on ipv6
Use right size of addresses in bind() call. Also use getpeername addresses when
connecting to ident service to prevent address family mismatch between socket(),
bind() and connect() calls.
Author: Jan Safranek <jsafrane@redhat.com>
Reviewed-By: Adam Tkac <atkac@redhat.com>
diff -up xinetd-2.3.14/xinetd/ident.c.orig xinetd-2.3.14/xinetd/ident.c
--- xinetd-2.3.14/xinetd/ident.c.orig 2008-05-29 16:30:19.000000000 +0200
+++ xinetd-2.3.14/xinetd/ident.c 2008-05-29 16:29:57.000000000 +0200
@@ -97,7 +98,13 @@ idresult_e log_remote_user( const struct
}
CLEAR( sin_contact );
- sin_remote = *CONN_XADDRESS( SERVER_CONNECTION( serp ) ) ;
+
+ sin_len = sizeof( sin_remote );
+ if ( getpeername( SERVER_FD( serp ), &sin_remote.sa, &sin_len ) == -1 )
+ {
+ msg( LOG_ERR, func, "(%d) getpeername: %m", getpid() ) ;
+ return( IDR_ERROR ) ;
+ }
sin_contact = sin_remote;
memcpy( &sin_bind, &sin_local, sizeof(sin_bind) ) ;
local_port = 0;
@@ -121,7 +128,13 @@ idresult_e log_remote_user( const struct
msg( LOG_ERR, func, "socket creation: %m" ) ;
return( IDR_ERROR ) ;
}
- if ( bind(sd, &sin_bind.sa, sizeof(sin_bind.sa)) == -1 )
+
+ if ( sin_bind.sa.sa_family == AF_INET )
+ sin_len = sizeof( sin_bind.sa_in ) ;
+ else
+ sin_len = sizeof( sin_bind.sa_in6 ) ;
+
+ if ( bind(sd, &sin_bind.sa, sin_len) == -1 )
{
msg( LOG_ERR, func, "socket bind: %m" ) ;
(void) Sclose( sd ) ;

View File

@ -0,0 +1,22 @@
--- xinetd-2.3.14/xinetd/access.c 2005-10-05 19:15:33.000000000 +0200
+++ xinetd-2.3.14-mod/xinetd/access.c 2012-03-05 14:54:30.935416926 +0100
@@ -73,6 +73,7 @@ static void cps_service_restart(void)
unsigned int i;
time_t nowtime;
const char *func = "cps_service_restart";
+ int rs;
nowtime = time(NULL);
for( i=0; i < pset_count( SERVICES(ps) ); i++ ) {
@@ -84,8 +85,11 @@ static void cps_service_restart(void)
if( SVC_STATE(sp) == SVC_DISABLED ) {
scp = SVC_CONF( sp );
if ( SC_TIME_REENABLE(scp) <= nowtime ) {
+ rs = SVC_RUNNING_SERVERS(sp);
/* re-enable the service */
if( svc_activate(sp) == OK ) {
+ /* remember running servers after restart */
+ SVC_RUNNING_SERVERS(sp) = rs;
msg(LOG_ERR, func,
"Activating service %s", SC_NAME(scp));
} else {

View File

@ -0,0 +1,17 @@
--- xinetd-2.3.14/xinetd/ident.c.jw 2010-03-10 17:49:53.000000000 +1100
+++ xinetd-2.3.14/xinetd/ident.c 2010-03-10 17:50:30.000000000 +1100
@@ -108,12 +108,12 @@
memcpy( &sin_bind, &sin_local, sizeof(sin_bind) ) ;
local_port = 0;
remote_port = 0;
- if( sin_remote.sa.sa_family == AF_INET ) {
+ if( sin_remote.sa.sa_family == AF_INET6 ) {
local_port = ntohs( sin_local.sa_in6.sin6_port ) ;
remote_port = ntohs( sin_remote.sa_in6.sin6_port ) ;
sin_contact.sa_in6.sin6_port = htons( IDENTITY_SERVICE_PORT ) ;
sin_bind.sa_in.sin_port = 0 ;
- } else if( sin_remote.sa.sa_family == AF_INET6 ) {
+ } else if( sin_remote.sa.sa_family == AF_INET ) {
local_port = ntohs( sin_local.sa_in.sin_port ) ;
remote_port = ntohs( sin_remote.sa_in.sin_port ) ;
sin_contact.sa_in.sin_port = htons( IDENTITY_SERVICE_PORT ) ;

View File

@ -0,0 +1,41 @@
diff -Naur xinetd-2.3.14-dist/xinetd/service.c xinetd-2.3.14/xinetd/service.c
--- xinetd-2.3.14-dist/xinetd/service.c 2012-04-03 08:59:19.000000000 +0200
+++ xinetd-2.3.14/xinetd/service.c 2012-04-03 09:02:34.588160317 +0200
@@ -366,12 +366,24 @@
msg( LOG_ERR, func,
"socket creation failed (%m). service = %s", SC_ID( scp ) ) ;
+#ifdef HAVE_POLL
+ SVC_EVENTS( sp ) = 0;
+ SVC_FD( sp ) = 0;
+#else
+ FD_CLR( SVC_FD( sp ), &ps.rws.socket_mask ) ;
+#endif /* HAVE_POLL */
return( FAILED ) ;
}
if ( set_fd_modes( sp ) == FAILED )
{
(void) Sclose( SVC_FD(sp) ) ;
+#ifdef HAVE_POLL
+ SVC_EVENTS( sp ) = 0;
+ SVC_FD( sp ) = 0;
+#else
+ FD_CLR( SVC_FD( sp ), &ps.rws.socket_mask ) ;
+#endif /* HAVE_POLL */
return( FAILED ) ;
}
@@ -385,6 +397,12 @@
if ( status == FAILED )
{
(void) Sclose( SVC_FD(sp) ) ;
+#ifdef HAVE_POLL
+ SVC_EVENTS( sp ) = 0;
+ SVC_FD( sp ) = 0;
+#else
+ FD_CLR( SVC_FD( sp ), &ps.rws.socket_mask ) ;
+#endif /* HAVE_POLL */
return( FAILED ) ;
}

View File

@ -0,0 +1,52 @@
diff -up xinetd-2.3.14-dist/xinetd/service.c xinetd-2.3.14/xinetd/service.c
--- xinetd-2.3.14-dist/xinetd/service.c 2012-01-11 11:50:43.438650900 +0100
+++ xinetd-2.3.14/xinetd/service.c 2012-01-16 08:18:09.462620084 +0100
@@ -88,6 +88,7 @@ struct service *svc_new( struct service_
CLEAR( *sp ) ;
SVC_CONF(sp) = scp ;
+ sp->svc_pfd_index = -1;
return( sp ) ;
}
@@ -346,7 +347,16 @@ status_e svc_activate( struct service *s
ps.rws.pfds_last)*sizeof(struct pollfd));
ps.rws.pfd_array = tmp;
}
- SVC_POLLFD( sp ) = &ps.rws.pfd_array[ps.rws.pfds_last++] ;
+ if ( sp->svc_pfd_index >= 0 )
+ {
+ SVC_POLLFD( sp ) = &ps.rws.pfd_array[sp->svc_pfd_index] ;
+ }
+ else
+ {
+ sp->svc_pfd_index = ps.rws.pfds_last ;
+ SVC_POLLFD( sp ) = &ps.rws.pfd_array[ps.rws.pfds_last++] ;
+ }
+
#endif /* HAVE_POLL */
if( SC_IPV4( scp ) ) {
@@ -433,6 +443,11 @@ status_e svc_activate( struct service *s
static void deactivate( const struct service *sp )
{
(void) Sclose( SVC_FD( sp ) ) ;
+#ifdef HAVE_POLL
+ SVC_FD( sp ) = 0;
+#else
+ FD_CLR( SVC_FD( sp ), &ps.rws.socket_mask ) ;
+#endif
#ifdef HAVE_MDNS
xinetd_mdns_deregister(SVC_CONF(sp));
diff -up xinetd-2.3.14-dist/xinetd/service.h xinetd-2.3.14/xinetd/service.h
--- xinetd-2.3.14-dist/xinetd/service.h 2012-01-11 11:50:43.418650925 +0100
+++ xinetd-2.3.14/xinetd/service.h 2012-01-16 08:02:59.667553008 +0100
@@ -47,6 +47,7 @@ struct service
{
state_e svc_state ;
int svc_ref_count ; /* # of pters to this struct */
+ int svc_pfd_index; /* index of pfd in pfd_array */
struct service_config *svc_conf ; /* service configuration */
#ifdef HAVE_POLL

View File

@ -0,0 +1,16 @@
117746: xinetd.log man page in wrong section
Put xinetd.log to the right man section.
diff -up xinetd-2.3.13/Makefile.in.orig xinetd-2.3.13/Makefile.in
--- xinetd-2.3.13/Makefile.in.orig 2007-12-06 10:58:32.000000000 +0100
+++ xinetd-2.3.13/Makefile.in 2008-01-15 13:39:38.000000000 +0100
@@ -80,7 +80,7 @@ install: build
$(INSTALL_CMD) -m 755 xinetd/itox $(DAEMONDIR)
$(INSTALL_CMD) -m 755 $(SRCDIR)/xinetd/xconv.pl $(DAEMONDIR)
$(INSTALL_CMD) -m 644 $(SRCDIR)/xinetd/xinetd.conf.man $(MANDIR)/man5/xinetd.conf.5
- $(INSTALL_CMD) -m 644 $(SRCDIR)/xinetd/xinetd.log.man $(MANDIR)/man8/xinetd.log.8
+ $(INSTALL_CMD) -m 644 $(SRCDIR)/xinetd/xinetd.log.man $(MANDIR)/man5/xinetd.log.5
$(INSTALL_CMD) -m 644 $(SRCDIR)/xinetd/xinetd.man $(MANDIR)/man8/xinetd.8
$(INSTALL_CMD) -m 644 $(SRCDIR)/xinetd/itox.8 $(MANDIR)/man8/itox.8
$(INSTALL_CMD) -m 644 $(SRCDIR)/xinetd/xconv.pl.8 $(MANDIR)/man8/xconv.pl.8

View File

@ -0,0 +1,27 @@
--- xinetd-2.3.14-dist/xinetd/defs.h 2012-01-16 12:20:54.739041678 +0100
+++ xinetd-2.3.14/xinetd/defs.h 2012-01-17 08:06:56.800762230 +0100
@@ -115,8 +115,9 @@ union xsockaddr {
*/
#ifdef HAVE_POLL
-#define INIT_POLLFDS 1024
-#define MAX_POLLFDS 8192
+#define INIT_POLLFDS 4096
+/* FIXME: not used */
+#define MAX_POLLFDS 16384
#endif
/*
--- xinetd-2.3.14-dist/xinetd/service.c 2012-01-16 12:20:54.741041678 +0100
+++ xinetd-2.3.14/xinetd/service.c 2012-01-17 08:07:28.872746991 +0100
@@ -343,9 +343,9 @@ status_e svc_activate( struct service *s
out_of_memory( func );
return( FAILED );
}
+ ps.rws.pfd_array = tmp;
memset(&ps.rws.pfd_array[ps.rws.pfds_last], 0, (ps.rws.pfds_allocated-
ps.rws.pfds_last)*sizeof(struct pollfd));
- ps.rws.pfd_array = tmp;
}
if ( sp->svc_pfd_index >= 0 )
{

1202
xinetd-2.3.14-poll.patch Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,77 @@
Generate debuginfo package with all include files readable.
The support libraries would install their header files with 640 permissions,
which is not what we want.
diff -up xinetd-2.3.14/libs/src/misc/Makefile.in.orig xinetd-2.3.14/libs/src/misc/Makefile.in
--- xinetd-2.3.14/libs/src/misc/Makefile.in.orig 2003-02-19 18:29:27.000000000 +0100
+++ xinetd-2.3.14/libs/src/misc/Makefile.in 2008-09-18 10:18:59.000000000 +0200
@@ -49,7 +49,7 @@ CC_FLAGS = $(DEBUG)
CFLAGS = @CFLAGS@ $(CPP_FLAGS) $(CC_FLAGS) -I$(INCLUDEDIR)
INSTALL = @INSTALL@
-FMODE = -m 640 # used by install
+FMODE = -m 644 # used by install
RANLIB = @RANLIB@
LIBNAME = lib$(NAME).a
diff -up xinetd-2.3.14/libs/src/portable/Makefile.in.orig xinetd-2.3.14/libs/src/portable/Makefile.in
--- xinetd-2.3.14/libs/src/portable/Makefile.in.orig 2003-02-19 18:29:27.000000000 +0100
+++ xinetd-2.3.14/libs/src/portable/Makefile.in 2008-09-18 10:19:09.000000000 +0200
@@ -44,7 +44,7 @@ CC_FLAGS = $(DEBUG)
CFLAGS = @CFLAGS@ $(CPP_FLAGS) $(CC_FLAGS) -I$(INCLUDEDIR)
INSTALL = @INSTALL@
-FMODE = -m 640 # used by install
+FMODE = -m 644 # used by install
RANLIB = @RANLIB@
LIBNAME = lib$(NAME).a
diff -up xinetd-2.3.14/libs/src/pset/Makefile.in.orig xinetd-2.3.14/libs/src/pset/Makefile.in
--- xinetd-2.3.14/libs/src/pset/Makefile.in.orig 2003-02-19 18:29:27.000000000 +0100
+++ xinetd-2.3.14/libs/src/pset/Makefile.in 2008-09-18 10:19:17.000000000 +0200
@@ -41,7 +41,7 @@ CC_FLAGS = $(DEBUG)
CFLAGS = @CFLAGS@ $(CPP_FLAGS) $(CC_FLAGS)
INSTALL = @INSTALL@
-FMODE = -m 640 # used by install
+FMODE = -m 644 # used by install
RANLIB = @RANLIB@
LIBNAME = lib$(NAME).a
diff -up xinetd-2.3.14/libs/src/sio/Makefile.in.orig xinetd-2.3.14/libs/src/sio/Makefile.in
--- xinetd-2.3.14/libs/src/sio/Makefile.in.orig 2003-02-19 18:29:27.000000000 +0100
+++ xinetd-2.3.14/libs/src/sio/Makefile.in 2008-09-18 10:19:25.000000000 +0200
@@ -40,7 +40,7 @@ CC_FLAGS = $(DEBUG)
CFLAGS = @CFLAGS@ $(CPP_FLAGS) $(CC_FLAGS) -I$(INCLUDEDIR)
INSTALL = @INSTALL@
-FMODE = -m 640 # used by install
+FMODE = -m 644 # used by install
RANLIB = @RANLIB@
LIBNAME = lib$(NAME).a
diff -up xinetd-2.3.14/libs/src/str/Makefile.in.orig xinetd-2.3.14/libs/src/str/Makefile.in
--- xinetd-2.3.14/libs/src/str/Makefile.in.orig 2003-02-19 18:29:27.000000000 +0100
+++ xinetd-2.3.14/libs/src/str/Makefile.in 2008-09-18 10:19:33.000000000 +0200
@@ -51,7 +51,7 @@ CC_FLAGS = $(DEBUG)
CFLAGS = @CFLAGS@ $(CPP_FLAGS) $(CC_FLAGS)
INSTALL = @INSTALL@
-FMODE = -m 640 # used by install
+FMODE = -m 644 # used by install
RANLIB = @RANLIB@
LIBNAME = lib$(NAME).a
diff -up xinetd-2.3.14/libs/src/xlog/Makefile.in.orig xinetd-2.3.14/libs/src/xlog/Makefile.in
--- xinetd-2.3.14/libs/src/xlog/Makefile.in.orig 2003-02-19 18:29:27.000000000 +0100
+++ xinetd-2.3.14/libs/src/xlog/Makefile.in 2008-09-18 10:19:41.000000000 +0200
@@ -46,7 +46,7 @@ CC_FLAGS = $(DEBUG)
CFLAGS = @CFLAGS@ $(CPP_FLAGS) $(CC_FLAGS)
INSTALL = @INSTALL@
-FMODE = -m 640 # used by install
+FMODE = -m 644 # used by install
RANLIB = @RANLIB@
LIBNAME = lib$(NAME).a

View File

@ -0,0 +1,134 @@
diff -rup xinetd-2.3.14/xinetd/defs.h xinetd-2.3.14-mod/xinetd/defs.h
--- xinetd-2.3.14/xinetd/defs.h 2012-01-18 14:22:20.811100158 +0100
+++ xinetd-2.3.14-mod/xinetd/defs.h 2012-01-18 13:32:46.000000000 +0100
@@ -114,11 +114,7 @@ union xsockaddr {
* constants for limiting ps.rws.fd_list
*/
-#ifdef HAVE_POLL
-#define INIT_POLLFDS 4096
-/* FIXME: not used */
-#define MAX_POLLFDS 16384
-#endif
+#define MAX_FDS 4096
/*
* When explicit values are given for enum's, that is because the structures
diff -rup xinetd-2.3.14/xinetd/init.c xinetd-2.3.14-mod/xinetd/init.c
--- xinetd-2.3.14/xinetd/init.c 2012-01-18 14:22:20.779100171 +0100
+++ xinetd-2.3.14-mod/xinetd/init.c 2012-01-18 14:07:34.000000000 +0100
@@ -151,7 +151,7 @@ static void set_fd_limit(void)
}
if ( rl.rlim_max == RLIM_INFINITY )
- rl.rlim_max = FD_SETSIZE;
+ rl.rlim_max = MAX_FDS;
ps.ros.max_descriptors = rl.rlim_max ;
#else /* ! RLIMIT_NOFILE */
@@ -283,12 +283,12 @@ static void init_rw_state( void )
ps.rws.descriptors_free = ps.ros.max_descriptors - DESCRIPTORS_RESERVED ;
#ifdef HAVE_POLL
- ps.rws.pfds_allocated = INIT_POLLFDS ;
+ ps.rws.pfds_allocated = ps.ros.max_descriptors ;
ps.rws.pfd_array = (struct pollfd *)
malloc( sizeof( struct pollfd ) * ps.rws.pfds_allocated ) ;
if ( ps.rws.pfd_array == NULL )
{
- out_of_memory(func);
+ out_of_memory(func) ;
exit( 1 ) ;
}
ps.rws.pfds_last = 0 ;
diff -rup xinetd-2.3.14/xinetd/redirect.c xinetd-2.3.14-mod/xinetd/redirect.c
--- xinetd-2.3.14/xinetd/redirect.c 2012-01-18 14:22:20.780100170 +0100
+++ xinetd-2.3.14-mod/xinetd/redirect.c 2012-01-18 12:22:08.000000000 +0100
@@ -149,7 +149,7 @@ void redir_handler( struct server *serp
#ifdef HAVE_POLL
#define REDIR_DESCRIP_INDEX 0
#define REDIR_SERVER_INDEX 1
- pfd_array = (struct pollfd *)calloc(sizeof(struct pollfd),INIT_POLLFDS);
+ pfd_array = (struct pollfd *)calloc(sizeof(struct pollfd),MAX_FDS);
if (pfd_array == NULL)
{
msg( LOG_ERR, func, "Cannot allocate memory for file descriptors!\n");
diff -rup xinetd-2.3.14/xinetd/service.c xinetd-2.3.14-mod/xinetd/service.c
--- xinetd-2.3.14/xinetd/service.c 2012-01-18 14:22:20.812100157 +0100
+++ xinetd-2.3.14-mod/xinetd/service.c 2012-01-18 14:07:27.000000000 +0100
@@ -114,10 +114,6 @@ struct service *svc_make_special( struct
void svc_free( struct service *sp )
{
-#ifdef HAVE_POLL
- *SVC_POLLFD( sp ) = ps.rws.pfd_array[--ps.rws.pfds_last] ;
-#endif /* HAVE_POLL */
-
sc_free( SVC_CONF(sp) ) ;
CLEAR( *sp ) ;
FREE_SVC( sp ) ;
@@ -332,20 +328,10 @@ status_e svc_activate( struct service *s
}
#ifdef HAVE_POLL
- if ( ps.rws.pfds_last >= ps.rws.pfds_allocated )
+ if ( ps.rws.descriptors_free <= 0 )
{
- int pos;
- ps.rws.pfds_allocated += INIT_POLLFDS;
- struct pollfd *tmp = (struct pollfd *)realloc( ps.rws.pfd_array,
- ps.rws.pfds_allocated*sizeof(struct pollfd));
- if ( tmp == NULL )
- {
- out_of_memory( func );
- return( FAILED );
- }
- ps.rws.pfd_array = tmp;
- memset(&ps.rws.pfd_array[ps.rws.pfds_last], 0, (ps.rws.pfds_allocated-
- ps.rws.pfds_last)*sizeof(struct pollfd));
+ msg(LOG_ERR, func, "Maximum number of services reached") ;
+ return( FAILED ) ;
}
if ( sp->svc_pfd_index >= 0 )
{
diff -rup xinetd-2.3.14/xinetd/tcpint.c xinetd-2.3.14-mod/xinetd/tcpint.c
--- xinetd-2.3.14/xinetd/tcpint.c 2012-01-18 14:22:20.782100169 +0100
+++ xinetd-2.3.14-mod/xinetd/tcpint.c 2012-01-18 13:30:22.000000000 +0100
@@ -93,7 +93,7 @@ static void si_mux(void)
#ifdef HAVE_POLL
struct pollfd *pfd_array;
int pfds_last = 0;
- int pfds_allocated = INIT_POLLFDS;
+ int pfds_allocated = MAX_FDS;
#else
fd_set socket_mask ;
int mask_max ;
@@ -102,7 +102,7 @@ static void si_mux(void)
const char *func = "si_mux" ;
#ifdef HAVE_POLL
- pfd_array = calloc(sizeof(struct pollfd),INIT_POLLFDS);
+ pfd_array = calloc(sizeof(struct pollfd),MAX_FDS);
pfd_array[ pfds_last ].fd = INT_REMOTE( ip ) ;
pfd_array[ pfds_last++ ].events = POLLIN | POLLOUT;
#else
diff -rup xinetd-2.3.14/xinetd/udpint.c xinetd-2.3.14-mod/xinetd/udpint.c
--- xinetd-2.3.14/xinetd/udpint.c 2012-01-18 14:22:20.783100169 +0100
+++ xinetd-2.3.14-mod/xinetd/udpint.c 2012-01-18 12:22:00.000000000 +0100
@@ -103,14 +103,14 @@ static void di_mux(void)
#ifdef HAVE_POLL
struct pollfd *pfd_array;
int pfds_last = 0;
- int pfds_allocated = INIT_POLLFDS;
+ int pfds_allocated = MAX_FDS;
#else
fd_set socket_mask ;
int mask_max ;
#endif
#ifdef HAVE_POLL
- pfd_array = (struct pollfd *)calloc(sizeof(struct pollfd),INIT_POLLFDS);
+ pfd_array = (struct pollfd *)calloc(sizeof(struct pollfd),MAX_FDS);
pfd_array[ pfds_last ].fd = INT_REMOTE( ip );
pfd_array[ pfds_last++ ].events = POLLIN | POLLOUT;
#else

View File

@ -0,0 +1,54 @@
diff -Napur xinetd-2.3.14.old/xinetd/access.c xinetd-2.3.14.new/xinetd/access.c
--- xinetd-2.3.14.old/xinetd/access.c 2005-10-05 10:15:33.000000000 -0700
+++ xinetd-2.3.14.new/xinetd/access.c 2012-02-22 20:12:09.120973124 -0800
@@ -89,9 +89,20 @@ static void cps_service_restart(void)
msg(LOG_ERR, func,
"Activating service %s", SC_NAME(scp));
} else {
- msg(LOG_ERR, func,
- "Error activating service %s",
- SC_NAME(scp)) ;
+ /* Try to restart the service */
+ SVC_ATTEMPTS(sp) += 1;
+ if ( SVC_ATTEMPTS(sp) < MAX_SVC_ATTEMPTS ) {
+ msg(LOG_ERR, func,
+ "Error activating service %s, retrying %d more time(s)...",
+ SC_NAME(scp),
+ MAX_SVC_ATTEMPTS - SVC_ATTEMPTS(sp));
+ xtimer_add(cps_service_restart, 1);
+ } else {
+ /* Give up */
+ msg(LOG_ERR, func,
+ "Error activating service %s",
+ SC_NAME(scp));
+ }
} /* else */
}
}
diff -Napur xinetd-2.3.14.old/xinetd/service.c xinetd-2.3.14.new/xinetd/service.c
--- xinetd-2.3.14.old/xinetd/service.c 2012-02-22 19:16:56.288912783 -0800
+++ xinetd-2.3.14.new/xinetd/service.c 2012-02-22 19:25:03.059356909 -0800
@@ -397,6 +408,7 @@ status_e svc_activate( struct service *s
* Initialize the service data
*/
SVC_RUNNING_SERVERS(sp) = SVC_RETRIES(sp) = 0 ;
+ SVC_ATTEMPTS(sp) = 0;
if ( SC_MUST_LISTEN( scp ) )
(void) listen( SVC_FD(sp), LISTEN_BACKLOG ) ;
diff -Napur xinetd-2.3.14.old/xinetd/xconfig.h xinetd-2.3.14.new/xinetd/xconfig.h
--- xinetd-2.3.14.old/xinetd/xconfig.h 2003-02-19 09:29:28.000000000 -0800
+++ xinetd-2.3.14.new/xinetd/xconfig.h 2012-02-22 19:20:20.360855514 -0800
@@ -59,6 +59,12 @@
#define DEFAULT_LOOP_TIME 10
/*
+ * The number of times to attempt re-activating a service after being
+ * deactivated due to the above.
+ */
+#define MAX_SVC_ATTEMPTS 30
+
+/*
* Signal-to-action mapping
*/
#ifndef RECONFIG_HARD_SIG

View File

@ -0,0 +1,30 @@
commit 1b91f7b0f67fba11ea8bbcdddef844656434c53c
Author: Jeffrey Bastian <jbastian@redhat.com>
Date: Tue Aug 17 13:45:20 2010 -0500
Let RPC services bind to a port
diff --git a/xinetd/service.c b/xinetd/service.c
index 9f21f93..5d26885 100644
--- a/xinetd/service.c
+++ b/xinetd/service.c
@@ -165,6 +165,7 @@ static status_e activate_rpc( struct service *sp )
socklen_t sin_len = sizeof(tsin);
unsigned long vers ;
struct service_config *scp = SVC_CONF( sp ) ;
+ uint16_t service_port = SC_PORT( scp ) ;
struct rpc_data *rdp = SC_RPCDATA( scp ) ;
char *sid = SC_ID( scp ) ;
unsigned registered_versions = 0 ;
@@ -181,9 +182,11 @@ static status_e activate_rpc( struct service *sp )
}
if( SC_IPV4( scp ) ) {
tsin.sa_in.sin_family = AF_INET ;
+ tsin.sa_in.sin_port = htons( service_port ) ;
sin_len = sizeof(struct sockaddr_in);
} else if( SC_IPV6( scp ) ) {
tsin.sa_in6.sin6_family = AF_INET6 ;
+ tsin.sa_in6.sin6_port = htons( service_port );
sin_len = sizeof(struct sockaddr_in6);
}