ipv6-0.4.14: fix xinetd usage
PATCH 2/3 ipv6-0.4.14: fix xinetd usage
NOTE: this is patch 2/3 over feat_ipv6_transport branch,
commit 1b96baa8fc964bfba8bfba87f1e0e1fbabf0b47b
- closes http://bugs.debian.org/574164
- also needed for --disable-ipv6 builds
- supports IPv6 from xinetd
Signed-off-by JuanJo Ciarlante <[email protected]...>
--- socket.c | 36 ++++++++++++++++++++++++++++++++++-- 1 files changed, 34 insertions(+), 2 deletions(-)
socket.c +34 -2
@@ -1680,7 +1680,11 @@ link_socket_init_phase1 (struct link_socket *sock,/* were we started by inetd or xinetd? */ if (sock->inetd) { -ASSERT (sock->info.proto != PROTO_TCPv4_CLIENT); +ASSERT (sock->info.proto != PROTO_TCPv4_CLIENT +#ifdef USE_PF_INET6 + && sock->info.proto != PROTO_TCPv6_CLIENT +#endif + );ASSERT (socket_defined (inetd_socket_descriptor)); sock->sd = inetd_socket_descriptor; }
@@ -1729,7 +1733,34 @@ link_socket_init_phase2 (struct link_socket *sock,/* were we started by inetd or xinetd? */ if (sock->inetd) { -if (sock->info.proto == PROTO_TCPv4_SERVER) +if (sock->info.proto == PROTO_TCPv4_SERVER +#ifdef USE_PF_INET6 + || sock->info.proto == PROTO_TCPv6_SERVER +#endif + ) { +/* AF_INET as default (and fallback) for inetd */ + sock->info.lsa->actual.dest.addr.sa.sa_family =AF_INET ; +#ifdef USE_PF_INET6 +#ifdef HAVE_GETSOCKNAME + { +/* inetd: hint family type for dest = local's */ +struct openvpn_sockaddr local_addr; +socklen_t addrlen =sizeof (local_addr); +if (getsockname (sock->sd, (struct sockaddr *)&local_addr, &addrlen) ==0 ) { + sock->info.lsa->actual.dest.addr.sa.sa_family = local_addr.addr.sa.sa_family; +dmsg (D_SOCKET_DEBUG ,"inetd(%s): using sa_family=%d from getsockname(%d)" , +proto2ascii (sock->info.proto, false), local_addr.addr.sa.sa_family, + sock->sd); + }else +msg (M_WARN ,"inetd(%s): getsockname(%d) failed, using AF_INET" , +proto2ascii (sock->info.proto, false), sock->sd); + } +#else +msg (M_WARN ,"inetd(%s): this OS does not provide the getsockname() " +"function, using AF_INET" , +proto2ascii (sock->info.proto, false)); +#endif +#endif sock->sd = socket_listen_accept (sock->sd, &sock->info.lsa->actual,
@@ -1739,6 +1770,7 @@ link_socket_init_phase2 (struct link_socket *sock, false, sock->inetd ==INETD_NOWAIT , signal_received); + }ASSERT (!remote_changed);if (*signal_received) goto done;
Signature · 7 lines
1.7.1
--
--JuanJo
oO Juan Jose Ciarlante - juanjosec Ogmail.com - jjo O{um.edu.ar,google.com}
Oo gpg --keyserver wwwkeys.eu.pgp.net --recv-key 81276430