diff options
Diffstat (limited to 'contrib/tcp_wrappers/fix_options.c')
-rw-r--r-- | contrib/tcp_wrappers/fix_options.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/contrib/tcp_wrappers/fix_options.c b/contrib/tcp_wrappers/fix_options.c index b5e81b8..4983a55 100644 --- a/contrib/tcp_wrappers/fix_options.c +++ b/contrib/tcp_wrappers/fix_options.c @@ -3,6 +3,8 @@ * rlogind and kernel source, but all mistakes in it are my fault. * * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands. + * + * $FreeBSD$ */ #ifndef lint @@ -11,6 +13,9 @@ static char sccsid[] = "@(#) fix_options.c 1.6 97/04/08 02:29:19"; #include <sys/types.h> #include <sys/param.h> +#ifdef INET6 +#include <sys/socket.h> +#endif #include <netinet/in.h> #include <netinet/in_systm.h> #include <netinet/ip.h> @@ -41,6 +46,22 @@ struct request_info *request; unsigned int opt; int optlen; struct in_addr dummy; +#ifdef INET6 + struct sockaddr_storage ss; + int sslen; + + /* + * check if this is AF_INET socket + * XXX IPv6 support? + */ + sslen = sizeof(ss); + if (getsockname(fd, (struct sockaddr *)&ss, &sslen) < 0) { + syslog(LOG_ERR, "getpeername: %m"); + clean_exit(request); + } + if (ss.ss_family != AF_INET) + return; +#endif if ((ip = getprotobyname("ip")) != 0) ipproto = ip->p_proto; |