Fix IP6 work for FreeBSD/Mac.
This commit is contained in:
parent
684b8271a4
commit
7fbfebaa3f
|
@ -77,6 +77,8 @@ static int authname_match(enum auth_protos kind, char *name, int namelen)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define SIN6_ADDR(s) (&((struct sockaddr_in6 *)s)->sin6_addr)
|
||||||
|
|
||||||
static Xauth *get_authptr(struct sockaddr *sockname, unsigned int socknamelen,
|
static Xauth *get_authptr(struct sockaddr *sockname, unsigned int socknamelen,
|
||||||
int display)
|
int display)
|
||||||
{
|
{
|
||||||
|
@ -92,11 +94,11 @@ static Xauth *get_authptr(struct sockaddr *sockname, unsigned int socknamelen,
|
||||||
switch(sockname->sa_family)
|
switch(sockname->sa_family)
|
||||||
{
|
{
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
addr = (char *) &((struct sockaddr_in6 *)sockname)->sin6_addr;
|
addr = (char *) SIN6_ADDR(sockname);
|
||||||
addrlen = sizeof(((struct sockaddr_in6 *)sockname)->sin6_addr);
|
addrlen = sizeof(*SIN6_ADDR(sockname));
|
||||||
if(!IN6_IS_ADDR_V4MAPPED(addr))
|
if(!IN6_IS_ADDR_V4MAPPED(SIN6_ADDR(sockname)))
|
||||||
{
|
{
|
||||||
if(!IN6_IS_ADDR_LOOPBACK(addr))
|
if(!IN6_IS_ADDR_LOOPBACK(SIN6_ADDR(sockname)))
|
||||||
family = XCB_FAMILY_INTERNET_6;
|
family = XCB_FAMILY_INTERNET_6;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -180,7 +182,7 @@ static int compute_auth(xcb_auth_info_t *info, Xauth *authptr, struct sockaddr *
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
/*block*/ {
|
/*block*/ {
|
||||||
struct sockaddr_in6 *si6 = (struct sockaddr_in6 *) sockname;
|
struct sockaddr_in6 *si6 = (struct sockaddr_in6 *) sockname;
|
||||||
if(IN6_IS_ADDR_V4MAPPED(si6->sin6_addr.s6_addr))
|
if(IN6_IS_ADDR_V4MAPPED(SIN6_ADDR(sockname)))
|
||||||
{
|
{
|
||||||
APPEND(info->data, j, si6->sin6_addr.s6_addr[12]);
|
APPEND(info->data, j, si6->sin6_addr.s6_addr[12]);
|
||||||
APPEND(info->data, j, si6->sin6_port);
|
APPEND(info->data, j, si6->sin6_port);
|
||||||
|
|
Loading…
Reference in New Issue