Merge pull request #254 from metalefty/freebsd/ipv6

Unbreak IPv6 on FreeBSD and add IPv6-only option
This commit is contained in:
Itamar Reis Peixoto 2016-02-08 22:40:05 -02:00
commit 08121e0840
2 changed files with 16 additions and 8 deletions

View File

@ -411,7 +411,7 @@ g_tcp_socket(void)
unsigned int option_len; unsigned int option_len;
#endif #endif
#if defined(XRDP_ENABLE_IPV6) && !defined(NO_ARPA_INET_H_IP6) #if defined(XRDP_ENABLE_IPV6)
rv = (int)socket(AF_INET6, SOCK_STREAM, 0); rv = (int)socket(AF_INET6, SOCK_STREAM, 0);
#else #else
rv = (int)socket(AF_INET, SOCK_STREAM, 0); rv = (int)socket(AF_INET, SOCK_STREAM, 0);
@ -420,14 +420,18 @@ g_tcp_socket(void)
{ {
return -1; return -1;
} }
#if defined(XRDP_ENABLE_IPV6) && !defined(NO_ARPA_INET_H_IP6) #if defined(XRDP_ENABLE_IPV6)
option_len = sizeof(option_value); option_len = sizeof(option_value);
if (getsockopt(rv, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&option_value, if (getsockopt(rv, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&option_value,
&option_len) == 0) &option_len) == 0)
{ {
if (option_value != 0) if (option_value != 0)
{ {
#if defined(XRDP_ENABLE_IPV6ONLY)
option_value = 1;
#else
option_value = 0; option_value = 0;
#endif
option_len = sizeof(option_value); option_len = sizeof(option_value);
if (setsockopt(rv, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&option_value, if (setsockopt(rv, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&option_value,
option_len) < 0) option_len) < 0)
@ -659,7 +663,7 @@ g_sck_close(int sck)
/*****************************************************************************/ /*****************************************************************************/
/* returns error, zero is good */ /* returns error, zero is good */
#if defined(XRDP_ENABLE_IPV6) && !defined(NO_ARPA_INET_H_IP6) #if defined(XRDP_ENABLE_IPV6)
int APP_CC int APP_CC
g_tcp_connect(int sck, const char *address, const char *port) g_tcp_connect(int sck, const char *address, const char *port)
{ {

View File

@ -54,6 +54,9 @@ AM_CONDITIONAL(SESMAN_NOPAM, [test x$enable_pam != xyes])
AC_ARG_ENABLE(ipv6, AS_HELP_STRING([--enable-ipv6], AC_ARG_ENABLE(ipv6, AS_HELP_STRING([--enable-ipv6],
[Build IPv6 support (default: no, experimental)]), [Build IPv6 support (default: no, experimental)]),
[], [enable_ipv6=no]) [], [enable_ipv6=no])
AC_ARG_ENABLE(ipv6only, AS_HELP_STRING([--enable-ipv6only],
[Build IPv6-only (default: no)]),
[], [enable_ipv6only=no])
AC_ARG_ENABLE(kerberos, AS_HELP_STRING([--enable-kerberos], AC_ARG_ENABLE(kerberos, AS_HELP_STRING([--enable-kerberos],
[Build kerberos support (default: no)]), [Build kerberos support (default: no)]),
[], [enable_kerberos=no]) [], [enable_kerberos=no])
@ -126,16 +129,17 @@ then
fi fi
fi fi
if test "x$enable_ipv6only" = "xyes"
then
enable_ipv6=yes
AC_DEFINE([XRDP_ENABLE_IPV6ONLY],1,[Enable IPv6 only])
fi
if test "x$enable_ipv6" = "xyes" if test "x$enable_ipv6" = "xyes"
then then
AC_DEFINE([XRDP_ENABLE_IPV6],1,[Enable IPv6]) AC_DEFINE([XRDP_ENABLE_IPV6],1,[Enable IPv6])
fi fi
AC_CHECK_MEMBER([struct in6_addr.s6_addr],
[],
[AC_DEFINE(NO_ARPA_INET_H_IP6, 1, [for IPv6])],
[#include <arpa/inet.h>])
if test "x$enable_pam" != "xyes" || test "x$bsd" = "xtrue" if test "x$enable_pam" != "xyes" || test "x$bsd" = "xtrue"
then then
AC_DEFINE([USE_NOPAM],1,[Disable PAM]) AC_DEFINE([USE_NOPAM],1,[Disable PAM])