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."""