From 444e497296665328688d2766c4857ae364da55cb Mon Sep 17 00:00:00 2001 From: Pierre Habouzit Date: Mon, 24 Mar 2008 12:49:43 +0100 Subject: [PATCH 1/1] add an inetd_ipv6 mode Signed-off-by: Pierre Habouzit --- debian/changelog | 8 ++ ...e-able-to-listen-on-IPv6-even-in-ine.patch | 110 ++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 debian/patches/0007-xinetd-should-be-able-to-listen-on-IPv6-even-in-ine.patch diff --git a/debian/changelog b/debian/changelog index 15f9f77..95f4fd0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +xinetd (1:2.3.14-6) unstable; urgency=low + + * Add patch from David Madore so that xinetd groks an -inetd_ipv6 mode, that + works like -inetd_compat but also listen on IPv6 addresses. + (Closes: 472436). + + -- Pierre Habouzit Mon, 24 Mar 2008 12:48:39 +0100 + xinetd (1:2.3.14-5) unstable; urgency=medium * woops fix wrong ordering of the sed arguments, thanks to madduck. diff --git a/debian/patches/0007-xinetd-should-be-able-to-listen-on-IPv6-even-in-ine.patch b/debian/patches/0007-xinetd-should-be-able-to-listen-on-IPv6-even-in-ine.patch new file mode 100644 index 0000000..2b76fe3 --- /dev/null +++ b/debian/patches/0007-xinetd-should-be-able-to-listen-on-IPv6-even-in-ine.patch @@ -0,0 +1,110 @@ +From f44b218ccc779ab3f4aed072390ccf129d94b58d Mon Sep 17 00:00:00 2001 +From: David Madore +Date: Mon, 24 Mar 2008 12:45:36 +0100 +Subject: [PATCH] xinetd should be able to listen on IPv6 even in -inetd_compat mode + +xinetd does not bind to IPv6 addresses (and does not seem to have an +option to do so) when used in -inetd_compat mode. As current inetd's +are IPv6-aware, this is a problem: this means xinetd cannot be used as +a drop-in inetd replacement. + +The attached patch is a suggestion: it adds a -inetd_ipv6 global +option that, if used, causes inetd-compatibility lines to have an +implicit "IPv6" option. Perhaps this is not the best solution, but +there should definitely be a way to get inetd.conf to be read in +IPv6-aware mode. +--- + xinetd/confparse.c | 1 + + xinetd/inet.c | 17 +++++++++++++++++ + xinetd/options.c | 3 +++ + xinetd/xinetd.man | 6 ++++++ + 4 files changed, 27 insertions(+), 0 deletions(-) + +diff --git a/xinetd/confparse.c b/xinetd/confparse.c +index db9f431..d7b0bcc 100644 +--- a/xinetd/confparse.c ++++ b/xinetd/confparse.c +@@ -40,6 +40,7 @@ + #include "inet.h" + #include "main.h" + ++extern int inetd_ipv6; + extern int inetd_compat; + + /* +diff --git a/xinetd/inet.c b/xinetd/inet.c +index 8caab45..2e617ae 100644 +--- a/xinetd/inet.c ++++ b/xinetd/inet.c +@@ -25,6 +25,8 @@ + + static psi_h iter ; + ++extern int inetd_ipv6; ++ + static int get_next_inet_entry( int fd, pset_h sconfs, + struct service_config *defaults); + +@@ -360,6 +362,21 @@ static int get_next_inet_entry( int fd, pset_h sconfs, + } + SC_SERVER_ARGV(scp)[u] = p; + } ++ ++ /* Set the IPv6 flag if we were passed the -inetd_ipv6 option */ ++ if ( inetd_ipv6 ) ++ { ++ nvp = nv_find_value( service_flags, "IPv6" ); ++ if ( nvp == NULL ) ++ { ++ parsemsg( LOG_WARNING, func, "inetd.conf - Bad foo %s", name ) ; ++ pset_destroy(args); ++ sc_free(scp); ++ return -1; ++ } ++ M_SET(SC_XFLAGS(scp), nvp->value); ++ } ++ + /* Set the reuse flag, as this is the default for inetd */ + nvp = nv_find_value( service_flags, "REUSE" ); + if ( nvp == NULL ) +diff --git a/xinetd/options.c b/xinetd/options.c +index b058b6a..dc2f3a0 100644 +--- a/xinetd/options.c ++++ b/xinetd/options.c +@@ -30,6 +30,7 @@ int logprocs_option ; + unsigned logprocs_option_arg ; + int stayalive_option=0; + char *program_name ; ++int inetd_ipv6 = 0 ; + int inetd_compat = 0 ; + int dont_fork = 0; + +@@ -128,6 +129,8 @@ int opt_recognize( int argc, char *argv[] ) + fprintf(stderr, "\n"); + exit(0); + } ++ else if ( strcmp ( &argv[ arg ][ 1 ], "inetd_ipv6" ) == 0 ) ++ inetd_ipv6 = 1; + else if ( strcmp ( &argv[ arg ][ 1 ], "inetd_compat" ) == 0 ) + inetd_compat = 1; + } +diff --git a/xinetd/xinetd.man b/xinetd/xinetd.man +index c76c3c6..c9dd803 100644 +--- a/xinetd/xinetd.man ++++ b/xinetd/xinetd.man +@@ -106,6 +106,12 @@ This option causes xinetd to read /etc/inetd.conf in addition to the + standard xinetd config files. /etc/inetd.conf is read after the + standard xinetd config files. + .TP ++.BI \-inetd_ipv6 ++This option causes xinetd to bind to IPv6 (AF_INET6) addresses for ++inetd compatibility lines (see previous option). This only affects ++how /etc/inetd.conf is interpreted and thus only has any effect if ++the \-inetd_compat option is also used. ++.TP + .BI \-cc " interval" + This option instructs + .B xinetd +-- +1.5.5.rc0.127.gb4337 + -- 2.20.1