components/libpcap/patches/01-pcap-bpf.m4.patch
author Jon Anderson <jon.anderson@oracle.com>
Thu, 18 Sep 2014 11:51:03 +0100
changeset 2093 a1854d61ecef
permissions -rw-r--r--
19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2093
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
     1
#
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
     2
# This patch was devleloped in house.  The changes have been fed
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
     3
# upstream and were merged into the-tcpdump-group/libpcap.  This
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
     4
# was committed under 2f9790bd3cfe56c0f78d10953571dc4b34060e4f.
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
     5
#
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
     6
# libpcap-1.7.0 is the projected release which will include this
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
     7
# change.
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
     8
#
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
     9
--- libpcap-1.5.1/pcap-bpf.c	2014-08-14 16:14:46.837979600 +0100
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    10
+++ libpcap-1.5.1/pcap-bpf.c	2014-08-18 15:13:20.805460460 +0100
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    11
@@ -1539,22 +1539,43 @@
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    12
 
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    13
 #if defined(LIFNAMSIZ) && defined(ZONENAME_MAX) && defined(lifr_zoneid)
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    14
 	/*
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    15
+	 * Retrieve the zoneid of the zone we are currently executing in.
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    16
+	 */
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    17
+	if ((ifr.lifr_zoneid = getzoneid()) == -1) {
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    18
+		snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "getzoneid(): %s",
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    19
+		     pcap_strerror(errno));
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    20
+		status = PCAP_ERROR;
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    21
+		goto bad;
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    22
+	}
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    23
+	/*
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    24
 	 * Check if the given source network device has a '/' separated
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    25
-	 * zonename prefix string. The zonename prefixed source device
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    26
-	 * can be used by libpcap consumers to capture network traffic
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    27
-	 * in non-global zones from the global zone on Solaris 11 and
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    28
-	 * above. If the zonename prefix is present then we strip the
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    29
-	 * prefix and pass the zone ID as part of lifr_zoneid.
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    30
+	 * zonename prefix string.  The zonename prefixed source device can
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    31
+	 * be used by pcap consumers in the Solaris global zone to capture
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    32
+	 * traffic on datalinks in non-global zones.  Non-global zones
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    33
+	 * do not have access to datalinks outside of their own namespace.
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    34
 	 */
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    35
 	if ((zonesep = strchr(p->opt.source, '/')) != NULL) {
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    36
-		char zonename[ZONENAME_MAX];
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    37
+		char path_zname[ZONENAME_MAX];
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    38
 		int  znamelen;
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    39
 		char *lnamep;
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    40
 
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    41
+		if (ifr.lifr_zoneid != GLOBAL_ZONEID) {
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    42
+			snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    43
+			    "zonename/linkname only valid in global zone.");
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    44
+			status = PCAP_ERROR;
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    45
+			goto bad;
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    46
+		}
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    47
 		znamelen = zonesep - p->opt.source;
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    48
-		(void) strlcpy(zonename, p->opt.source, znamelen + 1);
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    49
+		(void) strlcpy(path_zname, p->opt.source, znamelen + 1);
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    50
+		ifr.lifr_zoneid = getzoneidbyname(path_zname);
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    51
+		if (ifr.lifr_zoneid == -1) {
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    52
+			snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    53
+			    "getzoneidbyname(%s): %s", path_zname,
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    54
+		    	pcap_strerror(errno));
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    55
+			status = PCAP_ERROR;
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    56
+			goto bad;
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    57
+		}
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    58
 		lnamep = strdup(zonesep + 1);
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    59
-		ifr.lifr_zoneid = getzoneidbyname(zonename);
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    60
 		free(p->opt.source);
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    61
 		p->opt.source = lnamep;
a1854d61ecef 19352199 libpcap does not handle zoneid and zoneid/linkname correctly
Jon Anderson <jon.anderson@oracle.com>
parents:
diff changeset
    62
 	}