components/openscap/patches/zone_file_fix_opt.c.patch
author Rich Burridge <rich.burridge@oracle.com>
Wed, 05 Aug 2015 02:55:12 -0700
changeset 4739 fe9f7b631d54
parent 2016 50e1c2ae28b8
permissions -rw-r--r--
PSARC 2015/216 The R Project for Statistical Computing 15802265 SUNBT7182198 include r programming language in solaris 21265403 "gmake test" failures for R
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2016
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     1
This patch fixes an issue with file probe on solaris. The file probe currently
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     2
 is not zone aware and so descends into non-global zones from the global-zone.
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     3
Fix prevents file probe traversal into non-global zones  from the global zone,
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     4
 when local is specified for recursion.
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     5
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     6
This patch has not been contributed upstream, but is planned to be done by
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     7
 2014-Aug-15.
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     8
--- openscap-1.0.0/src/OVAL/probes/oval_fts.c.~2~	2014-07-24 10:53:15.269589073 -0700
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
     9
+++ openscap-1.0.0/src/OVAL/probes/oval_fts.c	2014-07-24 11:02:30.267608422 -0700
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    10
@@ -45,6 +45,8 @@
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    11
 #if defined(__SVR4) && defined(__sun)
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    12
 #include "fts_sun.h"
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    13
 #include <sys/mntent.h>
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    14
+#include <libzonecfg.h>
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    15
+#include <sys/avl.h>
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    16
 #else
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    17
 #include <fts.h>
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    18
 #endif
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    19
@@ -138,6 +140,13 @@
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    20
 #define MNTTYPE_PROC	"proc"
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    21
 #endif
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    22
 
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    23
+typedef struct zone_path {
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    24
+	avl_node_t avl_link_next;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    25
+	char zpath[MAXPATHLEN];
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    26
+} zone_path_t;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    27
+static avl_tree_t avl_tree_list;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    28
+
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    29
+
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    30
 static bool valid_remote_fs(char *fstype)
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    31
 {
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    32
 	if (strcmp(fstype, MNTTYPE_NFS) == 0 ||
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    33
@@ -160,6 +169,85 @@
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    34
 		return (false);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    35
 	return (true);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    36
 }
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    37
+
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    38
+/* function to compare two avl nodes in the avl tree */
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    39
+static int compare_zoneroot(const void *entry1, const void *entry2)
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    40
+{
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    41
+	zone_path_t *t1, *t2;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    42
+	int comp;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    43
+
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    44
+	t1 = (zone_path_t *)entry1;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    45
+	t2 = (zone_path_t *)entry2;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    46
+	if ((comp = strcmp(t1->zpath, t2->zpath)) == 0) {
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    47
+		return (0);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    48
+	}
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    49
+	return (comp > 0 ? 1 : -1);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    50
+}
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    51
+
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    52
+int load_zones_path_list()
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    53
+{
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    54
+	FILE *cookie;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    55
+	char *name;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    56
+	zone_state_t state_num;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    57
+	zone_path_t *temp = NULL;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    58
+	avl_index_t where;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    59
+	char rpath[MAXPATHLEN];
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    60
+
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    61
+	cookie = setzoneent();
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    62
+	if (getzoneid() != GLOBAL_ZONEID)
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    63
+		return (0);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    64
+	avl_create(&avl_tree_list, compare_zoneroot,
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    65
+	    sizeof(zone_path_t), offsetof(zone_path_t, avl_link_next));
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    66
+	while ((name = getzoneent(cookie)) != NULL) {
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    67
+		if (strcmp(name, "global") == 0)
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    68
+			continue;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    69
+		if (zone_get_state(name, &state_num) != Z_OK) {
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    70
+			dE("Could not get zone state for %s\n", name);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    71
+			continue;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    72
+		} else if (state_num > ZONE_STATE_CONFIGURED) {
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    73
+			temp = malloc(sizeof(zone_path_t));
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    74
+			if (temp == NULL) {
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    75
+				dE("Memory alloc failed\n");
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    76
+				return(1);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    77
+			}
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    78
+			if (zone_get_zonepath(name, rpath,
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    79
+			    sizeof(rpath)) != Z_OK) {
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    80
+				dE("Could not get zone path for %s\n",
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    81
+				    name);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    82
+				continue;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    83
+			}
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    84
+			if (realpath(rpath, temp->zpath) != NULL)
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    85
+				avl_add(&avl_tree_list, temp);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    86
+		}
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    87
+	}
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    88
+	endzoneent(cookie);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    89
+	return (0);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    90
+}
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    91
+
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    92
+static void free_zones_path_list()
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    93
+{
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    94
+	zone_path_t *temp;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    95
+	void* cookie = NULL;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    96
+
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    97
+	while ((temp = avl_destroy_nodes(&avl_tree_list, &cookie)) != NULL) {
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    98
+		free(temp);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
    99
+	}
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   100
+	avl_destroy(&avl_tree_list);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   101
+}
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   102
+
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   103
+static bool valid_local_zone(char *path)
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   104
+{
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   105
+	zone_path_t temp;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   106
+	avl_index_t where;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   107
+	
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   108
+	strlcpy(temp.zpath, path, sizeof(temp.zpath));
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   109
+	if (avl_find(&avl_tree_list, &temp, &where) != NULL)
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   110
+		return (true);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   111
+
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   112
+	return (false);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   113
+}
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   114
+
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   115
+
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   116
 #endif
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   117
 
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   118
 static bool OVAL_FTS_localp(OVAL_FTS *ofts, const char *path, void *id)
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   119
@@ -168,9 +256,11 @@
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   120
 	if (id != NULL && (*(char*)id) != '\0') {
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   121
 		/* if not a valid local fs skip */
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   122
 		if (valid_local_fs((char*)id)) {
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   123
-			/* if recurse is local , skip remote fs */
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   124
+			/* if recurse is local , skip remote fs 
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   125
+			   and non-global zones */
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   126
 			if (ofts->filesystem == OVAL_RECURSE_FS_LOCAL) {
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   127
-				return (!valid_remote_fs((char*)id));
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   128
+				return (!(valid_remote_fs((char*)id) ||
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   129
+				    valid_local_zone(path)));
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   130
 			}
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   131
 			return (true);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   132
 		}
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   133
@@ -179,9 +269,11 @@
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   134
 		/* id was not set, because fts_read failed to stat the node */
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   135
 		struct stat sb;
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   136
 		if ((stat(path, &sb) == 0) && (valid_local_fs(sb.st_fstype))) {
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   137
-			/* if recurse is local , skip remote fs */
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   138
+			/* if recurse is local , skip remote fs
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   139
+			   and non-global zones */
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   140
 			if (ofts->filesystem == OVAL_RECURSE_FS_LOCAL) {
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   141
-				return (!valid_remote_fs(sb.st_fstype));
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   142
+				return (!(valid_remote_fs(sb.st_fstype) ||
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   143
+				    valid_local_zone(path)));
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   144
 			}
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   145
 			return (true);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   146
 		}
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   147
@@ -793,6 +884,12 @@
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   148
 		ofts->ofts_sfilepath = SEXP_ref(filepath);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   149
 	}
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   150
 
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   151
+#if defined(__SVR4) && defined(__sun)
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   152
+	if (load_zones_path_list() != 0) {
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   153
+		dE("Failed to load zones path info. Recursing non-global zones.");
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   154
+		free_zones_path_list();
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   155
+	}
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   156
+#endif
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   157
 	return (ofts);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   158
 }
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   159
 
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   160
@@ -1249,6 +1346,9 @@
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   161
 	fsdev_free(ofts->localdevs);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   162
 
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   163
 	OVAL_FTS_free(ofts);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   164
+#if defined(__SVR4) && defined(__sun)
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   165
+	free_zones_path_list();
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   166
+#endif
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   167
 
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   168
 	return (0);
50e1c2ae28b8 19173594 oscap crashes when compliance is run
Jacob Varughese <jacob.varughese@oracle.com>
parents:
diff changeset
   169
 }