[Secure-testing-commits] r14652 - in lib/python: sectracker sectracker_test
Florian Weimer
fw at alioth.debian.org
Sun May 9 11:39:29 UTC 2010
Author: fw
Date: 2010-05-09 11:39:28 +0000 (Sun, 09 May 2010)
New Revision: 14652
Modified:
lib/python/sectracker/analyzers.py
lib/python/sectracker_test/test_analyzers.py
Log:
sectracker.analyzers.copysources(): helper for DSA/DTSA -> CVE propagation
Modified: lib/python/sectracker/analyzers.py
===================================================================
--- lib/python/sectracker/analyzers.py 2010-05-09 11:37:48 UTC (rev 14651)
+++ lib/python/sectracker/analyzers.py 2010-05-09 11:39:28 UTC (rev 14652)
@@ -16,6 +16,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
import apt_pkg as _apt_pkg
+import re as _re
# vercmp is the Debian version comparison algorithm
_apt_pkg.init()
@@ -67,3 +68,33 @@
else:
pv[ann.package] = set((ann.version,))
return rpv
+
+def copysources(bugdb, diag):
+ """Returns a dictionary, mapping bug names to their copy sources.
+
+ As a side effect, this checks cross-references. Errors found
+ there are recorded in diag."""
+
+ re_source = _re.compile("^DT?SA-")
+
+ result = {}
+ for bug in bugdb.values():
+ copy_source = bug.header.name
+ if not re_source.match(copy_source):
+ copy_source = None
+ for ann in bug.annotations:
+ if ann.type <> "xref":
+ continue
+ for target in ann.bugs:
+ if target not in bugdb:
+ diag.error("reference to unknown bug %r" % target,
+ file=bug.file, line=ann.line)
+ continue
+ if copy_source is not None:
+ if target in result:
+ result[target].add(copy_source)
+ else:
+ result[target] = set((copy_source,))
+ return result
+
+
Modified: lib/python/sectracker_test/test_analyzers.py
===================================================================
--- lib/python/sectracker_test/test_analyzers.py 2010-05-09 11:37:48 UTC (rev 14651)
+++ lib/python/sectracker_test/test_analyzers.py 2010-05-09 11:39:28 UTC (rev 14652)
@@ -27,6 +27,8 @@
bugdb = mergelists((p.cvelist("../../data/CVE/list"),
p.dsalist("../../data/DSA/list"),
p.dtsalist("../../data/DTSA/list")), diag)
+assert "CVE-1999-0001" in bugdb
+assert "DSA-135" in bugdb
assert "CVE-2006-0225" in bugdb
assert bugdb["CVE-2006-0225"].annotations[0].package == "openssh"
@@ -42,7 +44,11 @@
if len(v) > 1:
print r, p, v
+# copysources
+copysrc = copysources(bugdb, diag)
+assert "CVE-2008-0225" in copysrc
+assert "DSA-1472-1" in copysrc["CVE-2008-0225"]
+
for err in diag.messages():
print "%s:%d: %s: %s" % (err.file, err.line, err.level, err.message)
assert not diag.messages()
-
More information about the Secure-testing-commits
mailing list