git: a3cdb67a6a09 - main - security/py-notus-scanner: New port: scanner for creating results from local security checks

From: Jose Alonso Cardenas Marquez <acm_at_FreeBSD.org>
Date: Mon, 01 Aug 2022 20:43:49 UTC
The branch main has been updated by acm:

URL: https://cgit.FreeBSD.org/ports/commit/?id=a3cdb67a6a09e71420daeba04feed14029d1c21a

commit a3cdb67a6a09e71420daeba04feed14029d1c21a
Author:     Jose Alonso Cardenas Marquez <acm@FreeBSD.org>
AuthorDate: 2022-08-01 20:41:43 +0000
Commit:     Jose Alonso Cardenas Marquez <acm@FreeBSD.org>
CommitDate: 2022-08-01 20:43:40 +0000

    security/py-notus-scanner: New port: scanner for creating results from local security checks
    
    Notus Scanner detects vulnerable products in a system environment. The scanning
    method is to evaluate internal system information. It does this very fast and
    even detects currently inactive products because it does not need to interact
    with each of the products.
    
    To report about vulnerabilities, Notus Scanner receives collected system
    information on the one hand and accesses the vulnerability information from the
    feed service on the other. Both input elements are in table form: the system
    information is specific to each environment and the vulnerability information
    is specific to each system type.
    
    Notus Scanner integrates into the Greenbone Vulnerability Management framework
    which allows to let it scan entire networks within a single task. Any
    vulnerability test in the format of .notus files inside the Greenbone Feed will
    be considered and automatically matched with the scanned environments.
    
    WWW: https://github.com/greenbone/notus-scanner
---
 security/Makefile                                  |   1 +
 security/py-notus-scanner/Makefile                 |  52 ++++++
 security/py-notus-scanner/distinfo                 |   3 +
 security/py-notus-scanner/files/notus_scanner.in   |  38 +++++
 .../files/patch-notus-scanner-cli_parser.py        |  11 ++
 .../files/patch-notus-scanner_config.py            |  11 ++
 security/py-notus-scanner/pkg-descr                |  17 ++
 security/py-notus-scanner/pkg-plist                | 183 +++++++++++++++++++++
 8 files changed, 316 insertions(+)

diff --git a/security/Makefile b/security/Makefile
index 71912c4cde54..dc829c07a61e 100644
--- a/security/Makefile
+++ b/security/Makefile
@@ -902,6 +902,7 @@
     SUBDIR += py-netbox-secretstore
     SUBDIR += py-netmiko
     SUBDIR += py-noiseprotocol
+    SUBDIR += py-notus-scanner
     SUBDIR += py-ntlm-auth
     SUBDIR += py-oauth2client
     SUBDIR += py-oauthlib
diff --git a/security/py-notus-scanner/Makefile b/security/py-notus-scanner/Makefile
new file mode 100644
index 000000000000..ed6b56109bb0
--- /dev/null
+++ b/security/py-notus-scanner/Makefile
@@ -0,0 +1,52 @@
+PORTNAME=	notus-scanner
+DISTVERSION=	22.4.0
+DISTVERSIONPREFIX=	v
+CATEGORIES=	security python
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER=	acm@FreeBSD.org
+COMMENT=	scanner for creating results from local security checks
+
+LICENSE=	AGPLv3
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}poetry2setup>0:devel/py-poetry2setup@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}packaging>0:devel/py-packaging@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}paho-mqtt>0:net/py-paho-mqtt@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}psutil>=0:sysutils/py-psutil@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}python-gnupg>0:security/py-python-gnupg@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}tomli>0:textproc/py-tomli@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}sentry-sdk>0:devel/py-sentry-sdk@${PY_FLAVOR} \
+		mosquitto:net/mosquitto
+
+USE_GITHUB=	yes
+GH_ACCOUNT=	greenbone
+GH_PROJECT=	${PORTNAME}
+
+USES=		python:3.8+
+USE_PYTHON=	distutils
+
+NO_ARCH=	yes
+
+USERS=		gvm
+GROUPS=		${USERS}
+
+USE_RC_SUBR=	${PORTNAME:S/-/_/}
+SUB_LIST=	PYTHON_CMD=${PYTHON_CMD}
+
+post-patch:
+	${REINPLACE_CMD} -i "" -e 's|%%LOCALBASE%%|${LOCALBASE}|g' ${WRKSRC}/notus/scanner/cli/parser.py
+	${REINPLACE_CMD} -i "" -e 's|/etc/openvas/gnupg|/var/lib/openvas/gnupg|g' \
+		${WRKSRC}/notus/scanner/loader/gpg_sha_verifier.py
+	@${RM} ${WRKSRC}/notus/scanner/cli/parser.py.orig
+	@${RM} ${WRKSRC}/notus/scanner/config.py.orig
+
+pre-configure:
+	@cd ${WRKSRC} && poetry2setup > ${WRKSRC}/setup.py
+
+post-install:
+	@${MKDIR} ${STAGEDIR}/var/run/notus-scanner
+	@${MKDIR} ${STAGEDIR}/var/lib/openvas/plugins/notus/products
+	@${MKDIR} ${STAGEDIR}/var/lib/notus
+
+.include <bsd.port.mk>
diff --git a/security/py-notus-scanner/distinfo b/security/py-notus-scanner/distinfo
new file mode 100644
index 000000000000..0befc4468c81
--- /dev/null
+++ b/security/py-notus-scanner/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1659327504
+SHA256 (greenbone-notus-scanner-v22.4.0_GH0.tar.gz) = 59dba47adc1f580682df0619f55361e7343a5692402b95b673b3d8cc19f67884
+SIZE (greenbone-notus-scanner-v22.4.0_GH0.tar.gz) = 290692
diff --git a/security/py-notus-scanner/files/notus_scanner.in b/security/py-notus-scanner/files/notus_scanner.in
new file mode 100644
index 000000000000..766cce64254c
--- /dev/null
+++ b/security/py-notus-scanner/files/notus_scanner.in
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+# PROVIDE: notus_scanner
+# REQUIRE: NETWORKING
+# KEYWORD: shutdown
+#
+# Configuration settings for ospd_openvas in /etc/rc.conf:
+#
+# notus_scanner_enable:          run notus_scanner service (default=NO)
+# notus_scanner_pidfile:         path to notus_scanner pid file
+# notus_scanner_config:          path to notus_scanner configuration file
+# notus_scanner_flags:           additional flags for notus_scanner server
+#
+
+. /etc/rc.subr
+
+name=notus_scanner
+rcvar=notus_scanner_enable
+
+load_rc_config ${name}
+
+export PATH="${PATH}:/usr/local/bin:/usr/local/sbin"
+
+: ${notus_scanner_enable:=NO}
+: ${notus_scanner_pidfile="/var/run/notus-scanner/notus-scanner.pid"}
+: ${notus_scanner_config="/usr/local/etc/gvm/notus-scanner.toml"}
+: ${notus_scanner_flags=""}
+: ${notus_scanner_user="gvm"}
+
+notus_scanner_group="gvm"
+
+pidfile=${notus_scanner_pidfile}
+
+command=/usr/local/bin/notus-scanner
+command_interpreter="%%PYTHON_CMD%%"
+command_args="--pid-file ${pidfile} --config ${notus_scanner_config} --log-file /var/log/gvm/notus-scanner.log ${notus_scanner_flags}"
+
+run_rc_command "$1"
diff --git a/security/py-notus-scanner/files/patch-notus-scanner-cli_parser.py b/security/py-notus-scanner/files/patch-notus-scanner-cli_parser.py
new file mode 100644
index 000000000000..5b9a28e1b67b
--- /dev/null
+++ b/security/py-notus-scanner/files/patch-notus-scanner-cli_parser.py
@@ -0,0 +1,11 @@
+--- notus/scanner/cli/parser.py	2022-07-31 23:45:49.051030000 -0500
++++ notus/scanner/cli/parser.py	2022-07-31 23:46:07.662584000 -0500
+@@ -29,7 +29,7 @@
+ 
+ logger = logging.getLogger(__name__)
+ 
+-DEFAULT_CONFIG_FILE = "/etc/gvm/notus-scanner.toml"
++DEFAULT_CONFIG_FILE = "%%LOCALBASE%%/etc/gvm/notus-scanner.toml"
+ DEFAULT_USER_CONFIG_FILE = "~/.config/notus-scanner.toml"
+ 
+ 
diff --git a/security/py-notus-scanner/files/patch-notus-scanner_config.py b/security/py-notus-scanner/files/patch-notus-scanner_config.py
new file mode 100644
index 000000000000..568f81d1ce68
--- /dev/null
+++ b/security/py-notus-scanner/files/patch-notus-scanner_config.py
@@ -0,0 +1,11 @@
+--- notus/scanner/config.py	2022-07-31 23:42:08.386733000 -0500
++++ notus/scanner/config.py	2022-07-31 23:43:46.513394000 -0500
+@@ -35,7 +35,7 @@
+ DEFAULT_LOG_LEVEL = "INFO"
+ DEFAULT_MQTT_BROKER_ADDRESS = "localhost"
+ DEFAULT_MQTT_BROKER_PORT = 1883
+-DEFAULT_PID_FILE = "/run/notus-scanner/notus-scanner.pid"
++DEFAULT_PID_FILE = "/var/run/notus-scanner/notus-scanner.pid"
+ 
+ _CONFIG = (
+     (
diff --git a/security/py-notus-scanner/pkg-descr b/security/py-notus-scanner/pkg-descr
new file mode 100644
index 000000000000..da6e25be710c
--- /dev/null
+++ b/security/py-notus-scanner/pkg-descr
@@ -0,0 +1,17 @@
+Notus Scanner detects vulnerable products in a system environment. The scanning
+method is to evaluate internal system information. It does this very fast and
+even detects currently inactive products because it does not need to interact
+with each of the products.
+
+To report about vulnerabilities, Notus Scanner receives collected system
+information on the one hand and accesses the vulnerability information from the
+feed service on the other. Both input elements are in table form: the system
+information is specific to each environment and the vulnerability information
+is specific to each system type.
+
+Notus Scanner integrates into the Greenbone Vulnerability Management framework
+which allows to let it scan entire networks within a single task. Any
+vulnerability test in the format of .notus files inside the Greenbone Feed will
+be considered and automatically matched with the scanned environments.
+
+WWW: https://github.com/greenbone/notus-scanner
diff --git a/security/py-notus-scanner/pkg-plist b/security/py-notus-scanner/pkg-plist
new file mode 100644
index 000000000000..b411615950de
--- /dev/null
+++ b/security/py-notus-scanner/pkg-plist
@@ -0,0 +1,183 @@
+bin/notus-scan-start
+bin/notus-scanner
+bin/notus-subscriber
+%%PYTHON_SITELIBDIR%%/notus/scanner/__init__.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/__pycache__/__version__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/__pycache__/__version__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/__pycache__/config%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/__pycache__/config%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/__pycache__/daemon%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/__pycache__/daemon%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/__pycache__/errors%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/__pycache__/errors%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/__pycache__/scanner%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/__pycache__/scanner%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/__pycache__/utils%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/__pycache__/utils%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/__version__.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/cli/__init__.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/cli/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/cli/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/cli/__pycache__/parser%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/cli/__pycache__/parser%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/cli/parser.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/config.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/daemon.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/errors.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/loader/__init__.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/loader/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/loader/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/loader/__pycache__/gpg_sha_verifier%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/loader/__pycache__/gpg_sha_verifier%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/loader/__pycache__/json%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/loader/__pycache__/json%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/loader/__pycache__/loader%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/loader/__pycache__/loader%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/loader/gpg_sha_verifier.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/loader/json.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/loader/loader.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/messages/__init__.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/messages/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messages/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messages/__pycache__/message%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messages/__pycache__/message%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messages/__pycache__/result%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messages/__pycache__/result%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messages/__pycache__/start%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messages/__pycache__/start%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messages/__pycache__/status%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messages/__pycache__/status%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messages/message.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/messages/result.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/messages/start.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/messages/status.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/messaging/__init__.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/messaging/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messaging/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messaging/__pycache__/mqtt%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messaging/__pycache__/mqtt%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messaging/__pycache__/publisher%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messaging/__pycache__/publisher%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messaging/__pycache__/subscriber%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messaging/__pycache__/subscriber%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/messaging/mqtt.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/messaging/publisher.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/messaging/subscriber.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/__init__.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/__pycache__/advisory%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/__pycache__/advisory%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/__pycache__/vulnerability%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/__pycache__/vulnerability%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/advisory.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/packages/__init__.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/packages/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/packages/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/packages/__pycache__/deb%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/packages/__pycache__/deb%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/packages/__pycache__/ebuild%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/packages/__pycache__/ebuild%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/packages/__pycache__/package%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/packages/__pycache__/package%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/packages/__pycache__/rpm%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/packages/__pycache__/rpm%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/packages/deb.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/packages/ebuild.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/packages/package.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/packages/rpm.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/models/vulnerability.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/scanner.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/tools/__init__.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/tools/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/tools/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/tools/__pycache__/scanstart%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/tools/__pycache__/scanstart%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/tools/__pycache__/subscriber%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/tools/__pycache__/subscriber%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/notus/scanner/tools/scanstart.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/tools/subscriber.py
+%%PYTHON_SITELIBDIR%%/notus/scanner/utils.py
+%%PYTHON_SITELIBDIR%%/tests/__init__.py
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/test_config%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/test_config%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/test_verifier%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/test_verifier%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/cli/__init__.py
+%%PYTHON_SITELIBDIR%%/tests/cli/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/cli/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/cli/__pycache__/test_cli_parser%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/cli/__pycache__/test_cli_parser%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/cli/test_cli_parser.py
+%%PYTHON_SITELIBDIR%%/tests/fakespecifier_os.notus
+%%PYTHON_SITELIBDIR%%/tests/loader/__init__.py
+%%PYTHON_SITELIBDIR%%/tests/loader/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/loader/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/loader/__pycache__/test_gpg%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/loader/__pycache__/test_gpg%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/loader/__pycache__/test_json%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/loader/__pycache__/test_json%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/loader/emptyos.notus
+%%PYTHON_SITELIBDIR%%/tests/loader/euleros_v2.0sp1.notus
+%%PYTHON_SITELIBDIR%%/tests/loader/invalid_package.notus
+%%PYTHON_SITELIBDIR%%/tests/loader/test_gpg.py
+%%PYTHON_SITELIBDIR%%/tests/loader/test_json.py
+%%PYTHON_SITELIBDIR%%/tests/messages/__init__.py
+%%PYTHON_SITELIBDIR%%/tests/messages/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/messages/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/messages/__pycache__/test_message%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/messages/__pycache__/test_message%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/messages/__pycache__/test_result%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/messages/__pycache__/test_result%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/messages/__pycache__/test_start%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/messages/__pycache__/test_start%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/messages/__pycache__/test_status%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/messages/__pycache__/test_status%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/messages/test_message.py
+%%PYTHON_SITELIBDIR%%/tests/messages/test_result.py
+%%PYTHON_SITELIBDIR%%/tests/messages/test_start.py
+%%PYTHON_SITELIBDIR%%/tests/messages/test_status.py
+%%PYTHON_SITELIBDIR%%/tests/messaging/__init__.py
+%%PYTHON_SITELIBDIR%%/tests/messaging/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/messaging/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/messaging/__pycache__/test_mqtt%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/messaging/__pycache__/test_mqtt%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/messaging/test_mqtt.py
+%%PYTHON_SITELIBDIR%%/tests/models/__init__.py
+%%PYTHON_SITELIBDIR%%/tests/models/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/models/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/models/__pycache__/test_advisory%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/models/__pycache__/test_advisory%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/models/__pycache__/test_vulnerability%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/models/__pycache__/test_vulnerability%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/models/packages/__init__.py
+%%PYTHON_SITELIBDIR%%/tests/models/packages/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/models/packages/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/models/packages/__pycache__/test_deb%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/models/packages/__pycache__/test_deb%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/models/packages/__pycache__/test_ebuild%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/models/packages/__pycache__/test_ebuild%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/models/packages/__pycache__/test_package%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/models/packages/__pycache__/test_package%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/models/packages/__pycache__/test_rpm%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/models/packages/__pycache__/test_rpm%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/models/packages/gentoo_examples.txt
+%%PYTHON_SITELIBDIR%%/tests/models/packages/test_deb.py
+%%PYTHON_SITELIBDIR%%/tests/models/packages/test_ebuild.py
+%%PYTHON_SITELIBDIR%%/tests/models/packages/test_package.py
+%%PYTHON_SITELIBDIR%%/tests/models/packages/test_rpm.py
+%%PYTHON_SITELIBDIR%%/tests/models/test_advisory.py
+%%PYTHON_SITELIBDIR%%/tests/models/test_vulnerability.py
+%%PYTHON_SITELIBDIR%%/tests/test_config.py
+%%PYTHON_SITELIBDIR%%/tests/test_verifier.py
+@dir(gvm,gvm,750) /var/run/notus-scanner
+@dir(gvm,gvm,750) /var/lib/openvas/plugins/notus/products
+@dir(gvm,gvm,750) /var/lib/openvas/plugins/notus
+@dir(gvm,gvm,750) /var/lib/notus
+@dir /var/lib/openvas/plugins
+@dir /var/lib/openvas
+@dir /var/lib