diff options
author | Carsten Schoenert <c.schoenert@t-online.de> | 2023-11-24 14:08:14 +0000 |
---|---|---|
committer | Thomas Lange <lange@debian.org> | 2023-12-02 16:47:03 +0100 |
commit | 241180bf40b46761b26b6b8cb716a1264c6fdd1b (patch) | |
tree | 696c29c3ffcc4480642327e3060e2a101c7895c8 /english/security | |
parent | 9254f1fe33b55d9c5fca557d6479672be11af26a (diff) |
generate.py: Remove not used function parsedirs()
parsedirs() was used to collect data from *.wml and *.data files. We
don't do this now anymore.
Diffstat (limited to 'english/security')
-rwxr-xr-x | english/security/oval/generate.py | 39 | ||||
-rw-r--r-- | english/security/oval/oval/parser/dsa.py | 129 | ||||
-rw-r--r-- | english/security/oval/oval/parser/wml.py | 115 |
3 files changed, 1 insertions, 282 deletions
diff --git a/english/security/oval/generate.py b/english/security/oval/generate.py index 16420ce6231..9599c24a511 100755 --- a/english/security/oval/generate.py +++ b/english/security/oval/generate.py @@ -20,7 +20,7 @@ import sys from typing import Any import oval.definition.generator -from oval.parser import dsa, tracker, wml +from oval.parser import tracker # TODO: # - these may need changed or reworked. @@ -120,43 +120,6 @@ def add_wml_info(ovals, wmlResult, key, dsaRef, debian_release): return ovals -def parsedirs(ovals, directory, regex, depth, debian_release): - """ - Recursively search directory for DSA files matching given regex, - then call oval.parser.dsa.parseFile() to extract the DSA - information. - """ - - for ( - root, - dirs, - files, - ) in os.walk(directory): - for name in files: - path = os.path.join(root, name) - logging.debug("checking %s for %s", path, regex.pattern) - - if os.access(path, os.R_OK) and regex.search(name): - dsaResult = dsa.parseFile(path) - logging.debug("\ndsaResult: %s\n", dsaResult) - - # also parse corresponding wml file - wmlResult = wml.parseFile(path.replace(".data", ".wml"), DEBIAN_VERSION) - logging.debug("\nwmlResult: %s\n", wmlResult) - - # remove .data extension - dsaRef = os.path.splitext(name)[0].upper() - logging.debug("\ndsaRef: %s\n", dsaRef) - - if dsaResult and wmlResult: - ovals = add_dsa_info( - ovals, dsaResult, wmlResult, dsaRef, debian_release - ) - logging.debug(pprint.pformat(ovals)) - - return ovals - - def collect_dsa_data( ovals: dict[str, Any], debian_release: str, diff --git a/english/security/oval/oval/parser/dsa.py b/english/security/oval/oval/parser/dsa.py deleted file mode 100644 index db2c2423ff9..00000000000 --- a/english/security/oval/oval/parser/dsa.py +++ /dev/null @@ -1,129 +0,0 @@ -# -*- coding: utf-8 -*- -# oval.parser.dsa - module to parse Debian Security Advisories files. -# -# Extracted tags: -# <pagetitle> -# <report_date> -# <secrefs> -# <packages> -# <isvulnerable> -# <fixed> -# -# (c) 2016 Sebastien Delafond <sdelafond@gmail.com> -# (c) 2015 Nicholas Luedtke -# (c) 2007 Pavel Vinogradov -# (c) 2004 Javier Fernandez-Sanguino -# Licensed under the GNU General Public License version 2. - -import re -import os -import logging - -# Format of data files is: -# <define-tag pagetitle>DSA-###-# PACKAGE</define-tag> -# <define-tag report_date>yyyy-mm-dd</define-tag> -# <define-tag secrefs>CAN|CVE-XXXX-XXXX</define-tag> -# <define-tag packages>PACKAGE</define-tag> -# <define-tag isvulnerable>yes|no</define-tag> -# <define-tag fixed>yes|no</define-tag> - -def parseFile (path): - """ Parse data file with information of Debian Security Advisories - - Keyword arguments: - path -- full path to data file - - return list (dsa id, tags and packages data)""" - - data = {} - deb_ver = None - fdeb_ver = None - - filename = os.path.basename (path) - - dsa = os.path.basename(path)[:-5] - logging.log (logging.DEBUG, "Parsing DSA %s from file %s", dsa, filename) - - dsaFile = open(path, encoding="ISO-8859-2") - - for line in dsaFile: - logging.debug(". looking at line: " + line.strip()) - datepatern = re.compile (r'report_date>([\d-]+)</define-tag>') - result = datepatern.search (line) - if result: - date = result.groups()[0] - normDate = lambda date: "-".join([(len(p) > 1 and p or "0"+p) for p in date.split("-")]) - data["date"] = normDate(date) - - descrpatern = re.compile (r'pagetitle>(.*?)</define-tag>') - result = descrpatern.search (line) - if result: - data["title"] = result.groups()[0] - logging.debug(".. extracted page title: %s", data["title"]) - continue - - refspatern = re.compile (r'secrefs>(.*?)</define-tag>') - result = refspatern.search (line) - if result: - data["secrefs"] = [str(s) for s in re.split(r'\s+', result.groups()[0])] - logging.debug(".. extracted security references: %s", data["secrefs"]) - - pakpatern = re.compile (r'packages>(.*?)</define-tag>') - result = pakpatern.search (line) - if result: - data["packages"] = result.groups()[0] - logging.debug(".. extracted packages: %s", data["packages"]) - - vulpatern = re.compile (r'isvulnerable>(.*?)</define-tag>') - result = vulpatern.search (line) - if result: - data["vulnerable"] = result.groups()[0] - logging.debug(".. extracted vulnerable: %s", data["vulnerable"]) - - fixpatern = re.compile (r'fixed>(.*?)</define-tag>') - result = fixpatern.search (line) - if result: - data["fixed"] = result.groups()[0] - logging.debug(".. extracted fixed: %s", data["fixed"]) - - versionpatern = re.compile (r'<h3>Debian GNU/Linux (\d.\d) \((.*?)\)</h3>') - result = versionpatern.search (line) - if result: - fdeb_ver = result.groups()[0] - - # Alternative format for data files - versionpatern = re.compile (r'affected_release>([\d\.]+)<') - result = versionpatern.search (line) - if result: - fdeb_ver = result.groups()[0] - - if fdeb_ver: - deb_ver = fdeb_ver - fdeb_ver = None - if "release" in data: - if deb_ver in data["release"]: - logging.warning("DSA %s: Found second files section for release %s", dsa, deb_ver) - else: - data["release"][deb_ver] = {} - else: - data["release"] = {deb_ver: {}} - - # Binary packages are pushed into array - # Those are prepended by fileurls - # TODO: Packages do _NOT_ include epochs - # (that should be fixed) - if "release" in data and deb_ver: - urlpatern = re.compile (r'fileurl [\w:/.\-+]+/([\w\-.+~]+)\.deb[^i]') - result = urlpatern.search (line) - if result: - (package, version, architecture) = result.groups()[0].split("_") - - if architecture in data["release"][deb_ver]: - data["release"][deb_ver][architecture][package] = version - else: - data["release"][deb_ver][architecture] = {package : version} - - logging.debug("... found dsa data: %s", data) - - if "title" in data: - return data["title"], data diff --git a/english/security/oval/oval/parser/wml.py b/english/security/oval/oval/parser/wml.py deleted file mode 100644 index 6cbb83b9154..00000000000 --- a/english/security/oval/oval/parser/wml.py +++ /dev/null @@ -1,115 +0,0 @@ -# -*- coding: utf-8 -*- -# oval.parser.wml - module to parse descriptions of -# Debian Security Advisories stored in wml format. -# Extrected tags: -# <description> -# <moreinfo>- Paragraphs before descriptions of -# each release status -# -# (c) 2016 Sebastien Delafond <sdelafond@gmail.com> -# (c) 2015 Nicholas Luedtke -# (c) 2007 Pavel Vinogradov -# (c) 2004 Javier Fernandez-Sanguino -# Licensed under the GNU General Public License version 2. - -import re -import os -import logging - -# Format of wml files is: -#<define-tag description>DESCRIPTION</define-tag> -#<define-tag moreinfo>Multiline information</define-tag> -def parseFile (path, debianVersion): - """ Parse wml file with description of Debian Security Advisories - - Keyword arguments: - path -- full path to wml file - - return list (dsa id, tags data)""" - - data = {} - deb_version = "" - releases = {} - dsa = os.path.splitext(os.path.basename(path))[0] - filename = os.path.basename (path) - - logging.log (logging.DEBUG, "Parsing information for DSA %s from wml file %s" % (dsa, filename)) - - try: - - wmlFile = open(path, encoding="ISO-8859-2").read() - - # find and replace \n and \r\n symbols - lines = re.sub('(?<![\r\n])(\r?\n|\n?\r)(?![\r\n])', ' ', wmlFile) - - lines = lines.split('\n\n') - dversion_pattern = re.compile(r'(%s)' % '|'.join(debianVersion.keys()), re.IGNORECASE) - - for line in lines: - # find description part - descrpatern = re.compile(r'description>(.*?)</define-tag>') - description = descrpatern.search(line) - if description: - data["description"] = description.groups()[0] - - # find moreinfo part - sinfopatern = re.compile(r'<define-tag moreinfo>(.*?)') - einfopatern = re.compile(r'</define-tag>') - if sinfopatern.search(line) and einfopatern.search(line): - data['moreinfo'] = line - data["moreinfo"] = __parseMoreinfo(data["moreinfo"]) - - # find debian version - dversion = dversion_pattern.search(line) - if dversion: - deb_version = dversion.groups()[0].lower() - else: - deb_version = "" - - # find fixed version - new_version_pattern = re.compile(r'version ([0-9]+[.:]+[a-zA-Z0-9.+\-:~]+?)\.?(</p>|\s)') - version = new_version_pattern.search(line) - - # add fixed version and debian release in releases dict - if version and deb_version != "" and not debianVersion[deb_version] in releases: - pack_ver = version.groups()[0] - releases.update({debianVersion[deb_version]: {"all": {grabPackName(path): pack_ver}}}) - - except IOError: - logging.log (logging.ERROR, "Can't work with file %s" % path) - - logging.debug("... found wml data: %s" % data) - - return data, releases - -def __parseMoreinfo (info): - """ Remove unnecessary information form moreinfo tag""" - - p = re.compile ("<p>(.*?)</p>", re.DOTALL) - paragraphs = [m.groups()[0] for m in re.finditer(p, info)] - result = "" - - for par in paragraphs: - if re.match(re.compile("For the .* distribution"), par): - break - result += "\n" + par - - return result - -def grabPackName(path): - """ - :param path: full path to wml file - :return: string: Package Name - """ - - try: - wmlFile = open(path) - package_name = re.compile (r'We recommend that you upgrade your (.*?) packages') - for line in wmlFile: - result = package_name.search(line) - if result: - return result.groups()[0] - except IOError: - logging.log (logging.ERROR, "Can't work with file %s" % path) - - |