[Open-scap] [PATCH] Use xccdf_result_to_dom

Josh Adams jadams at tresys.com
Wed Jun 2 21:08:11 UTC 2010


It appears that I forgot to actually use the xccdf_result_to_dom
function that I wrote in my export series of patches.  I also added a
few null checks to the xccdf_rule_result_to_dom function.
---
 src/XCCDF/item.c   |    1 +
 src/XCCDF/result.c |   14 ++++++++++----
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/XCCDF/item.c b/src/XCCDF/item.c
index 44a649b..36fbadb 100644
--- a/src/XCCDF/item.c
+++ b/src/XCCDF/item.c
@@ -391,6 +391,7 @@ xmlNode *xccdf_item_to_dom(struct xccdf_item *item, xmlDoc *doc, xmlNode *parent
 			break;
 		case XCCDF_RESULT:
 			xmlNodeSetName(item_node,BAD_CAST "Result");
+			xccdf_rule_to_dom(XPROFILE(item), item_node, doc, parent);
 			break;
 		case XCCDF_GROUP:
 			xmlNodeSetName(item_node,BAD_CAST "Group");
diff --git a/src/XCCDF/result.c b/src/XCCDF/result.c
index 07df543..28b50a2 100644
--- a/src/XCCDF/result.c
+++ b/src/XCCDF/result.c
@@ -583,7 +583,8 @@ xmlNode *xccdf_rule_result_to_dom(struct xccdf_rule_result *result, xmlDoc *doc,
 		xmlNewProp(result_node, BAD_CAST "idref", BAD_CAST idref);
 
 	xccdf_role_t role = xccdf_rule_result_get_role(result);
-	xmlNewProp(result_node, BAD_CAST "role", BAD_CAST XCCDF_ROLE_MAP[role - 1].string);
+	if (role)
+		xmlNewProp(result_node, BAD_CAST "role", BAD_CAST XCCDF_ROLE_MAP[role - 1].string);
 
 	time_t date = xccdf_rule_result_get_time(result);
 	struct tm *lt = localtime(&date);
@@ -593,7 +594,8 @@ xmlNode *xccdf_rule_result_to_dom(struct xccdf_rule_result *result, xmlDoc *doc,
 	xmlNewProp(result_node, BAD_CAST "date", BAD_CAST timestamp);
 
 	xccdf_level_t severity = xccdf_rule_result_get_severity(result);
-	xmlNewProp(result_node, BAD_CAST "severity", BAD_CAST XCCDF_LEVEL_MAP[severity - 1].string);
+	if (severity)
+		xmlNewProp(result_node, BAD_CAST "severity", BAD_CAST XCCDF_LEVEL_MAP[severity - 1].string);
 
 	const char *version = xccdf_rule_result_get_version(result);
 	if (version)
@@ -606,7 +608,8 @@ xmlNode *xccdf_rule_result_to_dom(struct xccdf_rule_result *result, xmlDoc *doc,
 
 	/* Handle children */
 	xccdf_test_result_type_t test_res = xccdf_rule_result_get_result(result);
-	xmlNewChild(result_node, ns_xccdf, BAD_CAST "result", BAD_CAST XCCDF_RESULT_MAP[test_res - 1].string);
+	if (test_res)
+		xmlNewChild(result_node, ns_xccdf, BAD_CAST "result", BAD_CAST XCCDF_RESULT_MAP[test_res - 1].string);
 
 	struct xccdf_override_iterator *overrides = xccdf_rule_result_get_overrides(result);
 	while (xccdf_override_iterator_has_more(overrides)) {
@@ -627,7 +630,10 @@ xmlNode *xccdf_rule_result_to_dom(struct xccdf_rule_result *result, xmlDoc *doc,
 		struct xccdf_message *message = xccdf_message_iterator_next(messages);
 		const char *content = xccdf_message_get_content(message);
 		xmlNode *message_node = xmlNewChild(result_node, ns_xccdf, BAD_CAST "message", BAD_CAST content);
-		xmlNewProp(message_node, BAD_CAST "severity", BAD_CAST XCCDF_LEVEL_MAP[severity - 1].string);
+
+		xccdf_level_t message_severity = xccdf_message_get_severity(result);
+		if (severity)
+			xmlNewProp(message_node, BAD_CAST "severity", BAD_CAST XCCDF_LEVEL_MAP[message_severity - 1].string);
 	}
 	xccdf_message_iterator_free(messages);
 
-- 
1.7.0.1




More information about the Open-scap-list mailing list