From fe927da089120f5e0c5780d4183d61f030cc0bc5 Mon Sep 17 00:00:00 2001 From: Nikos Mavrogiannopoulos Date: Wed, 29 Jan 2014 18:27:57 +0100 Subject: [PATCH] corrected reading of IP addresses. --- src/vpn.h | 1 + src/worker-tun.c | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/vpn.h b/src/vpn.h index 8d775504..4028982f 100644 --- a/src/vpn.h +++ b/src/vpn.h @@ -261,6 +261,7 @@ const char *human_addr2(const struct sockaddr *sa, socklen_t salen, #define SA_IN6_PORT(p) (((struct sockaddr_in6 *)(p))->sin6_port) #define SA_IN_P_GENERIC(addr, size) ((size==sizeof(struct sockaddr_in))?SA_IN_U8_P(addr):SA_IN6_U8_P(addr)) +#define SA_IN_P_TYPE(addr, type) ((type==AF_INET)?SA_IN_U8_P(addr):SA_IN6_U8_P(addr)) #define SA_IN_SIZE(size) ((size==sizeof(struct sockaddr_in))?sizeof(struct in_addr):sizeof(struct in6_addr)) /* macros */ diff --git a/src/worker-tun.c b/src/worker-tun.c index ab3cae9c..fdc98729 100644 --- a/src/worker-tun.c +++ b/src/worker-tun.c @@ -72,8 +72,8 @@ int get_ips(struct worker_st *ws, struct vpn_st *vinfo, char **buffer, if (strcmp(vinfo->name, ifa->ifa_name) == 0) { p = (char *)inet_ntop(ifa->ifa_addr->sa_family, - ifa->ifa_addr, *buffer, - *buffer_size); + SA_IN_P_TYPE(ifa->ifa_addr, ifa->ifa_addr->sa_family), + *buffer, *buffer_size); if (p == NULL) { e = errno; oclog(ws, LOG_ERR, "inet_ntop error: %s", @@ -100,8 +100,8 @@ int get_ips(struct worker_st *ws, struct vpn_st *vinfo, char **buffer, continue; p = (char *)inet_ntop(ifa->ifa_dstaddr->sa_family, - ifa->ifa_dstaddr, *buffer, - *buffer_size); + SA_IN_P_TYPE(ifa->ifa_dstaddr, ifa->ifa_dstaddr->sa_family), + *buffer, *buffer_size); if (p == NULL) { e = errno; oclog(ws, LOG_ERR, "inet_ntop error: %s",