Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > e62f51b3c9c4797a380d8e815dd2df0a > files > 21

dhcpv6-0.10-33.el5.src.rpm

--- dhcp-0.10/common.h.salen	2006-07-18 22:17:41.000000000 -0400
+++ dhcp-0.10/common.h	2006-07-18 22:18:40.000000000 -0400
@@ -67,7 +67,7 @@
 extern long random_between __P((long, long));
 extern int prefix6_mask __P((struct in6_addr *, int));
 extern int sa6_plen2mask __P((struct sockaddr_in6 *, int));
-extern char *addr2str __P((struct sockaddr *));
+extern char *addr2str __P((struct sockaddr *, socklen_t));
 extern char *in6addr2str __P((struct in6_addr *, int));
 extern const char *getdev __P((struct sockaddr_in6 *));
 extern int in6_addrscopebyif __P((struct in6_addr *, char *));
--- dhcp-0.10/dhcp6s.c.salen	2006-07-18 22:17:41.000000000 -0400
+++ dhcp-0.10/dhcp6s.c	2006-07-18 22:17:41.000000000 -0400
@@ -569,7 +569,7 @@
 
 	dprintf(LOG_DEBUG, "%s" "received %s from %s", FNAME,
 	    dhcp6msgstr(dh6->dh6_msgtype),
-	    addr2str((struct sockaddr *)&from));
+	    addr2str((struct sockaddr *)&from, sizeof(((struct sockaddr *)&from)->sa_data)));
 
 	dhcp6_init_options(&optinfo);
 
@@ -1056,15 +1056,15 @@
 
 	dst.sin6_scope_id = ((struct sockaddr_in6 *)from)->sin6_scope_id;
 	dprintf(LOG_DEBUG, "send destination address is %s, scope id is %d", 
-		addr2str((struct sockaddr *)&dst), dst.sin6_scope_id);
+		addr2str((struct sockaddr *)&dst, sizeof(dst.sin6_addr)), dst.sin6_scope_id);
 	if (transmit_sa(outsock, &dst, replybuf, len) != 0) {
 		dprintf(LOG_ERR, "%s" "transmit %s to %s failed", FNAME,
-			dhcp6msgstr(type), addr2str((struct sockaddr *)&dst));
+			dhcp6msgstr(type), addr2str((struct sockaddr *)&dst, sizeof(dst.sin6_addr)));
 		return (-1);
 	}
 
 	dprintf(LOG_DEBUG, "%s" "transmit %s to %s", FNAME,
-		dhcp6msgstr(type), addr2str((struct sockaddr *)&dst));
+		dhcp6msgstr(type), addr2str((struct sockaddr *)&dst, sizeof(dst.sin6_addr)));
 
 	return 0;
 }
--- dhcp-0.10/dhcp6relay.c.salen	2003-02-27 14:43:08.000000000 -0500
+++ dhcp-0.10/dhcp6relay.c	2006-07-18 22:17:41.000000000 -0400
@@ -496,7 +496,7 @@
 	}
 
 	dprintf(LOG_DEBUG, "relay6_recv: from %s, size %d",
-		addr2str((struct sockaddr *)&from), len); 
+		addr2str((struct sockaddr *)&from, sizeof(from.data)), len); 
 
 	/* get optional information as ancillary data (if available) */
 	for (cm = (struct cmsghdr *)CMSG_FIRSTHDR(&rmh); cm;
@@ -705,7 +705,7 @@
 	if ((sdev = getdev(&sa6_relay)) == NULL) {
 		dprintf(LOG_WARNING,
 			"relay6_react_advert: can't detect interface from %s",
-			addr2str((struct sockaddr *)&sa6_relay));
+			in6addr2str(&dh6a->dh6adv_relayaddr, 0));
 		return;
 	}
 
--- dhcp-0.10/dhcp6c.c.salen	2006-07-18 22:17:41.000000000 -0400
+++ dhcp-0.10/dhcp6c.c	2006-07-18 22:17:41.000000000 -0400
@@ -114,6 +114,7 @@
 extern struct dhcp6_iaidaddr client6_iaidaddr;
 FILE *dhcp6_resolv_file;
 static const struct sockaddr_in6 *sa6_allagent;
+static socklen_t sa6_alen;
 static struct duid client_duid;
 
 static void usage __P((void));
@@ -381,7 +382,7 @@
 	}
 #endif
 	((struct sockaddr_in6 *)(res->ai_addr))->sin6_scope_id = ifidx;
-	dprintf(LOG_DEBUG, "res addr is %s/%d", addr2str(res->ai_addr), res->ai_addrlen);
+	dprintf(LOG_DEBUG, "res addr is %s/%d", addr2str(res->ai_addr, res->ai_addrlen), res->ai_addrlen);
 	if (bind(insock, res->ai_addr, res->ai_addrlen) < 0) {
 		dprintf(LOG_ERR, "%s" "bind(inbound): %s",
 			FNAME, strerror(errno));
@@ -434,6 +435,7 @@
 	}
 	memcpy(&sa6_allagent_storage, res->ai_addr, res->ai_addrlen);
 	sa6_allagent = (const struct sockaddr_in6 *)&sa6_allagent_storage;
+	sa6_alen = res->ai_addrlen;
 	freeaddrinfo(res);
 
 	/* client interface configuration */
@@ -814,6 +816,7 @@
 	struct dhcp6_optinfo optinfo;
 	ssize_t optlen, len;
 	struct timeval duration, now;
+	socklen_t salen;
 
 	ifp = ev->ifp;
 
@@ -1037,15 +1040,17 @@
 				exit(1);
 			}
 			memcpy(&dst, res->ai_addr, res->ai_addrlen);
+			salen = res->ai_addrlen;
 			break;
 		}
 	default:
 		dst = *sa6_allagent;
+		salen = sa6_alen;
 		break;
 	}
 	dst.sin6_scope_id = ifp->linkid;
 	dprintf(LOG_DEBUG, "send dst if %s addr is %s scope id is %d", 
-		ifp->ifname, addr2str((struct sockaddr *)&dst), ifp->linkid);
+		ifp->ifname, addr2str((struct sockaddr *)&dst, salen), ifp->linkid);
 	if (sendto(ifp->outsock, buf, len, MSG_DONTROUTE, (struct sockaddr *)&dst,
 	    sizeof(dst)) == -1) {
 		dprintf(LOG_ERR, FNAME "transmit failed: %s", strerror(errno));
@@ -1054,7 +1059,7 @@
 
 	dprintf(LOG_DEBUG, "%s" "send %s to %s", FNAME,
 		dhcp6msgstr(dh6->dh6_msgtype),
-		addr2str((struct sockaddr *)&dst));
+		addr2str((struct sockaddr *)&dst, salen));
 
   end:
 	dhcp6_clear_options(&optinfo);
@@ -1116,7 +1121,7 @@
 
 	dprintf(LOG_DEBUG, "%s" "receive %s from %s scope id %d %s", FNAME,
 		dhcp6msgstr(dh6->dh6_msgtype),
-		addr2str((struct sockaddr *)&from),
+		addr2str((struct sockaddr *)&from, sizeof (((struct sockaddr *)&from)->sa_data)),
 		((struct sockaddr_in6 *)&from)->sin6_scope_id,
 		ifp->ifname);
 
@@ -1141,7 +1146,7 @@
 	default:
 		dprintf(LOG_INFO, "%s" "received an unexpected message (%s) "
 			"from %s", FNAME, dhcp6msgstr(dh6->dh6_msgtype),
-			addr2str((struct sockaddr *)&from));
+			addr2str((struct sockaddr *)&from, sizeof(((struct sockaddr *)&from)->sa_data)));
 		break;
 	}
 
--- dhcp-0.10/common.c.salen	2006-07-18 22:17:41.000000000 -0400
+++ dhcp-0.10/common.c	2006-07-18 22:17:41.000000000 -0400
@@ -560,17 +560,19 @@
 }
 
 char *
-addr2str(sa)
+addr2str(sa, salen)
 	struct sockaddr *sa;
+	socklen_t salen;
 {
-	static char addrbuf[8][NI_MAXHOST];
+	static char addrbuf[8][NI_MAXHOST+1];
 	static int round = 0;
 	char *cp;
 
 	round = (round + 1) & 7;
 	cp = addrbuf[round];
+	memset(cp, '\0', NI_MAXHOST+1);
 
-	if (getnameinfo(sa, NI_MAXSERV, cp, NI_MAXHOST, NULL, 
+	if (getnameinfo(sa, salen, cp, NI_MAXHOST, NULL, 
 				0, NI_NUMERICHOST) != 0)
 		dprintf(LOG_ERR, "%s getnameinfo return error", FNAME);
 
@@ -589,7 +591,7 @@
 	sa6.sin6_addr = *in6;
 	sa6.sin6_scope_id = scopeid;
 
-	return (addr2str((struct sockaddr *)&sa6));
+	return (addr2str((struct sockaddr *)&sa6, sizeof (*in6)));
 }
 
 /* return IPv6 address scope type. caller assumes that smaller is narrower. */
@@ -648,7 +650,7 @@
 
 	if (ioctl(s, SIOCGIFFLAGS, &ifr) < 0) {
 		warn("in6_matchflags: ioctl(SIOCGIFFLAGS, %s)",
-		     addr2str(addr));
+		     addr2str(addr, sizeof (addr->sa_data)));
 		close(s);
 		return (-1);
 	}