X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fxcb_auth.c;h=51e575c24424dd4183b360502e5baf7369aba039;hb=fcb433db80315a44154248a9229c9cfcbab63f04;hp=4842d1de803652f556126a978915267a7dccb1f3;hpb=7fbfebaa3fb3a5ca2d2a307a0a5c40c015e18115;p=free-sw%2Fxcb%2Flibxcb diff --git a/src/xcb_auth.c b/src/xcb_auth.c index 4842d1d..51e575c 100644 --- a/src/xcb_auth.c +++ b/src/xcb_auth.c @@ -68,7 +68,7 @@ static size_t memdup(char **dst, void *src, size_t len) return len; } -static int authname_match(enum auth_protos kind, char *name, int namelen) +static int authname_match(enum auth_protos kind, char *name, size_t namelen) { if(strlen(authnames[kind]) != namelen) return 0; @@ -93,6 +93,7 @@ static Xauth *get_authptr(struct sockaddr *sockname, unsigned int socknamelen, family = FamilyLocal; /* 256 */ switch(sockname->sa_family) { +#ifdef AF_INET6 case AF_INET6: addr = (char *) SIN6_ADDR(sockname); addrlen = sizeof(*SIN6_ADDR(sockname)); @@ -104,6 +105,7 @@ static Xauth *get_authptr(struct sockaddr *sockname, unsigned int socknamelen, } addr += 12; /* if v4-mapped, fall through. */ +#endif case AF_INET: if(!addr) addr = (char *) &((struct sockaddr_in *)sockname)->sin_addr; @@ -179,12 +181,13 @@ static int compute_auth(xcb_auth_info_t *info, Xauth *authptr, struct sockaddr * APPEND(info->data, j, si->sin_port); } break; +#ifdef AF_INET6 case AF_INET6: /*block*/ { struct sockaddr_in6 *si6 = (struct sockaddr_in6 *) sockname; if(IN6_IS_ADDR_V4MAPPED(SIN6_ADDR(sockname))) { - APPEND(info->data, j, si6->sin6_addr.s6_addr[12]); + do_append(info->data, j, &si6->sin6_addr.s6_addr[12], 4); APPEND(info->data, j, si6->sin6_port); } else @@ -192,17 +195,18 @@ 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); } } break; +#endif 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); } @@ -212,9 +216,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);