diff -up net-tools-1.60/lib/inet6.c.inet6-lookup net-tools-1.60/lib/inet6.c --- net-tools-1.60/lib/inet6.c.inet6-lookup 2011-11-21 02:31:57.000000000 +0100 +++ net-tools-1.60/lib/inet6.c 2011-12-01 17:10:40.057969536 +0100 @@ -149,33 +149,9 @@ static const char *INET6_sprint(struct s } -static int INET6_getsock(char *bufp, struct sockaddr *sap) -{ - struct sockaddr_in6 *sin6; - char *p; - - sin6 = (struct sockaddr_in6 *) sap; - sin6->sin6_family = AF_INET6; - sin6->sin6_port = 0; - sin6->sin6_scope_id = 0; - sin6->sin6_flowinfo = 0; - - if (inet_pton(AF_INET6, bufp, sin6->sin6_addr.s6_addr) <= 0) - return (-1); - p = fix_v4_address(bufp, &sin6->sin6_addr); - if (p != bufp) - memcpy(bufp, p, strlen(p)+1); - return 16; /* ?;) */ -} - static int INET6_input(int type, char *bufp, struct sockaddr *sap) { - switch (type) { - case 1: - return (INET6_getsock(bufp, sap)); - default: - return (INET6_resolve(bufp, (struct sockaddr_in6 *) sap)); - } + return (INET6_resolve(bufp, (struct sockaddr_in6 *) sap)); } diff -up net-tools-1.60/lib/inet6_gr.c.inet6-lookup net-tools-1.60/lib/inet6_gr.c --- net-tools-1.60/lib/inet6_gr.c.inet6-lookup 2011-11-21 02:31:57.000000000 +0100 +++ net-tools-1.60/lib/inet6_gr.c 2011-12-01 17:11:21.958445708 +0100 @@ -108,7 +108,7 @@ int rprint_fib6(int ext, int numeric) addr6p[4], addr6p[5], addr6p[6], addr6p[7]); inet6_aftype.input(1, addr6, (struct sockaddr *) &saddr6); snprintf(addr6, sizeof(addr6), "%s/%d", - inet6_aftype.sprint((struct sockaddr *) &saddr6, 1), + inet6_aftype.sprint((struct sockaddr *) &saddr6, numeric), prefix_len); /* Fetch and resolve the nexthop address. */ @@ -117,7 +117,7 @@ int rprint_fib6(int ext, int numeric) naddr6p[4], naddr6p[5], naddr6p[6], naddr6p[7]); inet6_aftype.input(1, naddr6, (struct sockaddr *) &snaddr6); snprintf(naddr6, sizeof(naddr6), "%s", - inet6_aftype.sprint((struct sockaddr *) &snaddr6, 1)); + inet6_aftype.sprint((struct sockaddr *) &snaddr6, numeric)); /* Decode the flags. */ diff -up net-tools-1.60/lib/inet6_sr.c.inet6-lookup net-tools-1.60/lib/inet6_sr.c --- net-tools-1.60/lib/inet6_sr.c.inet6-lookup 2011-11-21 02:31:57.000000000 +0100 +++ net-tools-1.60/lib/inet6_sr.c 2011-12-01 17:14:32.707061021 +0100 @@ -32,6 +32,7 @@ #include "net-support.h" #include "pathnames.h" #include "intl.h" +#include "util.h" #include "net-features.h" @@ -63,7 +64,7 @@ static int INET6_setroute(int action, in if (*args == NULL) return (usage()); - strcpy(target, *args++); + safe_strncpy(target, *args++, sizeof(target)); if (!strcmp(target, "default")) { prefix_len = 0; memset(&sa6, 0, sizeof(sa6)); @@ -112,7 +113,7 @@ static int INET6_setroute(int action, in return (usage()); if (rt.rtmsg_flags & RTF_GATEWAY) return (usage()); - strcpy(gateway, *args); + safe_strncpy(gateway, *args, sizeof(gateway)); if (inet6_aftype.input(1, gateway, (struct sockaddr *) &sa6) < 0) { inet6_aftype.herror(gateway); @@ -152,7 +153,7 @@ static int INET6_setroute(int action, in } if (devname) { memset(&ifr, 0, sizeof(ifr)); - strcpy(ifr.ifr_name, devname); + safe_strncpy(ifr.ifr_name, devname, sizeof(ifr.ifr_name)); if (ioctl(skfd, SIOGIFINDEX, &ifr) < 0) { perror("SIOGIFINDEX");