diff --git a/shared/templates/yamlfile_value/oval.template b/shared/templates/yamlfile_value/oval.template index 21d63762ba27..8bebeec7dc80 100644 --- a/shared/templates/yamlfile_value/oval.template +++ b/shared/templates/yamlfile_value/oval.template @@ -32,7 +32,7 @@ {{% else %}} - + @@ -45,13 +45,11 @@ - {{% for val in VALUES %}} - - - + + + - {{% endfor %}} {{% endif %}} diff --git a/shared/templates/yamlfile_value/template.py b/shared/templates/yamlfile_value/template.py index 60168da305b3..15c99b3cec98 100644 --- a/shared/templates/yamlfile_value/template.py +++ b/shared/templates/yamlfile_value/template.py @@ -1,12 +1,25 @@ def preprocess(data, lang): if data.get("xccdf_variable") and data.get("embedded_data") == "true": - if not data.get("values"): + values = data.get("values", [{}]) + if len(values) > 1: + raise ValueError( + "Only a single value can be checked when querying " + "for a 'xccdf_value' that returns an embedded value. " + "Rule ID: {}".format(data["_rule_id"])) + elif not values[0].get("value"): raise ValueError( "You should specify a capture regex in the 'value' field " "when querying for a 'xccdf_value' that returns an embedded value. " "Rule ID: {}".format(data["_rule_id"])) + if data.get("xccdf_variable") and data.get("embedded_data") != "true": + if data.get("values"): + raise ValueError( + "You cannot specify the 'value' field when querying " + "for a 'xccdf_value' that doesn't return an embedded value. " + "Rule ID: {}".format(data["_rule_id"])) + data["embedded_data"] = data.get("embedded_data", "false") == "true" data["ocp_data"] = data.get("ocp_data", "false") == "true" return data