summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2010-03-22 04:21:17 +0100
committerHolger Hans Peter Freyther <zecke@selfish.org>2010-03-22 04:21:17 +0100
commit654f95c32918456f928f117871b15f09c0b6ae25 (patch)
treeab6569ee9ec2220dac2ce435cdb111dfbb9770e3 /contrib
parent888edecd1b34a4f23e000e08f88a81e43f95732e (diff)
oeaudit: Move the oeaudit into a new subdirectory and split it up
* OE should contain OE related handling * FreeBSD should contain the handling of FreeBSD specific things like the auditfile format, mapping BSD names to OE..
Diffstat (limited to 'contrib')
-rw-r--r--[-rwxr-xr-x]contrib/oeaudit/freebsd.py (renamed from contrib/qa/oe_audit.py)198
-rw-r--r--contrib/oeaudit/oe.py28
-rwxr-xr-xcontrib/oeaudit/oe_audit.py82
3 files changed, 157 insertions, 151 deletions
diff --git a/contrib/qa/oe_audit.py b/contrib/oeaudit/freebsd.py
index bb7915b5f2..5e8c22ec0c 100755..100644
--- a/contrib/qa/oe_audit.py
+++ b/contrib/oeaudit/freebsd.py
@@ -1,33 +1,56 @@
-#!/usr/bin/env python
+"""
+Handle FreeBSD port audit files and map the names to OpenEmbedded
+"""
-import bb
-
-def read_available(filename):
+class freebsd_info:
"""
- Parses the output of bitbake -s
- minus the first few lines
+ Handles an entry like the one below:
+ vulnerability-test-port>=2000<2010.02.26|http://cvsweb.freebsd.org/ports/security/vulnerability-test-port/|Not vulnerable, just a test port (database: 2010-02-26)
"""
- f = open(filename)
- packages = {}
+ def __init__(self, name, versions, link, kind):
+ self.name = name
+ self.versions = versions
+ self.link = link
- for line in f:
- if line.startswith("NOTE: ") or line.startswith("Parsing .bb") or line.startswith("done."):
- continue
+ @classmethod
+ def split_versions(self, input):
+ """
+ Split versions by <, >, >=, >=
+ """
+ versions = []
+ last_pos = 0
- # str.split can not be used as we have multiple whitespace
- split = line.split(" ", 1)
- package = split[0]
- rest = split[1].strip()
+ # Try to determine <, >, >=, <=
+ # we will have to carry stuff on to find the
+ # version..
+ i = 0
+ while i < len(input) - 1:
+ c1 = input[i]
+ c2 = input[i+1]
+ if c1 != '<' and c1 != '>' and c1 != '=':
+ i = i + 1
+ continue
- # we might have a latest package...
- split = rest.split(" ", 1)
- if len(split) == 2:
- version = split[1].strip()
- else:
- version = split[0]
+ # is a '=' coming behind it?
+ next = i + 1
+ if c2 == '=':
+ next = next + 1
- packages[package] = version
- return packages
+ # submit
+ if last_pos != 0:
+ versions.append((next_type, input[last_pos:i]))
+
+ # remember stuff
+ next_type = input[i:next]
+ last_pos = next
+ i = next
+
+ assert last_pos != 0
+ versions.append((next_type, input[last_pos:len(input)]))
+ return versions
+
+ def __repr__(self):
+ return "%s: %s" % (self.name, self.versions)
def map_names(str):
@@ -117,56 +140,6 @@ def is_not_in_oe(name):
return name in not_in
-class freebsd_info:
- """
- Handles an entry like the one below:
- vulnerability-test-port>=2000<2010.02.26|http://cvsweb.freebsd.org/ports/security/vulnerability-test-port/|Not vulnerable, just a test port (database: 2010-02-26)
- """
- def __init__(self, name, versions, link, kind):
- self.name = name
- self.versions = versions
- self.link = link
-
- @classmethod
- def split_versions(self, input):
- """
- Split versions by <, >, >=, >=
- """
- versions = []
- last_pos = 0
-
- # Try to determine <, >, >=, <=
- # we will have to carry stuff on to find the
- # version..
- i = 0
- while i < len(input) - 1:
- c1 = input[i]
- c2 = input[i+1]
- if c1 != '<' and c1 != '>' and c1 != '=':
- i = i + 1
- continue
-
- # is a '=' coming behind it?
- next = i + 1
- if c2 == '=':
- next = next + 1
-
- # submit
- if last_pos != 0:
- versions.append((next_type, input[last_pos:i]))
-
- # remember stuff
- next_type = input[i:next]
- last_pos = next
- i = next
-
- assert last_pos != 0
- versions.append((next_type, input[last_pos:len(input)]))
- return versions
-
- def __repr__(self):
- return "%s: %s" % (self.name, self.versions)
-
def create_infos(line):
split = line.split("|")
for i in range(0, len(split[0])):
@@ -185,6 +158,7 @@ def create_infos(line):
kind = split[2]
return [freebsd_info(name, versions, link, kind)]
+
def read_auditfile(filename):
"""
Read an uncompressed audit file from freebsd
@@ -205,81 +179,3 @@ def read_auditfile(filename):
return packages
-def strip_oe_version(oe_version):
- """
- We need to strip the package epoch... and the PR to compare
- it to the FreeBSD versions. Also FreeBSD seems to use _N as
- PR so we might need to do more..
- """
- split = oe_version.split(':', 1)
- ver = split[1]
-
- split = ver.rsplit('-r', 1)
- ver = split[0]
- return ver
-
-def strip_bsd_version(bsd_version):
- """
- FreeBSD is adding ,1 for revisions.. remove that
- """
- # FIXME return a tuple with a revision...
- split = bsd_version.rsplit(',', 1)
- split = split[0]
- split = split.rsplit('_', 1)
- return split[0]
-
-def compare_versions(oe, freebsd, not_known):
- def handle_package(oe_name, bsd_name):
- if not oe_name in oe:
- if oe_name == bsd_name:
- print >> not_known, "%s is not in OE" % oe_name
- return
-
- oe_version = strip_oe_version(oe[oe_name])
- for ver in freebsd[bsd_name]:
- affected = True
- str = []
- for (cmp, vers) in ver.versions:
- bsd_ver = strip_bsd_version(vers)
- cmp_res = bb.utils.vercmp(('0', oe_version, 'r0'), ('0', bsd_ver, 'r0'))
- if cmp == '<':
- if cmp_res >= 0:
- affected = False
- pass
- elif cmp == '<=':
- if cmp_res > 0:
- affected = False
- pass
- elif cmp == '>':
- if cmp_res <= 0:
- affected = False
- pass
- elif cmp == '>=':
- if cmp_res < 0:
- affected = False
- pass
- elif cmp == '=':
- if cmp_res > 0:
- affected = False
- else:
- print cmp
- assert True
-
- str.append("%s %s %s %s" % (oe_name, oe_version, cmp, bsd_ver))
- if affected:
- print " && ".join(str), ver.link
-
- for package in freebsd.keys():
- # handle the various versions of OE packages
- handle_package(package, package)
- handle_package("%s-native" % package, package)
- handle_package("%s-full-native" % package, package)
- handle_package("%s-sdk" % package, package)
-
-
-# read the input data
-oe_packages = read_available("available")
-freebsd_vuln = read_auditfile("auditfile")
-buggy = open("not_in_oe.bugs", "w+")
-
-compare_versions(oe=oe_packages, freebsd=freebsd_vuln, not_known=buggy)
diff --git a/contrib/oeaudit/oe.py b/contrib/oeaudit/oe.py
new file mode 100644
index 0000000000..f3326a5338
--- /dev/null
+++ b/contrib/oeaudit/oe.py
@@ -0,0 +1,28 @@
+def read_available(filename):
+ """
+ Parses the output of bitbake -s
+ minus the first few lines
+ """
+ f = open(filename)
+ packages = {}
+
+ for line in f:
+ if line.startswith("NOTE: ") or line.startswith("Parsing .bb") or line.startswith("done."):
+ continue
+
+ # str.split can not be used as we have multiple whitespace
+ split = line.split(" ", 1)
+ package = split[0]
+ rest = split[1].strip()
+
+ # we might have a latest package...
+ split = rest.split(" ", 1)
+ if len(split) == 2:
+ version = split[1].strip()
+ else:
+ version = split[0]
+
+ packages[package] = version
+ return packages
+
+
diff --git a/contrib/oeaudit/oe_audit.py b/contrib/oeaudit/oe_audit.py
new file mode 100755
index 0000000000..6729edfa73
--- /dev/null
+++ b/contrib/oeaudit/oe_audit.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+
+import freebsd, oe, bb
+
+def strip_oe_version(oe_version):
+ """
+ We need to strip the package epoch... and the PR to compare
+ it to the FreeBSD versions. Also FreeBSD seems to use _N as
+ PR so we might need to do more..
+ """
+ split = oe_version.split(':', 1)
+ ver = split[1]
+
+ split = ver.rsplit('-r', 1)
+ ver = split[0]
+ return ver
+
+def strip_bsd_version(bsd_version):
+ """
+ FreeBSD is adding ,1 for revisions.. remove that
+ """
+ # FIXME return a tuple with a revision...
+ split = bsd_version.rsplit(',', 1)
+ split = split[0]
+ split = split.rsplit('_', 1)
+ return split[0]
+
+def compare_versions(oe, freebsd, not_known):
+ def handle_package(oe_name, bsd_name):
+ if not oe_name in oe:
+ if oe_name == bsd_name:
+ print >> not_known, "%s is not in OE" % oe_name
+ return
+
+ oe_version = strip_oe_version(oe[oe_name])
+ for ver in freebsd[bsd_name]:
+ affected = True
+ str = []
+ for (cmp, vers) in ver.versions:
+ bsd_ver = strip_bsd_version(vers)
+ cmp_res = bb.utils.vercmp(('0', oe_version, 'r0'), ('0', bsd_ver, 'r0'))
+ if cmp == '<':
+ if cmp_res >= 0:
+ affected = False
+ pass
+ elif cmp == '<=':
+ if cmp_res > 0:
+ affected = False
+ pass
+ elif cmp == '>':
+ if cmp_res <= 0:
+ affected = False
+ pass
+ elif cmp == '>=':
+ if cmp_res < 0:
+ affected = False
+ pass
+ elif cmp == '=':
+ if cmp_res > 0:
+ affected = False
+ else:
+ print cmp
+ assert True
+
+ str.append("%s %s %s %s" % (oe_name, oe_version, cmp, bsd_ver))
+ if affected:
+ print " && ".join(str), ver.link
+
+ for package in freebsd.keys():
+ # handle the various versions of OE packages
+ handle_package(package, package)
+ handle_package("%s-native" % package, package)
+ handle_package("%s-full-native" % package, package)
+ handle_package("%s-sdk" % package, package)
+
+
+# read the input data
+oe_packages = oe.read_available("available")
+freebsd_vuln = freebsd.read_auditfile("auditfile")
+buggy = open("not_in_oe.bugs", "w+")
+
+compare_versions(oe=oe_packages, freebsd=freebsd_vuln, not_known=buggy)