[Secure-testing-commits] r2035 - lib/python

Florian Weimer fw at costa.debian.org
Sat Sep 17 22:41:49 UTC 2005


Author: fw
Date: 2005-09-17 22:41:49 +0000 (Sat, 17 Sep 2005)
New Revision: 2035

Modified:
   lib/python/security_db.py
Log:
data/python/security_db.py (DB.getSourcePackageVersions,
DB.getBinaryPackageVersions, DB.getBinaryPackagesForSource,
DB.getBugsFromDebianBug, DB.isSourcePackage, DB.isBinaryPackage,
DB.getBugsForSourcePackage, DB.getBugsForBinaryPackage, DB.getTODOs):
  New methods.




Modified: lib/python/security_db.py
===================================================================
--- lib/python/security_db.py	2005-09-17 22:38:40 UTC (rev 2034)
+++ lib/python/security_db.py	2005-09-17 22:41:49 UTC (rev 2035)
@@ -1165,6 +1165,50 @@
             record('fixed', 'packages are not vulnerable')
 
         return result
+
+    def getSourcePackageVersions(self, cursor, pkg):
+        """A generator which returns tuples (RELEASE-LIST, VERSION),
+        the available versions of the source package pkg."""
+
+        for (releases, version) in cursor.execute(
+            """SELECT string_list(release) AS releases, version
+            FROM (SELECT release, version FROM source_packages
+            WHERE name = ?
+            ORDER BY release_to_number(release))
+            GROUP BY version""", (pkg,)):
+            yield releases.split(', '), version
+
+    def getBinaryPackageVersions(self, cursor, pkg):
+        """A generator which returns tuples (RELEASE-LIST, VERSION),
+        the available versions of the source package pkg."""
+
+        for (releases, version, archs) in cursor.execute(
+            """SELECT string_list(release) AS releases, version, archs
+            FROM (SELECT release, version, string_set(archs) AS archs
+            FROM binary_packages
+            WHERE name = ?
+            GROUP BY release, version
+            ORDER BY release_to_number(release))
+            GROUP BY version, archs""", (pkg,)):
+            yield releases.split(', '), version, archs.split(',')
+
+    def getBinaryPackagesForSource(self, cursor, pkg):
+        """A generator which returns tuples (PACKAGES, RELEASE-LIST,
+        VERSION), the available binary packages built from the source
+        package pkg."""
+
+        for (packages, releases, version) in cursor.execute(
+            """SELECT string_list(package) AS packages, releases, version
+            FROM (SELECT package, string_list(rel) AS releases, version
+            FROM (SELECT name AS package,
+            release_name(release, subrelease, archive) AS rel, version
+            FROM binary_packages
+            WHERE source = ?
+            ORDER BY release_to_number(release))
+            GROUP BY package, version
+            ORDER BY package)
+            GROUP BY releases, version""", (pkg,)):
+            yield packages.split(', '), releases.split(', '), version
             
     def getSourcePackages(self, cursor, bug):
         """A generator which returns tuples (SOURCE-PACKAGE,
@@ -1213,6 +1257,69 @@
             yield (packages.split(', '), releases.split(','), version,
                    archs.split(','), vulnerable)
 
+    def getBugsFromDebianBug(self, cursor, number):
+        """A generator which returns a list of tuples
+        (BUG-NAME, URGENCY, DESCRIPTION)."""
+
+        return cursor.execute(
+            """SELECT DISTINCT bugs.name, package_notes.urgency,
+            bugs.description
+            FROM debian_bugs, package_notes, bugs
+            WHERE debian_bugs.bug = ? AND package_notes.id = debian_bugs.note
+            AND bugs.name = package_notes.bug_name
+            ORDER BY bug_name""", (number,))
+
+    def isSourcePackage(self, cursor, pkg):
+        """Returns a true value if pkg is a source package."""
+        ((flag,),) = cursor.execute(
+            "SELECT EXISTS (SELECT * FROM source_packages WHERE name = ?)",
+            (pkg,))
+        return flag
+            
+    def isBinaryPackage(self, cursor, pkg):
+        """Returns a true value if pkg is a binary package."""
+        ((flag,),) = cursor.execute(
+            "SELECT EXISTS (SELECT * FROM binary_packages WHERE name = ?)",
+            (pkg,))
+
+    def getBugsForSourcePackage(self, cursor, pkg, vulnerable):
+        """Returns a generator for a list of (BUG, DESCRIPTION) pairs
+        which have the requested status."""
+        return cursor.execute(
+            """SELECT name, description
+            FROM (SELECT bugs.name AS name, bugs.description AS description,
+            MAX(st.vulnerable) AS vulnerable
+            FROM source_packages AS sp, source_package_status AS st,
+            package_notes AS n, bugs
+            WHERE sp.name = ? AND st.package = sp.rowid AND n.id = st.note
+            AND bugs.name = n.bug_name
+            GROUP BY bugs.name, bugs.description)
+            WHERE vulnerable = ?""", (pkg, vulnerable))
+
+    def getBugsForBinaryPackage(self, cursor, pkg, vulnerable):
+        """Returns a generator for a list of (BUG, DESCRIPTION) pairs
+        which have the requested status."""
+        return cursor.execute(
+            """SELECT name, description
+            FROM (SELECT bugs.name AS name, bugs.description AS description,
+            MAX(st.vulnerable) AS vulnerable
+            FROM binary_packages AS bp, binary_package_status AS st,
+            package_notes AS n, bugs
+            WHERE bp.name = ? AND st.package = bp.rowid AND n.id = st.note
+            AND bugs.name = n.bug_name
+            GROUP BY bugs.name, bugs.description)
+            WHERE vulnerable = ?""", (pkg, vulnerable))
+
+    def getTODOs(self, cursor=None):
+        """Returns a list of pairs (BUG-NAME, DESCRIPTION)."""
+        if cursor is None:
+            cursor = self.cursor()
+        return cursor.execute(
+            """SELECT DISTINCT bugs.name, bugs.description
+            FROM bugs_notes, bugs
+            WHERE bugs_notes.typ = 'TODO' AND bugs.name = bugs_notes.bug_name
+            ORDER BY name """)
+
     def check(self, cursor=None):
         """Runs a simple consistency check and prints the results."""
 




More information about the Secure-testing-commits mailing list