diff options
Diffstat (limited to 'contrib/oeaudit/oe_audit.py')
-rwxr-xr-x | contrib/oeaudit/oe_audit.py | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/contrib/oeaudit/oe_audit.py b/contrib/oeaudit/oe_audit.py new file mode 100755 index 0000000000..018547a04e --- /dev/null +++ b/contrib/oeaudit/oe_audit.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python + +import freebsd, oe + +try: + import bb +except Exception, e: + import sys + sys.stderr.write("Set PYTHONPATH to bitbake/lib and restart.\n") + sys.stderr.write("The backtrace can be seen below.\n") + raise e + + +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 compare_versions(oe, freebsd_dict, 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_dict[bsd_name]: + affected = True + str = [] + for (cmp, vers) in ver.versions: + (bsd_ver, bsd_pr) = freebsd.prepare_version(vers) + cmp_res = bb.utils.vercmp(('0', oe_version, 'r0'), ('0', bsd_ver, bsd_pr)) + 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_dict.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) + +def handle_options(args): + import optparse + parser = optparse.OptionParser(version = "OE Audit version 0.1", + usage = "%prog [options]") + parser.add_option("-a", "--auditfile", help = "FreeBSD auditfile to use", + action = "store", dest = "freebsd_auditfile", default = None) + parser.add_option("-p", "--available", help = "Output of bitbake -s", + action = "store", dest = "oe_available", default = None) + parser.add_option("-b", "--buggy", help = "Write out unmaped packets", + action = "store", dest = "buggy", default = "not_in_oe.bugs") + + options, args = parser.parse_args(args) + return options + +# read the input data +import sys +opts = handle_options(sys.argv) +oe_packages = oe.read_available(opts.oe_available) +freebsd_vuln = freebsd.read_auditfile(opts.freebsd_auditfile) +buggy = open(opts.buggy, "w+") + +compare_versions(oe=oe_packages, freebsd_dict=freebsd_vuln, not_known=buggy) |