From 2e2bac1dea9409ebc78f157f2f3cfba5281f1ead Mon Sep 17 00:00:00 2001 From: Julian Kranz Date: Sun, 1 Jan 2012 17:28:44 +0100 Subject: [PATCH] --- --- src/client.c | 12 ++++++++++-- src/iodined.c | 15 +++++++++++++-- src/tun.c | 2 ++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/client.c b/src/client.c index adef407..11b162a 100644 --- a/src/client.c +++ b/src/client.c @@ -1502,6 +1502,9 @@ handshake_login(int dns_fd, int seed) int i; int read; + char server6[65]; + char client6[65]; + login_calculate(login, 16, password, seed); @@ -1514,11 +1517,16 @@ handshake_login(int dns_fd, int seed) /*XXX START adjust indent 1 tab back*/ if (read > 0) { int netmask; + int netmask6; if (strncmp("LNAK", in, 4) == 0) { fprintf(stderr, "Bad password\n"); return 1; - } else if (sscanf(in, "%64[^-]-%64[^-]-%d-%d", - server, client, &mtu, &netmask) == 4) { + } else if (sscanf(in, "%64[^-]-%64[^-]-%d-%d-%64[^-]-%d", + server, client, &mtu, &netmask, server6, client6, &netmask6) == 4) { + + fprintf(stderr, "Server tunnel IPv6 is %s\n", server6); + fprintf(stderr, "Client tunnel IPv6 is %s\n", client6); + fprintf(stderr, "Tunnel netmask is %d\n", netmask6); server[64] = 0; client[64] = 0; diff --git a/src/iodined.c b/src/iodined.c index 1ef289e..1ddc56a 100644 --- a/src/iodined.c +++ b/src/iodined.c @@ -789,8 +789,19 @@ handle_null_request(int tun_fd, int dns_fd, struct query *q, int domain_len) tempip.s_addr = users[userid].tun_ip; tmp[1] = strdup(inet_ntoa(tempip)); - read = snprintf(out, sizeof(out), "%s-%s-%d-%d", - tmp[0], tmp[1], my_mtu, netmask); + struct in6_addr ip6; + + memcpy(&ip6, &my_net6, sizeof(my_net6)); + inet6_addr_add(&ip6, 1); + char server6[41]; + inet_ntop(AF_INET6, &ip6, server6, sizeof(server6)); + + memcpy(&ip6, &(users[userid].tun_ip6), sizeof(my_net6)); + char client6[41]; + inet_ntop(AF_INET6, &ip6, client6, sizeof(client6)); + + read = snprintf(out, sizeof(out), "%s-%s-%d-%d-%s-%s-%d", + tmp[0], tmp[1], my_mtu, netmask, server6, client6, netmask6); write_dns(dns_fd, q, out, read, users[userid].downenc); q->id = 0; diff --git a/src/tun.c b/src/tun.c index 825e771..61df3f8 100644 --- a/src/tun.c +++ b/src/tun.c @@ -442,6 +442,8 @@ int tun_setip6(char const *ip6, char netmask6) { ip6, netmask6); + fprintf(stderr, "Setting IPv6 of %s to %s/%d\n", if_name, ip6, netmask6); + return system(cmdline); }