diff -ru xinetd-2.3.12.old/xinetd/access.c xinetd-2.3.12.libwrap/xinetd/access.c --- xinetd-2.3.12.old/xinetd/access.c 2003-06-23 17:09:01.000000000 -0400 +++ xinetd-2.3.12.libwrap/xinetd/access.c 2003-08-08 11:36:13.000000000 -0400 @@ -229,6 +229,10 @@ else server++; + if ( scp->sc_libwrap != NULL ) + { + server = scp->sc_libwrap; + } if ( server == NULL ) { msg(deny_severity, func, diff -ru xinetd-2.3.12.old/xinetd/attr.h xinetd-2.3.12.libwrap/xinetd/attr.h --- xinetd-2.3.12.old/xinetd/attr.h 2003-05-28 20:27:03.000000000 -0400 +++ xinetd-2.3.12.libwrap/xinetd/attr.h 2003-08-08 11:36:35.000000000 -0400 @@ -60,6 +60,7 @@ #define A_ENABLED 42 #define A_DISABLED 43 #define A_MDNS 44 +#define A_LIBWRAP 45 /* * SERVICE_ATTRIBUTES is the number of service attributes and also diff -ru xinetd-2.3.12.old/xinetd/parse.c xinetd-2.3.12.libwrap/xinetd/parse.c --- xinetd-2.3.12.old/xinetd/parse.c 2003-07-12 15:17:53.000000000 -0400 +++ xinetd-2.3.12.libwrap/xinetd/parse.c 2003-08-08 11:37:37.000000000 -0400 @@ -52,6 +52,9 @@ { "group", A_GROUP, 1, group_parser }, { "server", A_SERVER, 1, server_parser }, { "server_args", A_SERVER_ARGS, -1, server_args_parser }, +#ifdef LIBWRAP + { "libwrap", A_LIBWRAP, 1, libwrap_parser }, +#endif { "instances", A_INSTANCES, 1, instances_parser }, { "log_on_success", A_LOG_ON_SUCCESS,-2, log_on_success_parser }, { "log_on_failure", A_LOG_ON_FAILURE,-2, log_on_failure_parser }, diff -ru xinetd-2.3.12.old/xinetd/parsers.c xinetd-2.3.12.libwrap/xinetd/parsers.c --- xinetd-2.3.12.old/xinetd/parsers.c 2003-06-01 12:26:18.000000000 -0400 +++ xinetd-2.3.12.libwrap/xinetd/parsers.c 2003-08-08 11:52:02.000000000 -0400 @@ -373,6 +373,23 @@ return( OK ); } +#ifdef LIBWRAP +status_e libwrap_parser( pset_h values, + struct service_config *scp, + enum assign_op op ) +{ + char *libwrap = (char *) pset_pointer( values, 0 ) ; + const char *func = "libwrap_parser" ; + + scp->sc_libwrap = new_string( libwrap ) ; + if ( scp->sc_libwrap == NULL ) + { + out_of_memory( func ) ; + return( FAILED ) ; + } + return( OK ) ; +} +#endif status_e server_parser( pset_h values, struct service_config *scp, diff -ru xinetd-2.3.12.old/xinetd/parsers.h xinetd-2.3.12.libwrap/xinetd/parsers.h --- xinetd-2.3.12.old/xinetd/parsers.h 2003-05-28 20:27:03.000000000 -0400 +++ xinetd-2.3.12.libwrap/xinetd/parsers.h 2003-08-08 11:52:02.000000000 -0400 @@ -18,6 +18,9 @@ status_e group_parser(pset_h, struct service_config *, enum assign_op) ; status_e server_parser(pset_h, struct service_config *, enum assign_op) ; status_e server_args_parser(pset_h, struct service_config *, enum assign_op) ; +#ifdef LIBWRAP +status_e libwrap_parser(pset_h, struct service_config *, enum assign_op) ; +#endif status_e instances_parser(pset_h, struct service_config *, enum assign_op) ; status_e log_on_success_parser(pset_h, struct service_config *, enum assign_op) ; status_e log_on_failure_parser(pset_h, struct service_config *, enum assign_op) ; diff -ru xinetd-2.3.12.old/xinetd/sconf.h xinetd-2.3.12.libwrap/xinetd/sconf.h --- xinetd-2.3.12.old/xinetd/sconf.h 2003-06-25 15:43:56.000000000 -0400 +++ xinetd-2.3.12.libwrap/xinetd/sconf.h 2003-08-08 11:52:02.000000000 -0400 @@ -112,6 +112,7 @@ gid_t sc_user_gid ; /* gid corresponding to uid */ gid_t sc_gid ; /* gid corresponding to group */ char *sc_server ; + char *sc_libwrap ; char **sc_server_argv ; int sc_instances ; int sc_nice ; /* argument for nice(3) */ diff -ru xinetd-2.3.12.old/xinetd/xinetd.conf.man xinetd-2.3.12.libwrap/xinetd/xinetd.conf.man --- xinetd-2.3.12.old/xinetd/xinetd.conf.man 2003-08-06 14:54:01.000000000 -0400 +++ xinetd-2.3.12.libwrap/xinetd/xinetd.conf.man 2003-08-08 11:53:25.000000000 -0400 @@ -223,6 +223,13 @@ determines the arguments passed to the server. In contrast to \fBinetd\fP, the server name should \fInot\fP be included in \fIserver_args\fP. .TP +.B libwrap +overrides the service name passed to libwrap (which defaults to the +server name, the first server_args component with NAMEINARGS, the id +for internal services and the service name for redirected services). +This attribute is only valid if xinetd has been configured with the libwrap +option. +.TP .B only_from determines the remote hosts to which the particular service is available. --- xinetd-2.3.13/xinetd/sconf.c.libwrap 2003-08-06 02:12:10.000000000 -0400 +++ xinetd-2.3.13/xinetd/sconf.c 2004-02-02 12:06:54.000000000 -0500 @@ -72,6 +72,7 @@ COND_FREE( SC_ID(scp) ) ; COND_FREE( SC_PROTONAME(scp) ) ; COND_FREE( SC_SERVER(scp) ) ; + COND_FREE( scp->sc_libwrap ); COND_FREE( (char *)SC_REDIR_ADDR(scp) ) ; COND_FREE( (char *)SC_BIND_ADDR(scp) ) ; COND_FREE( (char *)SC_ORIG_BIND_ADDR(scp) ) ; @@ -352,6 +353,12 @@ Sputchar( fd, '\n' ) ; } +#ifdef LIBWRAP + if ( scp->sc_libwrap != NULL ) + { + tabprint ( fd, tab_level + 1, "Libwrap = %s\n", scp->sc_libwrap ); + } +#endif if ( SC_REDIR_ADDR(scp) != NULL ) { char redirname[NI_MAXHOST];