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)