components/openscap/patches/system_info.c.patch
author Jacob Varughese <jacob.varughese@oracle.com>
Mon, 29 Jul 2013 09:35:09 -0700
branchs11-update
changeset 2705 e39a44e3cb41
permissions -rw-r--r--
16186483 Port openscap 0.9.7 to solaris 16371391 system info probe does not provide phys. interface name, mac addr and IP addr 16597173 File probe crashes when encountering file types of door,port 16908303 oscap leaves too many open file descriptors, processing xccdf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2705
e39a44e3cb41 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
e39a44e3cb41 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
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     3
with them.
e39a44e3cb41 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
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     5
 2013-Jul-12.
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     6
e39a44e3cb41 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
e39a44e3cb41 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
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     9
@@ -92,7 +92,73 @@
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    10
 
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    11
        return mac_buf;
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    12
 }
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    13
+#else if defined(__SVR4) && defined(__sun)
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    14
+#include <sys/socket.h>
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    15
+#include <ifaddrs.h>
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    16
+#include <netdb.h>
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    17
+#include <sys/ioctl.h>
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    18
+#include <string.h>
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    19
+#include <net/if.h>
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    20
+#include <arpa/inet.h>
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    21
+#include <sys/sockio.h>
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    22
+#include <net/if_types.h>
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    23
+#include <libdlpi.h>
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    24
 
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    25
+static int fd=-1;
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    26
+
e39a44e3cb41 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)
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    28
+{
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    29
+       struct lifreq lifr;
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    30
+	uint_t physaddrlen = DLPI_PHYSADDR_MAX;
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    31
+	uchar_t physaddr[DLPI_PHYSADDR_MAX];
e39a44e3cb41 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];
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    33
+	char *str;
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    34
+	int retv;
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    35
+	dlpi_handle_t dh;
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    36
+	dlpi_info_t dlinfo;
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    37
+
e39a44e3cb41 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));
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    39
+       memset(&lifr, 0, sizeof(struct lifreq));
e39a44e3cb41 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));
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    41
+	if (ioctl(fd, SIOCGLIFFLAGS, &lifr) >= 0) {
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    42
+
e39a44e3cb41 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))
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    44
+			return (mac_buf);
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    45
+
e39a44e3cb41 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)
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    47
+			return (NULL);
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    48
+
e39a44e3cb41 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,
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    50
+			&physaddrlen);
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    51
+		if (retv != DLPI_SUCCESS) {
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    52
+			dlpi_close(dh);
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    53
+			return (NULL);
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    54
+		}
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    55
+		
e39a44e3cb41 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);
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    57
+		if (retv != DLPI_SUCCESS) {
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    58
+			dlpi_close(dh);
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    59
+			return (NULL);
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    60
+		}
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    61
+		dlpi_close(dh);
e39a44e3cb41 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);
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    63
+
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    64
+		if (str != NULL && physaddrlen != 0) {
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    65
+			switch(dlinfo.di_mactype) {
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    66
+			case DL_IB:
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    67
+				break;	
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    68
+			default:
e39a44e3cb41 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));
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    70
+				break;
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    71
+			}
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    72
+			free(str);
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    73
+		}
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    74
+	}
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    75
+	return mac_buf;
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    76
+}
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    77
+#endif
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    78
+
e39a44e3cb41 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))
e39a44e3cb41 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)
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    81
 {
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    82
        struct ifaddrs *ifaddr, *ifa;
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    83
@@ -119,6 +185,14 @@
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    84
                         continue;
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    85
 
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    86
                 mac = get_mac(ifa);
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    87
+#if defined(__SVR4) && defined(__sun)
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    88
+		if (mac == NULL) {
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    89
+			rc = 1;
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    90
+			goto leave2;
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    91
+		}
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    92
+		if (mac[0] == '\0')
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    93
+			continue;
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    94
+#endif
e39a44e3cb41 16186483 Port openscap 0.9.7 to solaris
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    95
 		if (family == AF_INET) {
e39a44e3cb41 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),
e39a44e3cb41 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);