[PATCH 6/7] added support to automatically add reference to OVAL definitions * to document their true origin, ease some debugging

Jeffrey Blank blank at eclipse.ncsc.mil
Tue Sep 4 23:16:35 UTC 2012


Signed-off-by: Jeffrey Blank <blank at eclipse.ncsc.mil>
---
 RHEL6/transforms/idtranslate.py |   14 +++++++++++---
 RHEL6/transforms/relabelids.py  |    2 +-
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/RHEL6/transforms/idtranslate.py b/RHEL6/transforms/idtranslate.py
index cce8071..638011c 100755
--- a/RHEL6/transforms/idtranslate.py
+++ b/RHEL6/transforms/idtranslate.py
@@ -68,10 +68,18 @@ class idtranslator:
         str_id = "%s:%s:%d" % (pre, tagname_to_abbrev(tagname), i)
         return str_id
 
-    def translate(self, tree):
+    def translate(self, tree, store_defname=False, refsource=""):
         for element in tree.getiterator():
-            if element.get("id"):
-                element.set("id", self.assign_id(element.tag, element.get("id")))
+            idname = element.get("id")
+            if idname:
+                # store the old name if requested (for OVAL definitions)
+                if store_defname and element.tag == ovalns + "definition":
+                    metadata = element.find(ovalns + "metadata")
+                    if metadata is None:
+                        metadata = ET.SubElement(element, "metadata")
+                    defnam = ET.SubElement(metadata, "reference", ref_id=idname, source=refsource) 
+                # set the element to the new identifier 
+                element.set("id", self.assign_id(element.tag, idname))
                 continue
             if element.tag == ovalns + "filter":
                 element.text = self.assign_id("state", element.text)
diff --git a/RHEL6/transforms/relabelids.py b/RHEL6/transforms/relabelids.py
index a339616..2ebea6e 100755
--- a/RHEL6/transforms/relabelids.py
+++ b/RHEL6/transforms/relabelids.py
@@ -56,7 +56,7 @@ def main():
     # rename all IDs in the oval file
     ovaltree = parse_xml_file(ovalfile) 
     translator = idtranslate.idtranslator(idname+".ini", "oval:"+idname)
-    ovaltree = translator.translate(ovaltree)
+    ovaltree = translator.translate(ovaltree, store_defname=True, refsource="scap-security-guide")
 
     newovalfile = ovalfile.replace(".xml", "-" + idname + ".xml")
     ET.ElementTree(ovaltree).write(newovalfile)
-- 
1.7.1



More information about the scap-security-guide mailing list