diff --git a/src/client.c b/src/client.c index 444b4ba..e70d454 100644 --- a/src/client.c +++ b/src/client.c @@ -380,7 +380,9 @@ send_query(int fd, char *hostname) chunkid_prev = chunkid; chunkid += 7727; if (chunkid == 0) - /* 0 is used as "no-query" in iodined.c */ + /* 0 is used as "no-query" in iodined static char a = 0; + printf("send_query() -> sendto: %d\n", a); + a++;.c */ chunkid = 7727; q.id = chunkid; @@ -396,10 +398,6 @@ send_query(int fd, char *hostname) fprintf(stderr, " Sendquery: id %5d name[0] '%c'\n", q.id, hostname[0]); #endif - static char a = 0; - printf("send_query() -> sendto: %d\n", a); - a++; - if(_v6_connect) sendto(fd, packet, len, 0, (struct sockaddr*)&nameserv6, sizeof(nameserv6)); else diff --git a/src/iodined.c b/src/iodined.c index da2c290..6e8670d 100644 --- a/src/iodined.c +++ b/src/iodined.c @@ -154,14 +154,18 @@ check_user_and_ip(int userid, struct query *q) return 0; } - /** - * Todo: IPv6 - */ - - return 0; - - tempin = (struct sockaddr_in *) &(q->from); - return memcmp(&(users[userid].host), &(tempin->sin_addr), sizeof(struct in_addr)); +#ifdef LINUX + if (v6_listen) { + return memcmp(&(users[userid].host.v6), &q->from.v6, + sizeof(struct in6_addr)); + } else { +#endif + tempin = (struct sockaddr_in *) &(q->from); + return memcmp(&(users[userid].host), &(tempin->sin_addr), + sizeof(struct in_addr)); +#ifdef LINUX + } +#endif } static void diff --git a/src/user.h b/src/user.h index 33e0e1f..43ddcaf 100644 --- a/src/user.h +++ b/src/user.h @@ -44,7 +44,10 @@ struct user { #ifdef LINUX struct in6_addr tun_ip6; #endif - struct in_addr host; + union { + struct in_addr v4; + struct in6_addr v6; + } host; struct query q; struct query q_sendrealsoon; int q_sendrealsoon_new;