From 6748de71e0cecbd7fc808fefc2d927d5adafad7c Mon Sep 17 00:00:00 2001 From: Juan Jose Nicola Date: Tue, 15 Sep 2020 14:46:43 +0200 Subject: [PATCH 1/4] Improve logging for unsatisfied vts dependencies --- CHANGELOG.md | 2 ++ ospd_openvas/daemon.py | 4 ++-- ospd_openvas/vthelper.py | 8 ++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a9de4c1..c5a62a7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [20.8.1] (unreleased) +### +- Improve logging for unsatisfied vts dependencies[#336](https://github.com/greenbone/ospd-openvas/pull/336) ### Fixed - Fix nvticache name when for stable version from sources. [#317](https://github.com/greenbone/ospd-openvas/pull/317) diff --git a/ospd_openvas/daemon.py b/ospd_openvas/daemon.py index 72f5fa50..328a01a3 100644 --- a/ospd_openvas/daemon.py +++ b/ospd_openvas/daemon.py @@ -717,9 +717,9 @@ def get_dependencies_vt_as_xml_str( vt_deps_xml = Element('dependencies') for dep in vt_dependencies: _vt_dep = Element('dependency') - try: + if "1.3.6.1.4.1.25623." in dep: _vt_dep.set('vt_id', dep) - except (ValueError, TypeError): + else: logger.error( 'Not possible to add dependency %s for VT %s', dep, vt_id ) diff --git a/ospd_openvas/vthelper.py b/ospd_openvas/vthelper.py index 29c03d3d..b752dd4d 100644 --- a/ospd_openvas/vthelper.py +++ b/ospd_openvas/vthelper.py @@ -46,8 +46,12 @@ def get_single_vt(self, vt_id: str, oids=None) -> Optional[Dict[str, any]]: if 'dependencies' in custom: deps = custom.pop('dependencies') deps_list = deps.split(', ') - for dep in deps_list: - vt_dependencies.append(oids.get(dep)) + for dep_name in deps_list: + dep_oid = oids.get(dep_name) + if dep_oid: + vt_dependencies.append(dep_oid) + else: + vt_dependencies.append(dep_name) else: vt_dependencies = None From e26d2450f3a69f823db73c5ecad3ba2e2d12dc99 Mon Sep 17 00:00:00 2001 From: Juan Jose Nicola Date: Tue, 15 Sep 2020 14:59:20 +0200 Subject: [PATCH 2/4] Fix test --- tests/test_daemon.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/tests/test_daemon.py b/tests/test_daemon.py index dc3cd880..30bbcce3 100644 --- a/tests/test_daemon.py +++ b/tests/test_daemon.py @@ -461,10 +461,11 @@ def test_get_dependencies_xml(self): out = ( '' - '' + '' + '' '' ) - dep = ['1.2.3.4', '4.3.2.1'] + dep = ['1.3.6.1.4.1.25623.1.2.3.4', '1.3.6.1.4.1.25623.4.3.2.1'] res = w.get_dependencies_vt_as_xml_str( '1.3.6.1.4.1.25623.1.0.100061', dep ) @@ -686,7 +687,9 @@ def test_feed_is_outdated_none( @patch('ospd_openvas.daemon.Path.exists') @patch('ospd_openvas.daemon.Path.open') def test_feed_is_outdated_true( - self, mock_path_open: MagicMock, mock_path_exists: MagicMock, + self, + mock_path_open: MagicMock, + mock_path_exists: MagicMock, ): read_data = 'PLUGIN_SET = "1235";' @@ -709,7 +712,9 @@ def test_feed_is_outdated_true( @patch('ospd_openvas.daemon.Path.exists') @patch('ospd_openvas.daemon.Path.open') def test_feed_is_outdated_false( - self, mock_path_open: MagicMock, mock_path_exists: MagicMock, + self, + mock_path_open: MagicMock, + mock_path_exists: MagicMock, ): mock_path_exists.return_value = True @@ -807,7 +812,8 @@ def test_get_openvas_result_dead_hosts(self, MockDBClass): w.report_openvas_results(MockDBClass, '123-456', 'localhost') w.scan_collection.set_amount_dead_hosts.assert_called_with( - '123-456', total_dead=4, + '123-456', + total_dead=4, ) @patch('ospd_openvas.daemon.ScanDB') From 27a99d8f4c490a1a0e39be455be0f5ee7405f0dc Mon Sep 17 00:00:00 2001 From: Juan Jose Nicola Date: Tue, 15 Sep 2020 15:10:20 +0200 Subject: [PATCH 3/4] Add tests --- tests/test_daemon.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/test_daemon.py b/tests/test_daemon.py index 30bbcce3..a29f67b1 100644 --- a/tests/test_daemon.py +++ b/tests/test_daemon.py @@ -472,6 +472,21 @@ def test_get_dependencies_xml(self): self.assertEqual(res, out) + def test_get_dependencies_xml_missing_dep(self): + w = DummyDaemon() + + out = ( + '' + '' + '' + ) + dep = ['1.3.6.1.4.1.25623.1.2.3.4', 'file_name.nasl'] + res = w.get_dependencies_vt_as_xml_str( + '1.3.6.1.4.1.25623.1.0.100061', dep + ) + + self.assertEqual(res, out) + def test_get_dependencies_xml_failed(self): w = DummyDaemon() logging.Logger.error = Mock() From 03ae3d99a818329a55ce35808dc0a9ea87291c22 Mon Sep 17 00:00:00 2001 From: Juan Jose Nicola Date: Wed, 16 Sep 2020 08:46:11 +0200 Subject: [PATCH 4/4] Use constant for the vt base OID --- ospd_openvas/daemon.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ospd_openvas/daemon.py b/ospd_openvas/daemon.py index 328a01a3..02453bfd 100644 --- a/ospd_openvas/daemon.py +++ b/ospd_openvas/daemon.py @@ -359,6 +359,8 @@ }, } +VT_BASE_OID = "1.3.6.1.4.1.25623." + def safe_int(value: str) -> Optional[int]: """Convert a string into an integer and return None in case of errors @@ -717,7 +719,7 @@ def get_dependencies_vt_as_xml_str( vt_deps_xml = Element('dependencies') for dep in vt_dependencies: _vt_dep = Element('dependency') - if "1.3.6.1.4.1.25623." in dep: + if VT_BASE_OID in dep: _vt_dep.set('vt_id', dep) else: logger.error(