PR: 2005
Submitted by: steve@openssl.org Some systems have broken IPv6 headers and/or implementations. If OPENSSL_USE_IPV6 is set to 0 IPv6 is not used, if it is set to 1 it is used and if undefined an attempt is made to detect at compile time by checking if AF_INET6 is set and excluding known problem platforms.
This commit is contained in:
parent
17f8d8db61
commit
b8dc932c05
@ -88,11 +88,6 @@ NETDB_DEFINE_CONTEXT
|
|||||||
static int wsa_init_done=0;
|
static int wsa_init_done=0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(OPENSSL_SYS_BEOS_BONE)
|
|
||||||
/* BONE's IP6 support is incomplete */
|
|
||||||
#undef AF_INET6
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
static unsigned long BIO_ghbn_hits=0L;
|
static unsigned long BIO_ghbn_hits=0L;
|
||||||
static unsigned long BIO_ghbn_miss=0L;
|
static unsigned long BIO_ghbn_miss=0L;
|
||||||
@ -654,7 +649,7 @@ int BIO_get_accept_socket(char *host, int bind_mode)
|
|||||||
if (strchr(h,':'))
|
if (strchr(h,':'))
|
||||||
{
|
{
|
||||||
if (h[1]=='\0') h=NULL;
|
if (h[1]=='\0') h=NULL;
|
||||||
#ifdef AF_INET6
|
#if OPENSSL_USE_IPV6
|
||||||
hint.ai_family = AF_INET6;
|
hint.ai_family = AF_INET6;
|
||||||
#else
|
#else
|
||||||
h=NULL;
|
h=NULL;
|
||||||
@ -720,7 +715,7 @@ again:
|
|||||||
client = server;
|
client = server;
|
||||||
if (h == NULL || strcmp(h,"*") == 0)
|
if (h == NULL || strcmp(h,"*") == 0)
|
||||||
{
|
{
|
||||||
#ifdef AF_INET6
|
#if OPENSSL_USE_IPV6
|
||||||
if (client.sa_family == AF_INET6)
|
if (client.sa_family == AF_INET6)
|
||||||
{
|
{
|
||||||
struct sockaddr_in6 *sin6 =
|
struct sockaddr_in6 *sin6 =
|
||||||
|
@ -429,12 +429,14 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
|
|||||||
&sockopt_val, sizeof(sockopt_val))) < 0)
|
&sockopt_val, sizeof(sockopt_val))) < 0)
|
||||||
perror("setsockopt");
|
perror("setsockopt");
|
||||||
break;
|
break;
|
||||||
|
#if OPENSSL_USE_IPV6
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
sockopt_val = IPV6_PMTUDISC_DO;
|
sockopt_val = IPV6_PMTUDISC_DO;
|
||||||
if ((ret = setsockopt(b->num, IPPROTO_IPV6, IPV6_MTU_DISCOVER,
|
if ((ret = setsockopt(b->num, IPPROTO_IPV6, IPV6_MTU_DISCOVER,
|
||||||
&sockopt_val, sizeof(sockopt_val))) < 0)
|
&sockopt_val, sizeof(sockopt_val))) < 0)
|
||||||
perror("setsockopt");
|
perror("setsockopt");
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
ret = -1;
|
ret = -1;
|
||||||
break;
|
break;
|
||||||
@ -470,6 +472,7 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
|
|||||||
ret = data->mtu;
|
ret = data->mtu;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#if OPENSSL_USE_IPV6
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
if ((ret = getsockopt(b->num, IPPROTO_IPV6, IPV6_MTU, (void *)&sockopt_val,
|
if ((ret = getsockopt(b->num, IPPROTO_IPV6, IPV6_MTU, (void *)&sockopt_val,
|
||||||
&sockopt_len)) < 0 || sockopt_val < 0)
|
&sockopt_len)) < 0 || sockopt_val < 0)
|
||||||
@ -485,6 +488,7 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
|
|||||||
ret = data->mtu;
|
ret = data->mtu;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
|
12
e_os.h
12
e_os.h
@ -624,6 +624,18 @@ static unsigned int _strlen31(const char *str)
|
|||||||
# define INVALID_SOCKET (-1)
|
# define INVALID_SOCKET (-1)
|
||||||
# endif /* INVALID_SOCKET */
|
# endif /* INVALID_SOCKET */
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
/* Some IPv6 implementations are broken, disable them in known bad
|
||||||
|
* versions.
|
||||||
|
*/
|
||||||
|
# if !defined(OPENSSL_USE_IPV6)
|
||||||
|
# if defined(AF_INET6) && !defined(OPENSSL_SYS_BEOS_BONE) && !defined(NETWARE_CLIB)
|
||||||
|
# define OPENSSL_USE_IPV6 1
|
||||||
|
# else
|
||||||
|
# define OPENSSL_USE_IPV6 0
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__ultrix)
|
#if defined(__ultrix)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user