author | Tomas Klacko <tomas.klacko@oracle.com> |
Tue, 10 Feb 2015 02:00:16 -0800 | |
changeset 3756 | dce353ed563a |
parent 1369 | 20813e08fff3 |
permissions | -rw-r--r-- |
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); |