X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fxcb_auth.c;h=ffc05154791e71899e2e20672bdebf9748344ea1;hb=27f98afc2f7039f8546d6cab5a72f609c72299d6;hp=afab3189a14a5ef1c0b66adb8787e184e2e00f86;hpb=684b8271a4539527daa15da82ad0cc302fb44727;p=free-sw%2Fxcb%2Flibxcb diff --git a/src/xcb_auth.c b/src/xcb_auth.c index afab318..ffc0515 100644 --- a/src/xcb_auth.c +++ b/src/xcb_auth.c @@ -77,6 +77,8 @@ static int authname_match(enum auth_protos kind, char *name, int namelen) return 1; } +#define SIN6_ADDR(s) (&((struct sockaddr_in6 *)s)->sin6_addr) + static Xauth *get_authptr(struct sockaddr *sockname, unsigned int socknamelen, int display) { @@ -92,11 +94,11 @@ static Xauth *get_authptr(struct sockaddr *sockname, unsigned int socknamelen, switch(sockname->sa_family) { case AF_INET6: - addr = (char *) &((struct sockaddr_in6 *)sockname)->sin6_addr; - addrlen = sizeof(((struct sockaddr_in6 *)sockname)->sin6_addr); - if(!IN6_IS_ADDR_V4MAPPED(addr)) + addr = (char *) SIN6_ADDR(sockname); + addrlen = sizeof(*SIN6_ADDR(sockname)); + 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; break; } @@ -180,7 +182,7 @@ static int compute_auth(xcb_auth_info_t *info, Xauth *authptr, struct sockaddr * case AF_INET6: /*block*/ { 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_port); @@ -190,8 +192,8 @@ static int compute_auth(xcb_auth_info_t *info, Xauth *authptr, struct sockaddr * /* XDM-AUTHORIZATION-1 does not handle IPv6 correctly. Do the same thing Xlib does: use all zeroes for the 4-byte address and 2-byte port number. */ - long fakeaddr = 0; - short fakeport = 0; + uint32_t fakeaddr = 0; + uint16_t fakeport = 0; APPEND(info->data, j, fakeaddr); APPEND(info->data, j, fakeport); } @@ -199,8 +201,8 @@ static int compute_auth(xcb_auth_info_t *info, Xauth *authptr, struct sockaddr * break; case AF_UNIX: /*block*/ { - long fakeaddr = htonl(0xffffffff - next_nonce()); - short fakeport = htons(getpid()); + uint32_t fakeaddr = htonl(0xffffffff - next_nonce()); + uint16_t fakeport = htons(getpid()); APPEND(info->data, j, fakeaddr); APPEND(info->data, j, fakeport); } @@ -210,9 +212,7 @@ static int compute_auth(xcb_auth_info_t *info, Xauth *authptr, struct sockaddr * return 0; /* do not know how to build this */ } { - long now; - time(&now); - now = htonl(now); + uint32_t now = htonl(time(0)); APPEND(info->data, j, now); } assert(j <= 192 / 8);