1 |
commit: 65bad05abe1e03cc14ce2ef1817ef9268a72d18b |
2 |
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org> |
3 |
AuthorDate: Sun Jul 29 16:15:25 2012 +0000 |
4 |
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua> |
5 |
CommitDate: Sun Jul 29 16:15:25 2012 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=65bad05a |
7 |
|
8 |
Parse affected in glsa |
9 |
|
10 |
--- |
11 |
.../libs/package_info/generic_metadata/glsa.py | 53 ++++++++++++++++++++ |
12 |
1 files changed, 53 insertions(+), 0 deletions(-) |
13 |
|
14 |
diff --git a/gpackages/libs/package_info/generic_metadata/glsa.py b/gpackages/libs/package_info/generic_metadata/glsa.py |
15 |
index 570aeb8..be29ce5 100644 |
16 |
--- a/gpackages/libs/package_info/generic_metadata/glsa.py |
17 |
+++ b/gpackages/libs/package_info/generic_metadata/glsa.py |
18 |
@@ -35,6 +35,41 @@ class GLSAs(ToStrMixin): |
19 |
def __unicode__(self): |
20 |
return self.repo_path |
21 |
|
22 |
+class VersionCheck(ToStrMixin): |
23 |
+ ranges = ('le', 'lt', 'eq', 'gt', 'ge', 'rlt', 'rle', 'rgt', 'rge') |
24 |
+ types = {'unaffected' : 0, 'vulnerable' : 1} |
25 |
+ |
26 |
+ def __init__(self, type, range, version): |
27 |
+ if type in self.types: |
28 |
+ self.type_num = self.types[type] |
29 |
+ else: |
30 |
+ raise ValueError |
31 |
+ |
32 |
+ self.range = range |
33 |
+ self.version = version |
34 |
+ |
35 |
+ def __unicode__(self): |
36 |
+ return 'test' |
37 |
+ |
38 |
+class PackageMatch(ToStrMixin): |
39 |
+ |
40 |
+ def __init__(self, name, archs, auto = False, versions = []): |
41 |
+ self.name = name |
42 |
+ self.archs = archs |
43 |
+ self.auto = auto |
44 |
+ for item in versions: |
45 |
+ if not isinstance(item, VersionCheck): |
46 |
+ raise ValueError |
47 |
+ self.versions = versions |
48 |
+ |
49 |
+ def add_version(self, version): |
50 |
+ if not isinstance(version, VersionCheck): |
51 |
+ raise ValueError |
52 |
+ self.versions.append(version) |
53 |
+ |
54 |
+ def __unicode__(self): |
55 |
+ return self.name |
56 |
+ |
57 |
class GLSA(ToStrMixin): |
58 |
|
59 |
simple_attrs = ('synopsis', 'background', 'description', |
60 |
@@ -82,6 +117,24 @@ class GLSA(ToStrMixin): |
61 |
else: |
62 |
self.access = None |
63 |
|
64 |
+ self._set_affected(root) |
65 |
+ |
66 |
+ def _set_affected(self, root): |
67 |
+ affected_xml = root.find('affected') |
68 |
+ packages = [] |
69 |
+ for package_xml in affected_xml.iterfind('package'): |
70 |
+ name = package_xml.attrib.get('name') |
71 |
+ archs = package_xml.attrib.get('arch') |
72 |
+ auto = package_xml.attrib.get('auto') |
73 |
+ package = PackageMatch(name, archs, auto) |
74 |
+ for item in package_xml.iterchildren(): |
75 |
+ v = item.text |
76 |
+ type = item.tag |
77 |
+ range = item.attrib.get('range') |
78 |
+ o = VersionCheck(type, range, v) |
79 |
+ package.add_version(o) |
80 |
+ packages.append(package) |
81 |
+ self.affected = packages |
82 |
|
83 |
def _set_references(self, root): |
84 |
references = [] |