Author: fw
Date: 2006-04-23 13:24:05 +0000 (Sun, 23 Apr 2006)
New Revision: 3859
Modified:
bin/tracker_service.py
Log:
Implement filtering vulnerabilities for which no DSA is scheduled.
bin/tracker_service.py (BugFilter):
Refactor for better extensibility.
(BugFilterNoDSA):
New class.
(TrackerService.page_status_release_stable_oldstable):
Add no-dsa filter.
Modified: bin/tracker_service.py
==================================================================---
bin/tracker_service.py 2006-04-23 12:46:41 UTC (rev 3858)
+++ bin/tracker_service.py 2006-04-23 13:24:05 UTC (rev 3859)
@@ -15,36 +15,53 @@
from web_support import *
class BugFilter:
- def __init__(self, params):
- self.hide_medium_urgency =
int(params.get(''hide_medium_urgency'',
- (0,))[0])
- self.hide_non_remote =
int(params.get(''hide_non_remote'',
- (0,))[0])
+ default_action_list = [("hide_medium_urgency", "lower
urgencies"),
+ ("hide_non_remote", "local
vulnerabilities")]
+ def __init__(self, params, action_list=None):
+ if action_list is None:
+ self.action_list = self.default_action_list
+ else:
+ self.action_list = action_list
+ self.params = {}
+ for (prop, desc) in action_list:
+ self.params[prop] = int(params.get(prop, (0,))[0])
def actions(self, url):
"""Returns a HTML snippet which can be used to change
the filter."""
- if self.hide_medium_urgency:
- urg = A(url.updateParams(hide_medium_urgency=None),
- ''Show lower urgencies'')
- else:
- urg =
A(url.updateParams(hide_medium_urgency=''1''),
- ''Hide lower urgencies'')
- if self.hide_non_remote:
- rem = A(url.updateParams(hide_non_remote=None),
- ''Show local vulnerabilities'')
- else:
- rem = A(url.updateParams(hide_non_remote=''1''),
- ''Hide local vulnerabilities'')
- return P(urg, '' '', rem)
+ l = []
+ for (prop, desc) in self.action_list:
+ if self.params[prop]:
+ a = A(url.updateParamsDict({prop : None}),
+ ''Show '' + desc)
+ else:
+ a = A(url.updateParamsDict({prop : ''1''}),
+ ''Hide '' + desc)
+ l.append(a)
+ l.append('' '')
+
+ return apply(P, l[:-1])
+
def urgencyFiltered(self, urg):
"""Returns True if the urgency urg is
filtered."""
- return self.hide_medium_urgency and urg not in ("high",
"unknown", "")
+ return self.params[''hide_medium_urgency''] \
+ and urg not in ("high", "unknown",
"")
def remoteFiltered(self, remote):
"""Returns True if the attack range is
filtered."""
- return remote is not None and self.hide_non_remote and not remote
+ return remote is not None and
self.params[''hide_non_remote''] \
+ 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])
+
+ def nodsaFiltered(self, nodsa):
+ """Returns True if no DSA will be issued for the
bug."""
+ return nodsa and self.params[''hide_nodsa'']
+
class TrackerService(WebService):
head_contents = compose(STYLE(
"""h1 { font-size : 144%; }
@@ -570,18 +587,20 @@
def page_status_release_stable_oldstable(self, release, params, url):
assert release in (''stable'',
''oldstable'')
- bf = BugFilter(params)
+ bf = BugFilterNoDSA(params)
def gen():
old_pkg_name = ''''
- for (pkg_name, bug_name, archive, urgency, remote) in \
+ for (pkg_name, bug_name, archive, urgency, remote, no_dsa) in \
self.db.cursor().execute(
- """SELECT package, bug, section, urgency, remote
+ """SELECT package, bug, section, urgency,
remote, no_dsa
FROM %s_status""" % release):
if bf.urgencyFiltered(urgency):
continue
if bf.remoteFiltered(remote):
continue
+ if bf.nodsaFiltered(no_dsa):
+ continue
if pkg_name == old_pkg_name:
pkg_name = ''''
@@ -598,9 +617,15 @@
remote = ''no''
if urgency == ''unknown'':
- urgency = ''''
+ if no_dsa:
+ urgency = ''no DSA''
+ else:
+ urgency = ''''
elif urgency == ''high'':
urgency = self.make_red(urgency)
+ else:
+ if no_dsa:
+ urgency = urgency + ''*''
yield pkg_name, self.make_xref(url, bug_name), urgency, remote
@@ -608,7 +633,9 @@
url, ''Vulnerable source packages in the %s suite''
% release,
[bf.actions(url),
make_table(gen(), caption=("Package", "Bug",
"Urgency",
- "Remote"))])
+ "Remote")),
+ P(''''''(If a "*" is included in
the urgency field, no DSA is planned
+for this vulnerability.)'''''')])
def page_status_release_stable(self, path, params, url):
return
self.page_status_release_stable_oldstable(''stable'', params,
url)