components/openscap/patches/system_info.c.patch
author Drew Fisher <drew.fisher@oracle.com>
Fri, 13 Jun 2014 10:00:52 -0600
changeset 1947 b80524cd88bc
parent 1369 20813e08fff3
permissions -rw-r--r--
18977267 common/openstack.p5m should have additional dependencies
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1369
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     1
This patch provides the system info probe functionality for solaris. It
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     2
detects the ethernet network interfaces and MAC and IP addresses associated
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     3
with them.
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     4
This patch has not been contributed upstream, but is planned to be done by
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     5
 2013-Jul-12.
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     6
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     7
--- openscap-0.9.5/src/OVAL/probes/independent/system_info.c.~1~	2012-11-06 05:51:30.048128639 -0800
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     8
+++ openscap-0.9.5/src/OVAL/probes/independent/system_info.c	2013-04-03 15:04:36.221945232 -0700
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     9
@@ -92,7 +92,73 @@
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    10
 
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    11
        return mac_buf;
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    12
 }
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    13
+#else if defined(__SVR4) && defined(__sun)
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    14
+#include <sys/socket.h>
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    15
+#include <ifaddrs.h>
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    16
+#include <netdb.h>
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    17
+#include <sys/ioctl.h>
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    18
+#include <string.h>
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    19
+#include <net/if.h>
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    20
+#include <arpa/inet.h>
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    21
+#include <sys/sockio.h>
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    22
+#include <net/if_types.h>
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    23
+#include <libdlpi.h>
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    24
 
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    25
+static int fd=-1;
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    26
+
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    27
+static char *get_mac(const struct ifaddrs *ifa)
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    28
+{
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    29
+       struct lifreq lifr;
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    30
+	uint_t physaddrlen = DLPI_PHYSADDR_MAX;
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    31
+	uchar_t physaddr[DLPI_PHYSADDR_MAX];
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    32
+	static char mac_buf[DLPI_PHYSADDR_MAX];
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    33
+	char *str;
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    34
+	int retv;
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    35
+	dlpi_handle_t dh;
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    36
+	dlpi_info_t dlinfo;
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    37
+
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    38
+	memset(mac_buf, 0, sizeof(mac_buf));
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    39
+       memset(&lifr, 0, sizeof(struct lifreq));
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    40
+       strlcpy(lifr.lifr_name, ifa->ifa_name, sizeof (lifr.lifr_name));
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    41
+	if (ioctl(fd, SIOCGLIFFLAGS, &lifr) >= 0) {
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    42
+
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    43
+		if (lifr.lifr_flags & (IFF_VIRTUAL| IFF_IPMP))
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    44
+			return (mac_buf);
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    45
+
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    46
+		if (dlpi_open(lifr.lifr_name, &dh, 0) != DLPI_SUCCESS)
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    47
+			return (NULL);
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    48
+
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    49
+		retv = dlpi_get_physaddr(dh, DL_CURR_PHYS_ADDR, physaddr,
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    50
+			&physaddrlen);
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    51
+		if (retv != DLPI_SUCCESS) {
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    52
+			dlpi_close(dh);
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    53
+			return (NULL);
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    54
+		}
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    55
+		
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    56
+		retv = dlpi_info(dh, &dlinfo, DLPI_INFO_VERSION);
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    57
+		if (retv != DLPI_SUCCESS) {
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    58
+			dlpi_close(dh);
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    59
+			return (NULL);
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    60
+		}
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    61
+		dlpi_close(dh);
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    62
+		str = _link_ntoa(physaddr, NULL, physaddrlen, IFT_OTHER);
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    63
+
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    64
+		if (str != NULL && physaddrlen != 0) {
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    65
+			switch(dlinfo.di_mactype) {
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    66
+			case DL_IB:
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    67
+				break;	
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    68
+			default:
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    69
+				strlcpy(mac_buf, str, sizeof(mac_buf));
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    70
+				break;
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    71
+			}
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    72
+			free(str);
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    73
+		}
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    74
+	}
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    75
+	return mac_buf;
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    76
+}
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    77
+#endif
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    78
+
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    79
+#if defined(__linux__) || (defined(__SVR4) && defined(__sun))
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    80
 static int get_ifs(SEXP_t *item)
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    81
 {
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    82
        struct ifaddrs *ifaddr, *ifa;
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    83
@@ -119,6 +185,14 @@
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    84
                         continue;
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    85
 
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    86
                 mac = get_mac(ifa);
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    87
+#if defined(__SVR4) && defined(__sun)
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    88
+		if (mac == NULL) {
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    89
+			rc = 1;
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    90
+			goto leave2;
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    91
+		}
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    92
+		if (mac[0] == '\0')
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    93
+			continue;
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    94
+#endif
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    95
 		if (family == AF_INET) {
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    96
 			rc = getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_in),
20813e08fff3 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    97
 				host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);