Skip to content

Commit cb5770a

Browse files
committed
Cleanup OvalDataSource and UbuntuDataSource, add etags to ubuntu migration script
Signed-off-by: Shivam Sandbhor <shivam.sandbhor@gmail.com>
1 parent 859afed commit cb5770a

4 files changed

Lines changed: 21 additions & 11 deletions

File tree

vulnerabilities/data_source.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -489,4 +489,4 @@ def get_data_from_xml_doc(self, xml_doc: ET.ElementTree, pkg_metadata={}) -> Lis
489489
resolved_package_urls=safe_purls,
490490
cve_id=vuln_id,
491491
reference_urls=urls))
492-
return all_adv
492+
return self.batch_advisories(all_adv)

vulnerabilities/importers/ubuntu.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,12 @@
3131
import xml.etree.ElementTree as ET
3232

3333

34-
from aiohttp import ClientSession, ClientTimeout
34+
from aiohttp import ClientSession
3535
from aiohttp.client_exceptions import ClientResponseError
3636
import requests
37-
from packageurl import PackageURL
3837

3938

40-
from vulnerabilities.data_source import OvalDataSource, DataSourceConfiguration, Advisory
39+
from vulnerabilities.data_source import OvalDataSource, DataSourceConfiguration
4140

4241

4342
@dataclasses.dataclass
@@ -69,9 +68,14 @@ def _fetch(self):
6968
resp = requests.get(file_url)
7069
extracted = bz2.decompress(resp.content)
7170
yield (
72-
{'type': 'deb', 'namespace': 'ubuntu'},
73-
ET.ElementTree(ET.fromstring(extracted.decode('utf-8')))
74-
)
71+
{'type': 'deb', 'namespace': 'ubuntu'},
72+
ET.ElementTree(ET.fromstring(extracted.decode('utf-8')))
73+
)
74+
# In case every file is latest, _fetch won't yield anything(due to checking for new etags),
75+
# this would return None to added_advisories
76+
# which will cause error, hence this
77+
# function return an empty list
78+
return []
7579

7680
def set_api(self, packages):
7781
asyncio.run(self.pkg_manager_api.load_api(packages))

vulnerabilities/migrations/0009_ubuntu_importer.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ def add_ubuntu_importer(apps, _):
3131
license='',
3232
last_run=None,
3333
data_source='UbuntuDataSource',
34-
data_source_cfg={'releases':['bionic','trusty','focal','eoan','xenial']},
34+
data_source_cfg={'releases':['bionic','trusty','focal','eoan','xenial'],
35+
'etags':{}},
3536
)
3637

3738

vulnerabilities/tests/test_ubuntu.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,9 @@ def test_get_data(self):
169169
async def mock(a,b):
170170
pass
171171

172+
def return_adv(_,a):
173+
return a
174+
172175
class TestUbuntuDataSource(unittest.TestCase):
173176

174177
@classmethod
@@ -185,7 +188,7 @@ def setUpClass(cls):
185188
def test_get_data_from_xml_doc(self, mock_write):
186189

187190
data_source_cfg = {
188-
'releases': 'eg-ubuntu'}
191+
'releases': 'eg-ubuntu',"etags":{}}
189192
ubuntu_data_src = UbuntuDataSource(
190193
batch_size=1, config=data_source_cfg)
191194
expected_data = {
@@ -265,6 +268,8 @@ def test_get_data_from_xml_doc(self, mock_write):
265268
cve_id='CVE-2016-8703')}
266269

267270
xml_doc = ET.parse(os.path.join(TEST_DATA, "ubuntu_oval_data.xml"))
268-
data = set(ubuntu_data_src.get_data_from_xml_doc(xml_doc,{"type":"deb"}))
269-
271+
# Dirty quick patch to deal with batch_advisories
272+
with patch('vulnerabilities.importers.ubuntu.UbuntuDataSource.batch_advisories',
273+
new=return_adv):
274+
data = {i for i in ubuntu_data_src.get_data_from_xml_doc(xml_doc,{"type":"deb"})}
270275
assert expected_data == data

0 commit comments

Comments
 (0)