[Secure-testing-commits] r3858 - lib/python
Florian Weimer
fw at costa.debian.org
Sun Apr 23 12:46:43 UTC 2006
Author: fw
Date: 2006-04-23 12:46:41 +0000 (Sun, 23 Apr 2006)
New Revision: 3858
Modified:
lib/python/bugs.py
lib/python/security_db.py
Log:
Add support for no-dsa handling to the database. This is still
preliminary.
lib/python/bugs.py (PackageNoteNoDSA):
New class.
(BugBase.__init__):
Losen assert to include PackageNoteNoDSA.
(FileBase.__iter__):
Create PackageNoteNoDSA objects.
lib/python/security_db.py (DB):
Bump schema version to 21. Add package_notes_nodsa table.
Add schema migration code.
(DB.readBugs):
Clear package_notes_nodsa table.
Modified: lib/python/bugs.py
===================================================================
--- lib/python/bugs.py 2006-04-23 12:39:52 UTC (rev 3857)
+++ lib/python/bugs.py 2006-04-23 12:46:41 UTC (rev 3858)
@@ -219,6 +219,27 @@
PackageNote.__init__(self, package, version, release, urgency)
self.bugs = bugs
+class PackageNoteNoDSA:
+ def __init__(self, package, release, comment, reason=None):
+ assert type(package) == types.StringType and package <> ''
+ assert type(release) == types.StringType and release <> ''
+ assert type(comment) == types.StringType
+ if not reason:
+ reason = ''
+ else:
+ assert type(reason) == types.StringType
+ self.package = package
+ self.release = release
+ self.comment = comment
+ self.reason = reason
+
+ def writeDB(self, cursor, bug_name):
+ cursor.execute("""INSERT INTO package_notes_nodsa
+ (bug_name, package, release, comment, reason)
+ VALUES (?, ?, ?, ?, ?)""",
+ (bug_name, self.package, self.release,
+ self.comment, self.reason))
+
class BugBase:
"Base class for entries in the bug list."""
@@ -312,7 +333,9 @@
def __init__(self, fname, lineno, date, name, description, comments, notes,
xref, not_for_us=False):
- assert len(notes) == 0 or isinstance(notes[0], PackageNote)
+ for n in notes:
+ assert isinstance(n, PackageNote) \
+ or isinstance(n, PackageNoteNoDSA)
assert len(xref) == 0 or type(xref[0]) == types.StringType
assert type(not_for_us) == types.BooleanType
BugBase.__init__(self, fname, lineno, date, name,
@@ -622,14 +645,14 @@
r = r[:-1]
comments.append(('NOTE', r))
elif v == 'no-dsa':
- pkg_notes.append(PackageNoteParsed
- (p, None, 'low',
- release=release))
- if d:
- # See above.
- if r[-1] == '\n':
- r = r[:-1]
- comments.append(('NOTE', r))
+ if not release:
+ self.raiseSyntaxError(
+ "no-dsa note needs release specification",
+ lineno)
+ pkg_notes.append(PackageNoteNoDSA(
+ release=release,
+ package=p,
+ comment=d))
elif v == 'itp':
x = PackageNoteParsed(p, None, d, release=release)
x.package_kind = 'itp'
Modified: lib/python/security_db.py
===================================================================
--- lib/python/security_db.py 2006-04-23 12:39:52 UTC (rev 3857)
+++ lib/python/security_db.py 2006-04-23 12:46:41 UTC (rev 3858)
@@ -113,13 +113,15 @@
self.db = apsw.Connection(name)
self.verbose = verbose
- self.schema_version = 20
+ self.schema_version = 21
self._initFunctions()
c = self.cursor()
for (v,) in c.execute("PRAGMA user_version"):
if v == 0:
self.initSchema()
+ elif v == 20:
+ self._initSchema20()
elif v <> self.schema_version:
if self.verbose:
print "DB: schema version mismatch: expected %d, got %d" \
@@ -319,7 +321,39 @@
(name TEXT NOT NULL PRIMARY KEY,
data TEXT NOT NULL)""")
+ self._initNoDSA(cursor)
+ self._initViews(cursor)
+
+ cursor.execute("PRAGMA user_version = %d" % self.schema_version)
+
+ def _initSchema20(self):
+ cursor = self.db.cursor()
+
+ cursor.execute("PRAGMA user_version = 1")
+ self._initNoDSA(cursor)
+ self._initViews(cursor)
+ cursor.execute("DELETE FROM inodeprints WHERE file ='data/CVE/list'")
+ cursor.execute("PRAGMA user_version = %d" % self.schema_version)
+
+ def _initNoDSA(self, cursor):
cursor.execute(
+ """CREATE TABLE package_notes_nodsa
+ (bug_name TEXT NOT NULL,
+ package TEXT NOT NULL,
+ release TEXT NOT NULL,
+ reason TEXT NOT NULL,
+ comment TEXT NOT NULL,
+ PRIMARY KEY (bug_name, package, release))
+ """)
+
+ def _initViews(self, cursor):
+ for view in ('testing_status', 'stable_status', 'oldstable_status'):
+ try:
+ cursor.execute('DROP VIEW ' + view)
+ except apsw.SQLError:
+ pass
+
+ cursor.execute(
"""CREATE VIEW testing_status AS
SELECT DISTINCT sp.name AS package, st.bug_name AS bug,
sp.archive AS section, st.urgency AS urgency,
@@ -351,7 +385,11 @@
SELECT DISTINCT sp.name AS package, st.bug_name AS bug,
sp.archive AS section, st.urgency AS urgency,
(SELECT range_remote FROM nvd_data
- WHERE cve_name = st.bug_name) AS remote
+ WHERE cve_name = st.bug_name) AS remote,
+ (EXISTS (SELECT * FROM package_notes_nodsa AS pnd
+ WHERE pnd.bug_name = st.bug_name
+ AND pnd.package = sp.name
+ AND pnd.release = '%s')) AS no_dsa
FROM source_package_status AS st, source_packages AS sp
WHERE st.vulnerable AND st.urgency <> 'unimportant'
AND sp.rowid = st.package AND sp.release = '%s'
@@ -364,9 +402,9 @@
AND secst.bug_name = st.bug_name
AND secst.package = secp.rowid), 0)
ORDER BY sp.name, urgency_to_number(urgency), st.bug_name"""
- % (name, nickname, nickname))
+ % (name, nickname, nickname, nickname))
- cursor.execute("PRAGMA user_version = %d" % self.schema_version)
+
def _initFunctions(self):
"""Registers user-defined SQLite functions."""
@@ -638,7 +676,7 @@
source, source_version, archs)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)""",
gen())
-
+
def readBugs(self, cursor, path):
if self.verbose:
print "readBugs:"
@@ -655,6 +693,7 @@
cursor.execute("DELETE FROM package_notes")
cursor.execute("DELETE FROM bugs_notes")
cursor.execute("DELETE FROM bugs_xref")
+ cursor.execute("DELETE FROM package_notes_nodsa")
# The *_status tables are regenerated anyway, no need to
# delete them here.
More information about the Secure-testing-commits
mailing list