diff --git a/miniupnpd/Changelog.txt b/miniupnpd/Changelog.txt index 33046ea..56579a0 100644 --- a/miniupnpd/Changelog.txt +++ b/miniupnpd/Changelog.txt @@ -1,4 +1,7 @@ -$Id: Changelog.txt,v 1.382 2014/10/27 16:35:42 nanard Exp $ +$Id: Changelog.txt,v 1.383 2014/11/07 11:53:37 nanard Exp $ + +2014/11/07: + sockaddr_to_string() includes scope in IPv6 addresses VERSION 1.9 : released on 2014/10/27 diff --git a/miniupnpd/upnputils.c b/miniupnpd/upnputils.c index 33930b3..71bbe1e 100644 --- a/miniupnpd/upnputils.c +++ b/miniupnpd/upnputils.c @@ -1,4 +1,4 @@ -/* $Id: upnputils.c,v 1.8 2014/02/05 17:00:26 nanard Exp $ */ +/* $Id: upnputils.c,v 1.10 2014/11/07 11:53:39 nanard Exp $ */ /* MiniUPnP project * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ * (c) 2006-2014 Thomas Bernard @@ -44,7 +44,14 @@ sockaddr_to_string(const struct sockaddr * addr, char * str, size_t size) snprintf(buffer, sizeof(buffer), "inet_ntop: %s", strerror(errno)); } port = ntohs(((struct sockaddr_in6 *)addr)->sin6_port); - n = snprintf(str, size, "[%s]:%hu", buffer, port); + if(((struct sockaddr_in6 *)addr)->sin6_scope_id > 0) { + char ifname[IF_NAMESIZE]; + if(if_indextoname(((struct sockaddr_in6 *)addr)->sin6_scope_id, ifname) == NULL) + strncpy(ifname, "ERROR", sizeof(ifname)); + n = snprintf(str, size, "[%s%%%s]:%hu", buffer, ifname, port); + } else { + n = snprintf(str, size, "[%s]:%hu", buffer, port); + } break; #endif /* AF_INET6 */ case AF_INET: