Author: gilbert-guest
Date: 2010-02-07 22:10:48 +0000 (Sun, 07 Feb 2010)
New Revision: 14057
Modified:
bin/tracker_service.py
lib/python/bugs.py
lib/python/security_db.py
Log:
per-release page refactoring
Modified: bin/tracker_service.py
==================================================================---
bin/tracker_service.py 2010-02-07 21:34:34 UTC (rev 14056)
+++ bin/tracker_service.py 2010-02-07 22:10:48 UTC (rev 14057)
@@ -24,8 +24,10 @@
webservice_base_class = WebServiceHTTP
class BugFilter:
- default_action_list = [("hide_medium_urgency", "lower
urgencies"),
- ("hide_non_remote", "local
vulnerabilities")]
+ default_action_list = [("show_high_urgency", "only high
urgencies"),
+ ("show_medium_urgency", "only medium
and high urgencies"),
+ ("show_remote_only", "only remote
vulnerabilities"),
+ ("show_undetermined_urgency",
"undetermined and unimportant urgencies")]
def __init__(self, params, action_list=None):
if action_list is None:
self.action_list = self.default_action_list
@@ -41,35 +43,42 @@
l = []
for (prop, desc) in self.action_list:
if self.params[prop]:
- a = A(url.updateParamsDict({prop : None}),
- ''Show '' + desc)
+ if self.params[''show_medium_urgency''] and
prop == ''show_medium_urgency'':
+ note = ''Restore lower than medium
urgencies''
+ elif self.params[''show_high_urgency''] and
prop == ''show_high_urgency'':
+ note = ''Restore lower than high
urgencies''
+ else:
+ note = ''Hide '' + desc
+ l.append(TR(TD(A(url.updateParamsDict({prop : None}), note))))
else:
- a = A(url.updateParamsDict({prop : ''1''}),
- ''Hide '' + desc)
- l.append(a)
- l.append('' '')
+ note = ''Show '' + desc
+ l.append(TR(TD(A(url.updateParamsDict({prop :
''1''}), note))))
- return apply(P, l[:-1])
+ return TABLE(l)
- def urgencyFiltered(self, urg):
- """Returns True if the urgency urg is
filtered."""
- return self.params[''hide_medium_urgency''] \
- and urg not in ("high", "unknown",
"")
+ def urgencyFiltered(self, urg, vuln):
+ """Returns True for urgencies that should be
filtered."""
+ filterlow = self.params[''show_medium_urgency''] and \
+ urg in (''low'',
''unimportant'', ''undetermined'')
+ filtermed = self.params[''show_high_urgency''] and \
+ urg in (''medium'',
''low'', ''unimportant'',
''undetermined'')
+ filteruni = not
self.params[''show_undetermined_urgency''] \
+ and vuln == 2 or urg == ''unimportant''
+ return filterlow or filtermed or filteruni
def remoteFiltered(self, remote):
- """Returns True if the attack range is
filtered."""
- return remote is not None and
self.params[''hide_non_remote''] \
+ """Returns True for only remote flaws if
filtered."""
+ return remote is not None and not
self.params[''show_remote_only''] \
and not remote
class BugFilterNoDSA(BugFilter):
def __init__(self, params):
BugFilter.__init__(self, params, self.default_action_list
- + [(''hide_nodsa'', ''non-DSA
vulnerabilities'')])
- self.hide_nodsa =
int(params.get(''hide_nodsa'',(0,))[0])
+ + [(''show_nodsa'', ''non-DSA
vulnerabilities'')])
def nodsaFiltered(self, nodsa):
- """Returns True if no DSA will be issued for the
bug."""
- return nodsa and self.params[''hide_nodsa'']
+ """Returns True for no DSA issues if
filtered."""
+ return nodsa and not self.params[''show_nodsa'']
class TrackerService(webservice_base_class):
head_contents = compose(STYLE(
@@ -624,17 +633,17 @@
def gen():
old_pkg_name = ''''
- for (pkg_name, bug_name, archive, urgency, remote, no_dsa) in \
+ for (pkg_name, bug_name, archive, urgency, vulnerable, remote,
no_dsa) in \
self.db.cursor().execute(
- """SELECT package, bug, section, urgency,
remote, no_dsa
+ """SELECT package, bug, section, urgency,
vulnerable, remote, no_dsa
FROM %s_status""" % release):
- if bf.urgencyFiltered(urgency):
+ if bf.urgencyFiltered(urgency, vulnerable):
continue
if bf.remoteFiltered(remote):
continue
if bf.nodsaFiltered(no_dsa):
continue
-
+
if pkg_name == old_pkg_name:
pkg_name = ''''
else:
@@ -649,15 +658,11 @@
else:
remote = ''no''
- if urgency == ''unknown'':
- if no_dsa:
- urgency = ''no DSA''
- else:
- urgency = ''''
- elif urgency == ''high'':
+ if vulnerable == 2:
+ urgency = self.make_purple(urgency)
+
+ if urgency == ''high'':
urgency = self.make_red(urgency)
- elif urgency == ''undetermined'':
- urgency = self.make_purple(urgency)
else:
if no_dsa:
urgency = urgency + ''*''
@@ -666,7 +671,7 @@
return self.create_page(
url, ''Vulnerable source packages in the %s suite''
% release,
- [bf.actions(url),
+ [bf.actions(url), BR(),
make_table(gen(), caption=("Package", "Bug",
"Urgency",
"Remote")),
P(''''''(If a "*" is included in
the urgency field, no DSA is planned
@@ -683,13 +688,13 @@
def gen():
old_pkg_name = ''''
- for (pkg_name, bug_name, archive, urgency,
+ for (pkg_name, bug_name, archive, urgency, vulnerable,
sid_vulnerable, ts_fixed, remote, no_dsa) \
in self.db.cursor().execute(
- """SELECT package, bug, section, urgency,
unstable_vulnerable,
- testing_security_fixed, remote, no_dsa
+ """SELECT package, bug, section, urgency,
vulnerable,
+ unstable_vulnerable, testing_security_fixed, remote, no_dsa
FROM testing_status"""):
- if bf.urgencyFiltered(urgency):
+ if bf.urgencyFiltered(urgency, vulnerable):
continue
if bf.remoteFiltered(remote):
continue
@@ -710,6 +715,9 @@
else:
remote = ''no''
+ if sid_vulnerable == 2:
+ urgency = self.make_purple(urgency)
+
if ts_fixed:
status = ''fixed in testing-security''
else:
@@ -718,9 +726,6 @@
else:
status = self.make_dangerous(''fixed in
unstable'')
- if urgency == ''unknown'':
- urgency = ''''
-
yield (pkg_name, self.make_xref(url, bug_name),
urgency, remote, status)
@@ -728,7 +733,7 @@
url, ''Vulnerable source packages in the testing
suite'',
[make_menu(url.scriptRelative,
("status/dtsa-candidates", "Candidates
for DTSAs")),
- bf.actions(url),
+ bf.actions(url), BR(),
make_table(gen(), caption=("Package", "Bug",
"Urgency",
"Remote"))])
@@ -738,18 +743,17 @@
def gen():
old_pkg_name = ''''
- for (pkg_name, bug_name, section, urgency, remote) \
+ for (pkg_name, bug_name, section, urgency, vulnerable, remote) \
in self.db.cursor().execute(
"""SELECT DISTINCT sp.name, st.bug_name,
- sp.archive, st.urgency,
+ sp.archive, st.urgency, st.vulnerable,
(SELECT range_remote FROM nvd_data
WHERE cve_name = st.bug_name)
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 = ?
- AND sp.subrelease = ''''
+ WHERE st.vulnerable AND sp.rowid = st.package
+ AND sp.release = ? AND sp.subrelease = ''''
ORDER BY sp.name, st.bug_name""", (rel,)):
- if bf.urgencyFiltered(urgency):
+ if bf.urgencyFiltered(urgency, vulnerable):
continue
if bf.remoteFiltered(remote):
continue
@@ -770,14 +774,13 @@
else:
remote = ''no''
- if urgency == ''unknown'':
- urgency = ''''
- elif urgency == ''high'':
+ if urgency == ''high'':
urgency = self.make_red(urgency)
- elif urgency == ''undetermined'':
+ elif vulnerable == 2:
urgency = self.make_purple(urgency)
yield pkg_name, self.make_xref(url, bug_name), urgency, remote
+
return self.create_page(
url, title,
[P("""Note that the list below is based on source
packages.
@@ -785,7 +788,7 @@
fixed source version has been uploaded to the archive, even
if there are still some vulnerably binary packages present
in the archive."""),
- bf.actions(url),
+ bf.actions(url), BR(),
make_table(gen(), caption=(''Package'',
''Bug'', ''Urgency'',
''Remote''))])
@@ -812,10 +815,10 @@
def gen():
old_pkg_name = ''''
- for (pkg_name, bug_name, archive, urgency, stable_later,
- remote) \
+ for (pkg_name, bug_name, archive, urgency, vulnerable,
+ stable_later, remote) \
in self.db.cursor().execute(
- """SELECT package, bug, section, urgency,
+ """SELECT package, bug, section, urgency,
vulnerable,
(SELECT testing.version_id < stable.version_id
FROM source_packages AS testing, source_packages AS stable
WHERE testing.name = testing_status.package
@@ -831,7 +834,7 @@
FROM testing_status
WHERE (NOT unstable_vulnerable)
AND (NOT testing_security_fixed)"""):
- if bf.urgencyFiltered(urgency):
+ if bf.urgencyFiltered(urgency, vulnerable):
continue
if bf.remoteFiltered(remote):
continue
@@ -855,9 +858,7 @@
else:
remote = ''no''
- if urgency == ''unknown'':
- urgency = ''''
- elif urgency == ''high'':
+ if urgency == ''high'':
urgency = self.make_red(urgency)
if stable_later:
@@ -876,7 +877,7 @@
make_menu(url.scriptRelative,
("status/release/testing",
"List of vulnerable packages in testing")),
- bf.actions(url),
+ bf.actions(url), BR(),
make_table(gen(),
caption=("Package", "Migration",
"Bug", "Urgency",
"Remote"))])
Modified: lib/python/bugs.py
==================================================================---
lib/python/bugs.py 2010-02-07 21:34:34 UTC (rev 14056)
+++ lib/python/bugs.py 2010-02-07 22:10:48 UTC (rev 14057)
@@ -23,7 +23,7 @@
def listUrgencies():
urgencies = {}
- urgs = ("high", "medium", "low",
"unimportant", "unknown", "undetermined")
+ urgs = ("high", "medium", "low",
"unimportant", "undetermined")
for u in range(len(urgs)):
urgencies[urgs[u]] = Urgency(urgs[u], -u)
Urgency.urgencies = urgencies
@@ -140,7 +140,10 @@
def __init__(self, package, version, notes, release=None):
bugs = []
- urgency = "unknown"
+ if version == ''undetermined'':
+ urgency = ''undetermined''
+ else:
+ urgency = ''low''
if notes is not None:
for n in self.re_notes_split.split(notes):
u = internUrgency(n)
@@ -611,11 +614,8 @@
(p, None, d, release=release))
self.removed_packages[p] = True
elif v == ''undetermined'':
- if not d:
- d = ''undetermined''
pkg_notes.append(PackageNoteParsed
- (p,
''undetermined'', ''undetermined'',
- release=release))
+ (p,
''undetermined'', d, release=release))
else:
self.raiseSyntaxError(
"invalid special version %s in package
entry"
Modified: lib/python/security_db.py
==================================================================---
lib/python/security_db.py 2010-02-07 21:34:34 UTC (rev 14056)
+++ lib/python/security_db.py 2010-02-07 22:10:48 UTC (rev 14057)
@@ -362,6 +362,7 @@
"""CREATE VIEW testing_status AS
SELECT DISTINCT sp.name AS package, st.bug_name AS bug,
sp.archive AS section, st.urgency AS urgency,
+ st.vulnerable AS vulnerable,
(SELECT vulnerable
FROM source_packages AS sidp, source_package_status AS sidst
WHERE sidp.name = sp.name
@@ -383,9 +384,8 @@
AND pnd.package = sp.name
AND pnd.release = ''squeeze'')) 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 =
''squeeze''
- AND sp.subrelease = ''''
+ WHERE st.vulnerable > 0 AND sp.rowid = st.package
+ AND sp.release = ''squeeze'' AND sp.subrelease =
''''
ORDER BY sp.name, st.urgency, st.bug_name""")
for (name, nickname) in ((''stable'',
''lenny''), (''oldstable'',
''etch''),):
@@ -393,6 +393,7 @@
"""CREATE VIEW %s_status AS
SELECT DISTINCT sp.name AS package, st.bug_name AS bug,
sp.archive AS section, st.urgency AS urgency,
+ st.vulnerable AS vulnerable,
(SELECT range_remote FROM nvd_data
WHERE cve_name = st.bug_name) AS remote,
(EXISTS (SELECT * FROM package_notes_nodsa AS pnd
@@ -400,9 +401,8 @@
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''
- AND sp.subrelease = ''''
+ WHERE st.vulnerable > 0 AND sp.rowid = st.package
+ AND sp.release = ''%s'' AND sp.subrelease =
''''
AND NOT COALESCE((SELECT NOT vulnerable
FROM source_packages AS secp, source_package_status AS secst
WHERE secp.name = sp.name
@@ -413,8 +413,6 @@
ORDER BY sp.name, urgency_to_number(urgency),
st.bug_name"""
% (name, nickname, nickname, nickname))
-
-
def _initFunctions(self):
"""Registers user-defined SQLite
functions."""