annotate farolluz/parsers/cpe.py @ 41:bb1dd2a55643

CPE: Add a generic 'parse' method
author Benoît Allard <benoit.allard@greenbone.net>
date Mon, 29 Dec 2014 14:58:29 +0100
parents 1d9b2b06067e
children 3826f2701ff2
rev   line source
41
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
1 # -*- coding: utf-8 -*-
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
2 # Description:
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
3 # Methods for parsing CPEs
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
4 #
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
5 # Authors:
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
6 # BenoƮt Allard <benoit.allard@greenbone.net>
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
7 #
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
8 # Copyright:
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
9 # Copyright (C) 2014 Greenbone Networks GmbH
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
10 #
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
11 # This program is free software; you can redistribute it and/or
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
12 # modify it under the terms of the GNU General Public License
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
13 # as published by the Free Software Foundation; either version 2
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
14 # of the License, or (at your option) any later version.
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
15 #
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
16 # This program is distributed in the hope that it will be useful,
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
17 # but WITHOUT ANY WARRANTY; without even the implied warranty of
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
19 # GNU General Public License for more details.
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
20 #
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
21 # You should have received a copy of the GNU General Public License
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
22 # along with this program; if not, write to the Free Software
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
23 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
24
40
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
25 """\
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
26 a cpe class to ease the creation of a producttree based on cpe
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
27
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
28 This is based on:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
29
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
30 NIST Interagency Report 7695
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
31 Common Platform Enumeration: Naming Specification Version 2.3
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
32
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
33 CPE is a trademark of The MITRE Corporation.
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
34
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
35 """
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
36
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
37 import re
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
38
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
39 PCT_MAP ={'!': "%21", '"': "%22", '#': "%23", '$': "%24", '%': "%25", '&': "%26",
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
40 "'": "%27", '(': "%28", ')': "%29", '*': "%2a", '+': "%2b", ',': "%2c",
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
41 '/': "%2f", ':': "%3a", ';': "%3b", '<': "%3c", "=": "%3d", '>': "%3e",
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
42 '?': "%3f", '@': "%40", '[': "%5b", '\\': "%5c","]": "%5d", '^': "%5e",
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
43 '`': "%60", '{': "%7b", '|': "%7c", '}': "%7d", "~": "%7e"}
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
44
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
45 PCT_MAP_i = dict((v, k) for k, v in PCT_MAP.iteritems())
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
46
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
47 def pct_encode(c):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
48 """ Returns the right percent-encoding of c """
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
49 if c in "-.":
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
50 return c
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
51 return PCT_MAP[c]
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
52 return {'!': "%21", '"': "%22", '#': "%23", '$': "%24", '%': "%25", '&': "%26",
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
53 "'": "%27", '(': "%28", ')': "%29", '*': "%2a", '+': "%2b", ',': "%2c",
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
54 "-": c, '.': c, '/': "%2f", ':': "%3a", ';': "%3b", '<': "%3c",
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
55 "=": "%3d", '>': "%3e", '?': "%3f", '@': "%40", '[': "%5b", '\\': "%5c",
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
56 "]": "%5d", '^': "%5e", '`': "%60", '{': "%7b", '|': "%7c", '}': "%7d",
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
57 "~": "%7e"}[c]
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
58
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
59 def decode(s):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
60 if s == '':
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
61 return ANY
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
62 if s == '-':
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
63 return NA
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
64 s = s.lower()
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
65 res = ""
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
66 idx = 0
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
67 embedded = False
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
68 while idx < len(s):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
69 c = s[idx]
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
70 if c in ".-~":
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
71 res += "\\" + c
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
72 embedded = True
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
73 elif c != '%':
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
74 res += c
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
75 embedded = True
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
76 else:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
77 form = s[idx:idx+3]
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
78 if form == "%01":
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
79 if (((idx == 0) or (idx == (len(s) - 3))) or
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
80 ( not embedded and (s[idx-4:idx-1] == "%01")) or
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
81 (embedded and (len(s) > idx + 6) and (s[idx+3:idx+6] == "%01"))):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
82 res += '?'
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
83 else:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
84 raise ValueError
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
85 elif form == "%02":
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
86 if (idx == 0) or (idx == len(s) - 3):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
87 res += '*'
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
88 else:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
89 raise ValueError
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
90 else:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
91 res += '\\' + PCT_MAP_i[form]
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
92 embedded = True
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
93 idx += 2
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
94 idx += 1
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
95 return CPEAttribute(res)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
96
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
97 def unbind_value_fs(s):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
98 if s == '*':
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
99 return ANY
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
100 if s == '-':
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
101 return NA
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
102 res = ""
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
103 idx = 0
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
104 embedded = False
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
105 while idx < len(s):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
106 c = s[idx]
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
107 if re.match("[a-zA-Z0-9_]", c) is not None:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
108 res += c
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
109 embedded = True
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
110 elif c == "\\":
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
111 res += s[idx:idx+2]
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
112 embedded = True
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
113 idx += 1
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
114 elif c == "*":
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
115 if (idx == 0) or (idx == (len(s) - 1)):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
116 res += c
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
117 embedded = True
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
118 else:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
119 raise ValueError
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
120 elif c == "?":
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
121 if (((idx == 0) or (idx == (len(s) - 1))) or
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
122 (not embedded and (s[idx - 1] == "?")) or
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
123 (embedded and (s[idx + 1] == "?"))):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
124 res += c
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
125 embedded = False
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
126 else:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
127 raise ValueError
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
128 else:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
129 res += "\\" + c
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
130 embedded = True
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
131 idx += 1
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
132 return CPEAttribute(res)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
133
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
134 class CPEAttribute(object):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
135 """ We need a special class to deal with ANY / NA / "string" """
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
136
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
137 def __init__(self, value=None, any=False, na=False):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
138 self.any = any
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
139 self.na = na
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
140 self.value = value
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
141
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
142 def bind_for_URI(self):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
143 # print self.any, self.na, self.value
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
144 if self.any:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
145 return ""
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
146 if self.na:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
147 return '-'
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
148 return self.transform_for_uri()
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
149
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
150 def transform_for_uri(self):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
151 res = ""
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
152 idx = 0
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
153 while idx < len(self.value):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
154 c = self.value[idx]
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
155 if re.match("[a-zA-Z0-9_]", c) is not None:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
156 res += c
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
157 elif c == '\\':
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
158 idx += 1
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
159 c = self.value[idx]
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
160 res += pct_encode(c)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
161 elif c == '?':
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
162 res += "%01"
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
163 elif c == '*':
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
164 res += "%02"
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
165 idx += 1
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
166 return res
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
167
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
168 def bind_for_fs(self):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
169 if self.any:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
170 return "*"
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
171 if self.na:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
172 return "-"
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
173 return self.process_quoted_chars()
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
174
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
175 def process_quoted_chars(self):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
176 res = ""
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
177 idx = 0
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
178 while idx < len(self.value):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
179 c = self.value[idx]
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
180 if c != '\\':
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
181 res += c
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
182 else:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
183 idx += 1
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
184 c = self.value[idx]
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
185 if c in ".-_":
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
186 res += c
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
187 else:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
188 res += '\\' + c
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
189 idx += 1
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
190 return res
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
191
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
192 ANY = CPEAttribute(any=True)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
193 NA = CPEAttribute(na=True)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
194
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
195 class CPE(object):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
196
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
197 def __init__(self, part=None, vendor=None, product=None, version=None, update=None, edition=None, language=None, sw_edition=None, target_sw=None, target_hw=None, other=None):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
198 self.part = part or CPEAttribute(any=True)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
199 self.vendor = vendor or CPEAttribute(any=True)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
200 self.product = product or CPEAttribute(any=True)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
201 self.version = version or CPEAttribute(any=True)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
202 self.update = update or CPEAttribute(any=True)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
203 self.edition = edition or CPEAttribute(any=True)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
204 self.language = language or CPEAttribute(any=True)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
205 # Extended attributes:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
206 self.sw_edition = sw_edition or CPEAttribute(any=True)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
207 self.target_sw = target_sw or CPEAttribute(any=True)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
208 self.target_hw = target_hw or CPEAttribute(any=True)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
209 self.other = other or CPEAttribute(any=True)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
210
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
211 def bind_to_URI(self):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
212 uri = 'cpe:/'
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
213 uri += ':'.join(a.bind_for_URI() for a in (self.part, self.vendor, self.product, self.version, self.update))
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
214 # Special handling for edition
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
215 ed = self.edition.bind_for_URI()
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
216 sw_ed = self.sw_edition.bind_for_URI()
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
217 t_sw = self.target_sw.bind_for_URI()
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
218 t_hw = self.target_hw.bind_for_URI()
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
219 oth = self.other.bind_for_URI()
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
220 if sw_ed == "" and t_sw == "" and t_hw == "" and oth == "":
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
221 uri += ":" + ed
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
222 else:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
223 uri += ":~" + '~'.join([ed, sw_ed, t_sw, t_hw, oth])
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
224 uri += ':' + self.language.bind_for_URI()
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
225 return uri.rstrip(':')
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
226
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
227 def unbind_URI(self, uri):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
228 for idx, comp in enumerate(uri.split(':')):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
229 if idx == 0:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
230 continue
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
231 elif idx == 1:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
232 self.part = decode(comp[1:])
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
233 elif idx == 2:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
234 self.vendor = decode(comp)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
235 elif idx == 3:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
236 self.product = decode(comp)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
237 elif idx == 4:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
238 self.version = decode(comp)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
239 elif idx == 5:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
240 self.update = decode(comp)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
241 elif idx == 6:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
242 if comp == "" or comp[0] != '~':
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
243 self.edition = decode(comp)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
244 else:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
245 ed, sw_ed, t_sw, t_hw, oth = comp[1:].split('~')
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
246 self.edition = decode(ed)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
247 self.sw_edition = decode(sw_ed)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
248 self.target_sw = decode(t_sw)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
249 self.target_hw = decode(t_hw)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
250 self.other = decode(oth)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
251 elif idx == 7:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
252 self.language = decode(comp)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
253
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
254 def bind_to_fs(self):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
255 fs = 'cpe:2.3:'
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
256 fs += ':'.join(a.bind_for_fs() for a in (self.part, self.vendor, self.product, self.version, self.update, self.edition, self.language, self.sw_edition, self.target_sw, self.target_hw, self.other))
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
257 return fs
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
258
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
259 def unbind_fs(self, fs):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
260 for idx, v in enumerate(fs.split(':')):
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
261 v = unbind_value_fs(v)
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
262 if idx == 2:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
263 self.part = v
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
264 elif idx == 3:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
265 self.vendor = v
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
266 elif idx == 4:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
267 self.product = v
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
268 elif idx == 5:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
269 self.version = v
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
270 elif idx == 6:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
271 self.update = v
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
272 elif idx == 7:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
273 self.edition = v
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
274 elif idx == 8:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
275 self.language = v
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
276 elif idx == 9:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
277 self.sw_edition = v
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
278 elif idx == 10:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
279 self.target_sw = v
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
280 elif idx == 11:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
281 self.target_hw = v
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
282 elif idx == 12:
1d9b2b06067e Add a CPE parser (and tests)
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff changeset
283 self.other = v
41
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
284
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
285 def parse(s):
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
286 cpe = CPE()
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
287 if s[:5] == 'cpe:/':
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
288 cpe.unbind_URI(s)
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
289 elif s[:8] == 'cpe:2.3:':
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
290 cpe.unbind_fs(s)
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
291 else:
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
292 raise ValueError(s)
bb1dd2a55643 CPE: Add a generic 'parse' method
Benoît Allard <benoit.allard@greenbone.net>
parents: 40
diff changeset
293 return cpe
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)