components/libpcap/patches/10-biocsetlif.patch
author Mike Sullivan <Mike.Sullivan@Oracle.COM>
Mon, 30 Dec 2013 09:32:30 -0800
branchs11-update
changeset 2879 3430bb940676
parent 431 e60e527b8179
permissions -rw-r--r--
Close of build 30.

--- libpcap-1.1.1/pcap-bpf.c	Thu Mar 11 17:56:54 2010
+++ patched-libpcap-1.1.1/pcap-bpf.c	Tue Jul 12 14:49:10 2011
@@ -1392,7 +1392,15 @@
 {
 	int status = 0;
 	int fd;
+#ifdef LIFNAMSIZ
+	struct lifreq ifr;
+	char *ifrname = ifr.lifr_name;
+	const size_t ifnamsiz = sizeof(ifr.lifr_name);
+#else
 	struct ifreq ifr;
+	char *ifrname = ifr.ifr_name;
+	const size_t ifnamsiz = sizeof(ifr.ifr_name);
+#endif
 	struct bpf_version bv;
 #ifdef __APPLE__
 	int sockfd;
@@ -1484,9 +1492,7 @@
 					 */
 					sockfd = socket(AF_INET, SOCK_DGRAM, 0);
 					if (sockfd != -1) {
-						strlcpy(ifr.ifr_name,
-						    p->opt.source,
-						    sizeof(ifr.ifr_name));
+						strlcpy(ifrname, p->opt.source, ifnamsiz);
 						if (ioctl(sockfd, SIOCGIFFLAGS,
 						    (char *)&ifr) < 0) {
 							/*
@@ -1608,7 +1614,7 @@
 			    pcap_strerror(errno));
 			goto bad;
 		}
-		(void)strncpy(ifr.ifr_name, p->opt.source, sizeof(ifr.ifr_name));
+		(void)strncpy(ifrname, p->opt.source, ifrnamsiz);
 		if (ioctl(fd, BIOCSETIF, (caddr_t)&ifr) < 0) {
 			snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "BIOCSETIF: %s: %s",
 			    p->opt.source, pcap_strerror(errno));
@@ -1638,9 +1644,14 @@
 			/*
 			 * Now bind to the device.
 			 */
-			(void)strncpy(ifr.ifr_name, p->opt.source,
-			    sizeof(ifr.ifr_name));
-			if (ioctl(fd, BIOCSETIF, (caddr_t)&ifr) < 0) {
+			(void)strncpy(ifrname, p->opt.source, ifnamsiz);
+#ifdef BIOCSETLIF
+			if (ioctl(fd, BIOCSETLIF, (caddr_t)&ifr) < 0)
+#else
+
+			if (ioctl(fd, BIOCSETIF, (caddr_t)&ifr) < 0)
+#endif
+			{
 				status = check_setif_failure(p, errno);
 				goto bad;
 			}
@@ -1667,9 +1678,12 @@
 				 */
 				(void) ioctl(fd, BIOCSBLEN, (caddr_t)&v);
 
-				(void)strncpy(ifr.ifr_name, p->opt.source,
-				    sizeof(ifr.ifr_name));
+				(void)strncpy(ifrname, p->opt.source, ifnamsiz);
+#ifdef BIOCSETLIF
+				if (ioctl(fd, BIOCSETLIF, (caddr_t)&ifr) >= 0)
+#else
 				if (ioctl(fd, BIOCSETIF, (caddr_t)&ifr) >= 0)
+#endif
 					break;	/* that size worked; we're done */
 
 				if (errno != ENOBUFS) {