aboutsummaryrefslogtreecommitdiffstats
path: root/english/security
diff options
context:
space:
mode:
authorCarsten Schoenert <c.schoenert@t-online.de>2023-11-24 14:08:14 +0000
committerThomas Lange <lange@debian.org>2023-12-02 16:47:03 +0100
commit241180bf40b46761b26b6b8cb716a1264c6fdd1b (patch)
tree696c29c3ffcc4480642327e3060e2a101c7895c8 /english/security
parent9254f1fe33b55d9c5fca557d6479672be11af26a (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-xenglish/security/oval/generate.py39
-rw-r--r--english/security/oval/oval/parser/dsa.py129
-rw-r--r--english/security/oval/oval/parser/wml.py115
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)
-
-

© 2014-2024 Faster IT GmbH | imprint | privacy policy