some ipv6 support (from Love)

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@11477 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Johan Danielsson
2002-10-15 16:48:46 +00:00
parent c9a930b1c7
commit c0a3a2220c
5 changed files with 82 additions and 46 deletions

View File

@@ -754,17 +754,29 @@ replace_cookie(int xserver, int fd, char *filename, int cookiesp) /* XXX */
*/
int
suspicious_address (int sock, struct sockaddr_in addr)
suspicious_address (int sock, struct sockaddr_storage *addr)
{
char data[40];
socklen_t len = sizeof(data);
return addr.sin_addr.s_addr != htonl(INADDR_LOOPBACK)
switch (addr->ss_family) {
case AF_INET:
return ((struct sockaddr_in *)addr)->sin_addr.s_addr !=
htonl(INADDR_LOOPBACK)
#if defined(IP_OPTIONS) && defined(HAVE_GETSOCKOPT)
|| getsockopt (sock, IPPROTO_IP, IP_OPTIONS, data, &len) < 0
|| len != 0
|| getsockopt (sock, IPPROTO_IP, IP_OPTIONS, data, &len) < 0
|| len != 0
#endif
;
;
break;
#ifdef HAVE_IPV6
case AF_INET6:
/* XXX check route headers */
return !IN6_IS_ADDR_LOOPBACK(&((struct sockaddr_in6*)addr)->sin6_addr);
#endif
default:
return 1;
}
}
/*