troubadix 25.3.4__tar.gz → 25.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {troubadix-25.3.4 → troubadix-25.4.0}/PKG-INFO +1 -1
- {troubadix-25.3.4 → troubadix-25.4.0}/pyproject.toml +1 -1
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_grammar.py +52 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/test_dependency_graph.py +36 -28
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/__version__.py +1 -1
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/codespell/codespell.additions +2 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/codespell/codespell.exclude +2 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/grammar.py +5 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/dependency_graph/checks.py +20 -23
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/dependency_graph/cli.py +7 -14
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/dependency_graph/dependency_graph.py +13 -37
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/dependency_graph/models.py +15 -9
- {troubadix-25.3.4 → troubadix-25.4.0}/LICENSE +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/README.md +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/__init__.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/helper/__init__.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/helper/test_linguistic_exception_handler.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/helper/test_patterns.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/__init__.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/fail.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/fail2.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_badwords.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_copyright_text.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_copyright_year.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_creation_date.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_cve_format.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_cvss_format.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_dependencies.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_dependency_category_order.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_deprecated_dependency.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_deprecated_functions.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_double_end_points.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_duplicate_oid.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_duplicated_script_tags.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_encoding.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/fail_bad_new_line.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/fail_badwords.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/fail_name_and_copyright_newline.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/fail_name_newline.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/fail_permissions.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/fail_spelling.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/nasl/21.04/fail.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/nasl/21.04/fail_badwords.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/nasl/21.04/fail_name_and_copyright_newline.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/nasl/21.04/fail_name_newline.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/nasl/21.04/fail_solution_template.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/nasl/21.04/runner/fail.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/nasl/21.04/runner/fail2.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/nasl/21.04/runner/test.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/nasl/21.04/runner/test_valid_oid.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/nasl/21.04/test.inc +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/nasl/21.04/test.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/nasl/warning.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/ok_permissions.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/test_oid.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_forking_nasl_functions.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_get_kb_on_services.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_http_links_in_tags.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_illegal_characters.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_log_messages.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_malformed_dependencies.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_misplaced_compare_in_if.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_missing_desc_exit.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_missing_tag_solution.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_multiple_re_parameters.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_newlines.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_overlong_description_lines.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_overlong_script_tags.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_prod_svc_detect_in_vulnvt.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_qod.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_reporting_consistency.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_script_add_preference_type.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_script_calls_empty_values.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_script_calls_recommended.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_script_category.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_script_copyright.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_script_family.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_script_tag_form.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_script_tag_whitespaces.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_script_tags_mandatory.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_script_version_and_last_modification_tags.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_script_xref_form.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_script_xref_url.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_security_messages.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_set_get_kb_calls.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_solution_text.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_solution_type.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_spaces_before_dots.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_spaces_in_filename.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_spelling.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_tabs.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_todo_tbd.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_trailing_spaces_tabs.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_using_display.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_valid_oid.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_valid_script_tag_names.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_variable_redefinition_in_foreach.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_vt_file_permissions.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_vt_placement.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/__init__.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/changed_packages/__init__.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/changed_packages/markers/__init__.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/changed_packages/markers/test_added_epoch.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/changed_packages/markers/test_added_release.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/changed_packages/markers/test_added_udeb.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/changed_packages/markers/test_changed_update.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/changed_packages/markers/test_dropped_architecture.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/changed_packages/test_changed_packages.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/changed_packages/test_package.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/nasl/21.04/21_script.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/nasl/22.04/22_script.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/nasl/common/bar.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/nasl/common/foo.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/nasl/common/foobar.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/nasl/common/gsf/enterprise_script.nasl +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/test_changed_cves.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/test_changed_oid.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/test_deprecate_vts.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/test_file_extensions.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/test_last_modification.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/test_no_solution.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/standalone_plugins/test_version_updated.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/test_argparser.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/test_helper.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/test_naslinter.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/test_reporter.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/test_results.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/tests/test_runner.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/__init__.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/argparser.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/codespell/codespell.ignore +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/helper/__init__.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/helper/helper.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/helper/linguistic_exception_handler.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/helper/patterns.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugin.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/__init__.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/badwords.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/copyright_text.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/copyright_year.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/creation_date.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/cve_format.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/cvss_format.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/dependencies.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/dependency_category_order.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/deprecated_dependency.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/deprecated_functions.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/double_end_points.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/duplicate_oid.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/duplicated_script_tags.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/encoding.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/forking_nasl_functions.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/get_kb_on_services.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/http_links_in_tags.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/illegal_characters.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/log_messages.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/malformed_dependencies.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/misplaced_compare_in_if.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/missing_desc_exit.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/missing_tag_solution.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/multiple_re_parameters.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/newlines.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/overlong_description_lines.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/overlong_script_tags.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/prod_svc_detect_in_vulnvt.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/qod.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/reporting_consistency.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/script_add_preference_type.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/script_calls_empty_values.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/script_calls_recommended.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/script_category.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/script_copyright.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/script_family.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/script_tag_form.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/script_tag_whitespaces.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/script_tags_mandatory.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/script_version_and_last_modification_tags.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/script_xref_form.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/script_xref_url.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/security_messages.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/set_get_kb_calls.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/solution_text.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/solution_type.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/spaces_before_dots.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/spaces_in_filename.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/spelling.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/tabs.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/todo_tbd.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/trailing_spaces_tabs.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/using_display.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/valid_oid.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/valid_script_tag_names.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/variable_assigned_in_if.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/variable_redefinition_in_foreach.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/vt_file_permissions.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/plugins/vt_placement.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/reporter.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/results.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/runner.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/__init__.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/allowed_rev_diff.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/changed_cves.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/changed_oid.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/changed_packages/changed_packages.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/changed_packages/marker/__init__.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/changed_packages/marker/added_epoch.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/changed_packages/marker/added_release.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/changed_packages/marker/added_udeb.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/changed_packages/marker/changed_update.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/changed_packages/marker/dropped_architecture.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/changed_packages/marker/marker.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/changed_packages/package.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/common.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/dependency_graph/__init__.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/deprecate_vts.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/file_extensions.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/last_modification.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/no_solution.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/version_updated.py +0 -0
- {troubadix-25.3.4 → troubadix-25.4.0}/troubadix/troubadix.py +0 -0
|
@@ -208,6 +208,58 @@ class CheckNewlinesTestCase(PluginTestCase):
|
|
|
208
208
|
results[0].message,
|
|
209
209
|
)
|
|
210
210
|
|
|
211
|
+
def test_grammar7(self):
|
|
212
|
+
nasl_file = Path(__file__).parent / "test.nasl"
|
|
213
|
+
content = (
|
|
214
|
+
' script_tag(name:"cvss_base", value:"4.0");\n'
|
|
215
|
+
' script_tag(name:"summary", value:"Foo Bar is prone to a to a '
|
|
216
|
+
'remote denial-of-service vulnerability.");\n'
|
|
217
|
+
' script_tag(name:"solution_type", value:"VendorFix");\n'
|
|
218
|
+
' script_tag(name:"solution", value:"meh");\n'
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
fake_context = self.create_file_plugin_context(
|
|
222
|
+
nasl_file=nasl_file, file_content=content
|
|
223
|
+
)
|
|
224
|
+
plugin = CheckGrammar(fake_context)
|
|
225
|
+
|
|
226
|
+
results = list(plugin.run())
|
|
227
|
+
|
|
228
|
+
self.assertEqual(len(results), 1)
|
|
229
|
+
self.assertIsInstance(results[0], LinterError)
|
|
230
|
+
self.assertEqual(
|
|
231
|
+
"VT/Include has the following grammar problem: "
|
|
232
|
+
'script_tag(name:"summary", value:"Foo Bar is prone to a to a '
|
|
233
|
+
'remote denial-of-service vulnerability.");',
|
|
234
|
+
results[0].message,
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
def test_grammar8(self):
|
|
238
|
+
nasl_file = Path(__file__).parent / "test.nasl"
|
|
239
|
+
content = (
|
|
240
|
+
' script_tag(name:"cvss_base", value:"4.0");\n'
|
|
241
|
+
' script_tag(name:"insight", value:"- CVE-2022-31702: Command '
|
|
242
|
+
'injection in the in the vRNI REST API.");\n'
|
|
243
|
+
' script_tag(name:"solution_type", value:"VendorFix");\n'
|
|
244
|
+
' script_tag(name:"solution", value:"meh");\n'
|
|
245
|
+
)
|
|
246
|
+
|
|
247
|
+
fake_context = self.create_file_plugin_context(
|
|
248
|
+
nasl_file=nasl_file, file_content=content
|
|
249
|
+
)
|
|
250
|
+
plugin = CheckGrammar(fake_context)
|
|
251
|
+
|
|
252
|
+
results = list(plugin.run())
|
|
253
|
+
|
|
254
|
+
self.assertEqual(len(results), 1)
|
|
255
|
+
self.assertIsInstance(results[0], LinterError)
|
|
256
|
+
self.assertEqual(
|
|
257
|
+
"VT/Include has the following grammar problem: "
|
|
258
|
+
'script_tag(name:"insight", value:"- CVE-2022-31702: Command '
|
|
259
|
+
'injection in the in the vRNI REST API.");',
|
|
260
|
+
results[0].message,
|
|
261
|
+
)
|
|
262
|
+
|
|
211
263
|
def test_grammar_fp(self):
|
|
212
264
|
nasl_file = Path(__file__).parent / "test.nasl"
|
|
213
265
|
content = (
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
2
|
# SPDX-FileCopyrightText: 2024 Greenbone AG
|
|
3
|
+
import logging
|
|
3
4
|
import os
|
|
4
5
|
import unittest
|
|
5
6
|
from io import StringIO
|
|
@@ -30,20 +31,27 @@ class TestReporter(unittest.TestCase):
|
|
|
30
31
|
def setUp(self):
|
|
31
32
|
self.result = Result(
|
|
32
33
|
name="TestScript",
|
|
34
|
+
infos=["cross-feed"],
|
|
33
35
|
warnings=["duplicate dependencies"],
|
|
34
36
|
errors=["missing dependencies"],
|
|
35
37
|
)
|
|
36
38
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
def test_output_formatting(self):
|
|
40
|
+
stream = StringIO()
|
|
41
|
+
|
|
42
|
+
handler = logging.StreamHandler(stream)
|
|
43
|
+
handler.setFormatter(logging.Formatter("%(levelname)s: %(message)s"))
|
|
41
44
|
|
|
42
|
-
|
|
45
|
+
reporter = Reporter()
|
|
46
|
+
reporter.logger.handlers = [handler]
|
|
47
|
+
reporter.logger.setLevel(logging.INFO)
|
|
48
|
+
|
|
49
|
+
reporter.report([self.result])
|
|
43
50
|
|
|
44
|
-
|
|
45
|
-
self.assertIn("
|
|
46
|
-
self.assertIn("
|
|
51
|
+
output = stream.getvalue()
|
|
52
|
+
self.assertIn("INFO: TestScript: cross-feed", output)
|
|
53
|
+
self.assertIn("WARNING: TestScript: duplicate dependencies", output)
|
|
54
|
+
self.assertIn("ERROR: TestScript: missing dependencies", output)
|
|
47
55
|
|
|
48
56
|
|
|
49
57
|
class TestCLIArgs(unittest.TestCase):
|
|
@@ -54,7 +62,7 @@ class TestCLIArgs(unittest.TestCase):
|
|
|
54
62
|
"--root",
|
|
55
63
|
"tests/standalone_plugins/nasl",
|
|
56
64
|
"--feed",
|
|
57
|
-
"
|
|
65
|
+
"22.04",
|
|
58
66
|
"--log",
|
|
59
67
|
"info",
|
|
60
68
|
],
|
|
@@ -62,8 +70,8 @@ class TestCLIArgs(unittest.TestCase):
|
|
|
62
70
|
def test_parse_args_ok(self):
|
|
63
71
|
args = parse_args()
|
|
64
72
|
self.assertEqual(args.root, Path("tests/standalone_plugins/nasl"))
|
|
65
|
-
self.assertEqual(args.feed,
|
|
66
|
-
self.assertEqual(args.log, "
|
|
73
|
+
self.assertEqual(args.feed, Feed.FEED_22_04)
|
|
74
|
+
self.assertEqual(args.log, "INFO")
|
|
67
75
|
|
|
68
76
|
@patch("sys.stderr", new_callable=StringIO)
|
|
69
77
|
@patch("sys.argv", ["prog", "--root", "not_real_dir"])
|
|
@@ -72,7 +80,7 @@ class TestCLIArgs(unittest.TestCase):
|
|
|
72
80
|
parse_args()
|
|
73
81
|
self.assertRegex(mock_stderr.getvalue(), "invalid directory_type")
|
|
74
82
|
|
|
75
|
-
@patch("sys.stderr", new_callable=StringIO)
|
|
83
|
+
# @patch("sys.stderr", new_callable=StringIO)
|
|
76
84
|
@patch(
|
|
77
85
|
"sys.argv",
|
|
78
86
|
[
|
|
@@ -83,10 +91,9 @@ class TestCLIArgs(unittest.TestCase):
|
|
|
83
91
|
"invalid_feed",
|
|
84
92
|
],
|
|
85
93
|
)
|
|
86
|
-
def test_parse_args_invalid_feed(self
|
|
94
|
+
def test_parse_args_invalid_feed(self):
|
|
87
95
|
with self.assertRaises(SystemExit):
|
|
88
96
|
parse_args()
|
|
89
|
-
self.assertRegex(mock_stderr.getvalue(), "Invalid Feed value")
|
|
90
97
|
|
|
91
98
|
@patch.dict(os.environ, {"VTDIR": "/mock/env/path"})
|
|
92
99
|
@patch("sys.argv", ["prog"])
|
|
@@ -98,7 +105,7 @@ class TestCLIArgs(unittest.TestCase):
|
|
|
98
105
|
def test_parse_args_defaults(self):
|
|
99
106
|
args = parse_args()
|
|
100
107
|
self.assertEqual(args.log, "WARNING")
|
|
101
|
-
self.assertEqual(args.feed,
|
|
108
|
+
self.assertEqual(args.feed, Feed.COMMON)
|
|
102
109
|
|
|
103
110
|
|
|
104
111
|
class TestDependencyGraph(unittest.TestCase):
|
|
@@ -119,9 +126,9 @@ if(description)
|
|
|
119
126
|
"""
|
|
120
127
|
|
|
121
128
|
def test_get_feed(self):
|
|
122
|
-
feed =
|
|
129
|
+
feed = Feed.FEED_22_04
|
|
123
130
|
scripts = get_feed(Path(self.local_root), feed)
|
|
124
|
-
self.assertEqual(len(scripts),
|
|
131
|
+
self.assertEqual(len(scripts), 5)
|
|
125
132
|
|
|
126
133
|
@patch("pathlib.Path.read_text")
|
|
127
134
|
def test_get_scripts(self, mock_read_text):
|
|
@@ -166,35 +173,36 @@ if(description)
|
|
|
166
173
|
@patch("sys.stdout", new_callable=StringIO) # mock_stdout (second argument)
|
|
167
174
|
@patch("sys.stderr", new_callable=StringIO) # mock_stderr (first argument)
|
|
168
175
|
@patch(
|
|
169
|
-
"sys.argv",
|
|
176
|
+
"sys.argv",
|
|
177
|
+
["prog", "--root", "tests/standalone_plugins/nasl", "--log", "info"],
|
|
170
178
|
) # no argument
|
|
171
179
|
def test_full_run(self, mock_stderr, mock_stdout):
|
|
172
180
|
return_code = main()
|
|
173
|
-
output =
|
|
181
|
+
output = mock_stderr.getvalue()
|
|
174
182
|
|
|
175
|
-
self.assertIn("
|
|
183
|
+
self.assertIn("ERROR: missing dependency: missing.nasl:", output)
|
|
176
184
|
self.assertIn(
|
|
177
|
-
"
|
|
185
|
+
"ERROR: cyclic dependency: ", # order is random so can't match the output
|
|
178
186
|
output,
|
|
179
187
|
)
|
|
180
188
|
self.assertIn(
|
|
181
|
-
"
|
|
182
|
-
" gsf/enterprise_script.nasl(enterprise feed),
|
|
183
|
-
" current feed is not properly checked",
|
|
189
|
+
"ERROR: cross-feed dependency: incorrect feed check in foo.nasl(community feed)"
|
|
190
|
+
" which depends on gsf/enterprise_script.nasl(enterprise feed)",
|
|
184
191
|
output,
|
|
185
192
|
)
|
|
186
193
|
self.assertIn(
|
|
187
|
-
"
|
|
194
|
+
"ERROR: category order: bar.nasl depends on foo.nasl which has a lower category order",
|
|
188
195
|
output,
|
|
189
196
|
)
|
|
190
197
|
self.assertIn(
|
|
191
|
-
"
|
|
198
|
+
"ERROR: deprecated dependency: foo.nasl depends on deprecated script foobar.nasl",
|
|
199
|
+
output,
|
|
192
200
|
)
|
|
193
201
|
self.assertIn(
|
|
194
|
-
"
|
|
202
|
+
"WARNING: duplicate dependency: in bar.nasl: foo.nasl", output
|
|
195
203
|
)
|
|
196
204
|
self.assertIn(
|
|
197
|
-
"
|
|
205
|
+
"INFO: cross-feed dependency: bar.nasl(community feed)"
|
|
198
206
|
" depends on gsf/enterprise_script.nasl(enterprise feed)",
|
|
199
207
|
output,
|
|
200
208
|
)
|
|
@@ -815,6 +815,8 @@ ofproto/bond: fix interal flow leak of tcp-balance bond
|
|
|
815
815
|
of user-supplied input processed by Steam In-Home Streaming (IHS) Discovery
|
|
816
816
|
of Wiesemann & Theis GmbH W&T OPC Server for Windows.");
|
|
817
817
|
Ohter bug fixes:
|
|
818
|
+
"olt",
|
|
819
|
+
"olt/pages",
|
|
818
820
|
# on e.g. newer releases of the NAM appliance we're even getting an 403/forbidden
|
|
819
821
|
opc_req_header = raw_string("HEL", # Message Type (Hello)
|
|
820
822
|
opening a specially crafted CAF audio file, an attacker could execute
|
|
@@ -174,6 +174,11 @@ def get_grammer_pattern() -> re.Pattern:
|
|
|
174
174
|
# server-site template injection -> server-side template injection
|
|
175
175
|
r"cross[\s-]+side[\s-]+(request[\s-]+forgery|scripting)|"
|
|
176
176
|
r"server[\s-]+site[\s-]+(request[\s-]+forgery|template)[\s-]+injection|"
|
|
177
|
+
# nb: Next two could happen when copy'n'paste some text parts around
|
|
178
|
+
# like e.g.:
|
|
179
|
+
# is prone to a to a remote denial-of-service vulnerability
|
|
180
|
+
# CVE-2022-31702: Command injection in the in the vRNI REST API
|
|
181
|
+
r"in the in the|to an? to a|"
|
|
177
182
|
# e.g. "is prone to a security bypass vulnerabilities"
|
|
178
183
|
r"is\s+prone\s+to\s+an?\s+[^\s]+\s+([^\s]+\s+)?vulnerabilities" r").*",
|
|
179
184
|
re.IGNORECASE,
|
{troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/dependency_graph/checks.py
RENAMED
|
@@ -17,12 +17,10 @@ def check_duplicates(scripts: list[Script]) -> Result:
|
|
|
17
17
|
for script in scripts:
|
|
18
18
|
counter = Counter(dep.name for dep in script.dependencies)
|
|
19
19
|
duplicates = [dep for dep, count in counter.items() if count > 1]
|
|
20
|
-
|
|
21
20
|
if duplicates:
|
|
22
|
-
|
|
23
|
-
warnings.append(msg)
|
|
21
|
+
warnings.append(f"in {script.name}: {', '.join(duplicates)}")
|
|
24
22
|
|
|
25
|
-
return Result(name="
|
|
23
|
+
return Result(name="duplicate dependency", warnings=warnings)
|
|
26
24
|
|
|
27
25
|
|
|
28
26
|
def check_missing_dependencies(
|
|
@@ -34,20 +32,22 @@ def check_missing_dependencies(
|
|
|
34
32
|
logs the scripts dependending on the missing script
|
|
35
33
|
"""
|
|
36
34
|
errors = []
|
|
37
|
-
|
|
35
|
+
dependency_names = {
|
|
38
36
|
dep.name for script in scripts for dep in script.dependencies
|
|
39
37
|
}
|
|
40
38
|
script_names = {script.name for script in scripts}
|
|
41
|
-
missing_dependencies =
|
|
39
|
+
missing_dependencies = dependency_names - script_names
|
|
42
40
|
|
|
43
41
|
for missing in missing_dependencies:
|
|
44
42
|
depending_scripts = graph.predecessors(missing)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
errors.append(
|
|
44
|
+
f"{missing}:"
|
|
45
|
+
+ "".join(
|
|
46
|
+
f"\n - used by: {script}" for script in depending_scripts
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
49
|
|
|
50
|
-
return Result(name="
|
|
50
|
+
return Result(name="missing dependency", errors=errors)
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
def check_cycles(graph) -> Result:
|
|
@@ -59,8 +59,8 @@ def check_cycles(graph) -> Result:
|
|
|
59
59
|
|
|
60
60
|
cycles = nx.simple_cycles(graph)
|
|
61
61
|
|
|
62
|
-
errors = [
|
|
63
|
-
return Result(name="
|
|
62
|
+
errors = [str(cycle) for cycle in cycles]
|
|
63
|
+
return Result(name="cyclic dependency", errors=errors)
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
def cross_feed_dependencies(
|
|
@@ -86,22 +86,19 @@ def check_cross_feed_dependencies(graph) -> Result:
|
|
|
86
86
|
and if they are correctly contained within a is_enterprise_feed check.
|
|
87
87
|
"""
|
|
88
88
|
gated_cfd = cross_feed_dependencies(graph, is_enterprise_checked=True)
|
|
89
|
-
|
|
90
|
-
f"
|
|
91
|
-
f"depends on {dependency}(enterprise feed)"
|
|
89
|
+
infos = [
|
|
90
|
+
f"{dependent}(community feed) depends on {dependency}(enterprise feed)"
|
|
92
91
|
for dependent, dependency in gated_cfd
|
|
93
92
|
]
|
|
94
93
|
|
|
95
94
|
ungated_cfd = cross_feed_dependencies(graph, is_enterprise_checked=False)
|
|
96
95
|
errors = [
|
|
97
|
-
f"
|
|
98
|
-
f"depends on {dependency}(enterprise feed)
|
|
96
|
+
f"incorrect feed check in {dependent}(community feed) "
|
|
97
|
+
f"which depends on {dependency}(enterprise feed)"
|
|
99
98
|
for dependent, dependency in ungated_cfd
|
|
100
99
|
]
|
|
101
100
|
|
|
102
|
-
return Result(
|
|
103
|
-
name="check_cross_feed_dependencies", warnings=warnings, errors=errors
|
|
104
|
-
)
|
|
101
|
+
return Result(name="cross-feed dependency", infos=infos, errors=errors)
|
|
105
102
|
|
|
106
103
|
|
|
107
104
|
def check_category_order(graph) -> Result:
|
|
@@ -116,7 +113,7 @@ def check_category_order(graph) -> Result:
|
|
|
116
113
|
f"{dependent} depends on {dependency} which has a lower category order"
|
|
117
114
|
for dependent, dependency in problematic_edges
|
|
118
115
|
]
|
|
119
|
-
return Result(name="
|
|
116
|
+
return Result(name="category order", errors=errors)
|
|
120
117
|
|
|
121
118
|
|
|
122
119
|
def check_deprecated_dependencies(graph) -> Result:
|
|
@@ -125,4 +122,4 @@ def check_deprecated_dependencies(graph) -> Result:
|
|
|
125
122
|
for dependent, dependency in graph.edges()
|
|
126
123
|
if graph.nodes[dependency].get("deprecated", False)
|
|
127
124
|
]
|
|
128
|
-
return Result(name="
|
|
125
|
+
return Result(name="deprecated dependency", errors=errors)
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
import os
|
|
6
|
-
from argparse import ArgumentParser,
|
|
6
|
+
from argparse import ArgumentParser, Namespace
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
|
|
9
9
|
from troubadix.argparser import directory_type_existing
|
|
@@ -11,13 +11,6 @@ from troubadix.argparser import directory_type_existing
|
|
|
11
11
|
from .models import Feed
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
def feed_type(value: str) -> Feed:
|
|
15
|
-
try:
|
|
16
|
-
return Feed[value.upper()]
|
|
17
|
-
except KeyError:
|
|
18
|
-
raise ArgumentTypeError(f"Invalid Feed value: '{value}'")
|
|
19
|
-
|
|
20
|
-
|
|
21
14
|
def parse_args() -> Namespace:
|
|
22
15
|
parser = ArgumentParser(
|
|
23
16
|
description="Tool for analysing the dependencies in the NASL repository.",
|
|
@@ -31,18 +24,18 @@ def parse_args() -> Namespace:
|
|
|
31
24
|
parser.add_argument(
|
|
32
25
|
"-f",
|
|
33
26
|
"--feed",
|
|
34
|
-
type=
|
|
27
|
+
type=Feed,
|
|
35
28
|
choices=Feed,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
help="feed",
|
|
29
|
+
default=Feed.COMMON,
|
|
30
|
+
help="Feed selection",
|
|
39
31
|
)
|
|
40
32
|
parser.add_argument(
|
|
41
33
|
"--log",
|
|
34
|
+
type=str.upper,
|
|
42
35
|
default="WARNING",
|
|
43
|
-
|
|
36
|
+
choices=["INFO", "WARNING", "ERROR"],
|
|
37
|
+
help="Set the logging level (default: WARNING)",
|
|
44
38
|
)
|
|
45
|
-
parser.add_argument("-v", "--verbose", action="count", default=0)
|
|
46
39
|
|
|
47
40
|
args = parser.parse_args()
|
|
48
41
|
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
import logging
|
|
6
6
|
import re
|
|
7
7
|
import sys
|
|
8
|
-
from functools import reduce
|
|
9
8
|
from pathlib import Path
|
|
10
9
|
|
|
11
10
|
import networkx as nx
|
|
@@ -47,46 +46,23 @@ ENTERPRISE_FEED_CHECK_PATTERN = re.compile(
|
|
|
47
46
|
|
|
48
47
|
|
|
49
48
|
class Reporter:
|
|
50
|
-
def __init__(self
|
|
51
|
-
self.
|
|
49
|
+
def __init__(self) -> None:
|
|
50
|
+
self.logger = logging.getLogger(__name__)
|
|
52
51
|
|
|
53
52
|
def report(self, results: list[Result]):
|
|
54
53
|
for result in results:
|
|
55
|
-
|
|
56
|
-
self.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if self.verbosity >= 2:
|
|
62
|
-
self.print_divider("=")
|
|
63
|
-
|
|
64
|
-
def print_divider(self, char="-", length=40):
|
|
65
|
-
print(char * length)
|
|
66
|
-
|
|
67
|
-
def print_statistic(self, result: Result):
|
|
68
|
-
print(
|
|
69
|
-
f"{result.name} - warnings: {len(result.warnings)}, errors: {len(result.errors)}"
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
def print_warnings(self, result: Result):
|
|
73
|
-
for warning in result.warnings:
|
|
74
|
-
print(f"warning: {warning}")
|
|
54
|
+
for error in result.errors:
|
|
55
|
+
self.logger.error(f"{result.name}: {error}")
|
|
56
|
+
for warning in result.warnings:
|
|
57
|
+
self.logger.warning(f"{result.name}: {warning}")
|
|
58
|
+
for info in result.infos:
|
|
59
|
+
self.logger.info(f"{result.name}: {info}")
|
|
75
60
|
|
|
76
|
-
def print_errors(self, result: Result):
|
|
77
|
-
for error in result.errors:
|
|
78
|
-
print(f"error: {error}")
|
|
79
61
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
feed
|
|
83
|
-
|
|
84
|
-
if feed & Feed.COMMON:
|
|
85
|
-
scripts.extend(get_scripts(root / "common"))
|
|
86
|
-
if feed & Feed.FEED_21_04:
|
|
87
|
-
scripts.extend(get_scripts(root / "21.04"))
|
|
88
|
-
if feed & Feed.FEED_22_04:
|
|
89
|
-
scripts.extend(get_scripts(root / "22.04"))
|
|
62
|
+
def get_feed(root: Path, feed: Feed) -> list[Script]:
|
|
63
|
+
scripts = get_scripts(root / "common") # Always include common
|
|
64
|
+
if feed != Feed.COMMON: # Add version-specific scripts if not just common
|
|
65
|
+
scripts.extend(get_scripts(root / feed.value))
|
|
90
66
|
|
|
91
67
|
return scripts
|
|
92
68
|
|
|
@@ -197,7 +173,7 @@ def main():
|
|
|
197
173
|
check_category_order(graph),
|
|
198
174
|
check_deprecated_dependencies(graph),
|
|
199
175
|
]
|
|
200
|
-
reporter = Reporter(
|
|
176
|
+
reporter = Reporter()
|
|
201
177
|
reporter.report(results)
|
|
202
178
|
|
|
203
179
|
if any(result.errors for result in results):
|
{troubadix-25.3.4 → troubadix-25.4.0}/troubadix/standalone_plugins/dependency_graph/models.py
RENAMED
|
@@ -2,18 +2,19 @@
|
|
|
2
2
|
# SPDX-FileCopyrightText: 2025 Greenbone AG
|
|
3
3
|
|
|
4
4
|
from dataclasses import dataclass, field
|
|
5
|
-
from enum import
|
|
5
|
+
from enum import Enum
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
class Feed(
|
|
9
|
-
COMMON =
|
|
10
|
-
FEED_21_04 =
|
|
11
|
-
FEED_22_04 =
|
|
12
|
-
FULL = COMMON | FEED_21_04 | FEED_22_04
|
|
8
|
+
class Feed(str, Enum):
|
|
9
|
+
COMMON = "common"
|
|
10
|
+
FEED_21_04 = "21.04"
|
|
11
|
+
FEED_22_04 = "22.04"
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
|
|
14
|
+
class OutputLevel(Enum):
|
|
15
|
+
ERROR = 1
|
|
16
|
+
WARNING = 2
|
|
17
|
+
INFO = 3
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
@dataclass
|
|
@@ -35,6 +36,11 @@ class Script:
|
|
|
35
36
|
|
|
36
37
|
@dataclass
|
|
37
38
|
class Result:
|
|
39
|
+
"""Holds the results of a single check.
|
|
40
|
+
A check can report a combination of errors, warnings and infos
|
|
41
|
+
"""
|
|
42
|
+
|
|
38
43
|
name: str
|
|
39
44
|
warnings: list[str] = field(default_factory=list)
|
|
40
45
|
errors: list[str] = field(default_factory=list)
|
|
46
|
+
infos: list[str] = field(default_factory=list)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/fail_name_and_copyright_newline.nasl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/nasl/21.04/fail_badwords.nasl
RENAMED
|
File without changes
|
|
File without changes
|
{troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/nasl/21.04/fail_name_newline.nasl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{troubadix-25.3.4 → troubadix-25.4.0}/tests/plugins/test_files/nasl/21.04/runner/test_valid_oid.nasl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|