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..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,9 +719,9 @@ def get_dependencies_vt_as_xml_str( vt_deps_xml = Element('dependencies') for dep in vt_dependencies: _vt_dep = Element('dependency') - try: + if VT_BASE_OID 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 diff --git a/tests/test_daemon.py b/tests/test_daemon.py index dc3cd880..a29f67b1 100644 --- a/tests/test_daemon.py +++ b/tests/test_daemon.py @@ -461,10 +461,26 @@ 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 + ) + + 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 ) @@ -686,7 +702,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 +727,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 +827,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')