aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/oeaudit/freebsd.py
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/oeaudit/freebsd.py')
-rw-r--r--contrib/oeaudit/freebsd.py194
1 files changed, 194 insertions, 0 deletions
diff --git a/contrib/oeaudit/freebsd.py b/contrib/oeaudit/freebsd.py
new file mode 100644
index 0000000000..5765e8a726
--- /dev/null
+++ b/contrib/oeaudit/freebsd.py
@@ -0,0 +1,194 @@
+"""
+Handle FreeBSD port audit files and map the names to OpenEmbedded
+"""
+
+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 map_names(str):
+ """Map a FreeBSD name to OE"""
+ maps = {
+ "libpurple" : "pidgin",
+ "php4" : "php",
+ "php5" : "php",
+ "expat2" : "expat",
+ "freeciv-gtk" : "freeciv",
+ "pcre" : "libpcre",
+ "vim-gnome" : "vim",
+ "python23" : "python",
+ "python24" : "python",
+ "python25" : "python",
+ "python+ipv6" : "python",
+ "wget-devel" : "wget",
+ "xchat2" : "xchat",
+ "freetype" : "freetype",
+ "qemu-devel" : "qemu",
+ "krb5-beta" : "krb5",
+ "freeciv-gtk2": "freeciv",
+ "gtk" : "gtk+",
+ "wget+ipv6" : "wget",
+ "ja-gd" : "gd",
+ "openvpn-devel" : "openvpn",
+ "mpeg123-esound" : "mpeg123",
+ "mpeg123-nas" : "mpeg123",
+ "cdrtools-cjk" : "cdrtools",
+ "apache+mod_ssl+mod_deflate" : "apache2",
+ "apache+mod_ssl*" : "apache2",
+ "vim-gtk2" : "vim",
+ "zh-emacs" : "emacs",
+ "{ja-,}bugzilla" : "bugzilla",
+ "zh-tin" : "tin",
+ "mozilla+ipv6": "mozilla",
+ "mozilla-embeddded" : "mozilla",
+ "rar" : "unrar",
+ "libsndfile" : "libsndfile1",
+ "sylpheed-gtk2": "sylpheed",
+ "cdrtools-devel": "cdrtools",
+ "pine4-ssl": "pine",
+ "apache" : "apache2",
+ "ghostscript-gpl" : "gs",
+ "ghostscript-gnu-nox11" : "gs",
+ "ghostscript8" : "gs",
+ "ghostscript-afpl-nox11" : "gs",
+ "ghostscript-afpl" : "gs",
+ "isc-dhcp" : "dhcp",
+ "mplayer-gtk" : "mplayer",
+ "xerces-c2" : "xerces-c",
+ "libxml" : "libxml2",
+ "vim+ruby" : "vim",
+ "mplayer{,-gtk}{,-esound}" : "mplayer",
+ "proftpd-devel": "proftpd",
+ "neon28" : "neon",
+ "php4-dba" : "php",
+ "php5-{cgi,cli}" : "php",
+
+ }
+
+ try:
+ return maps[str]
+ except:
+ return str
+
+def is_not_in_oe(name):
+ """Method to reject packages not in OE"""
+ not_in = [
+ # packages that we will never have...
+ "linux-firefox", "fr-linux-netscape", "linux-netscape-{communicator,navigator}",
+ "linux_base", "ja-netscape7", "{ja,ko}-netscape-{communicator,navigator}-linux", "zhTW-linux-mozillafirebird", "ja-linux-mozillafirebird-gtk1", "el-linux-mozillafirebird", "mozilla-firebird", "netscape7",
+ "acroread4", "acroread7", "acroread5",
+ "linux-openmotif", "linux-flock", "linux-jdk", "linux-curl", "linux-png", "linux-firefox-devel",
+
+ # packages that we don't have now but maybe will have in
+ # the future and blacklisting them here might be a problem
+ "openoffice.org-2-devel", "openoffice.org-2", "it-openoffice", "ca-openoffice","sl-openoffice-SI", "ja-openoffice",
+ "drupal4", "drupal5", "drupal6", "drupal-pubcookie",
+ "gpdf",
+ "nagios",
+ "kdenetwork", "ja-kdelibs", "kdegraphics", "kdepim", "kdebase4-runtime",
+ "xemacs-devel", "xemacs-devel-21.5", "xemacs-mule", "zh-xemacs", "zh-xemacs-mule",
+ "geeklog", "apach13-ssl", "nvidia-driver", "eGroupWare", "varnish", "heimdal",
+ "bugzilla", "agenda-snow-libs", "mozilla",
+ ]
+
+ return name in not_in
+
+def create_infos(line):
+ split = line.split("|")
+ for i in range(0, len(split[0])):
+ c = split[0][i]
+ if c != '<' and c != '=' and c != '>':
+ continue
+ name = map_names(split[0][0:i])
+ versions = freebsd_info.split_versions(split[0][i:])
+ break
+
+ if is_not_in_oe(name):
+ #print "Not in oe %s" % name
+ return []
+
+ link = split[1]
+ kind = split[2]
+ return [freebsd_info(name, versions, link, kind)]
+
+
+def read_auditfile(filename):
+ """
+ Read an uncompressed audit file from freebsd
+ """
+ f = open(filename)
+ packages = {}
+ for line in f:
+ if line.startswith("#"):
+ continue
+
+ infos = create_infos(line)
+ for info in infos:
+ try:
+ packages[info.name].append(info)
+ except:
+ packages[info.name] = []
+ packages[info.name].append(info)
+ return packages
+
+
+def prepare_version(bsd_version):
+ """
+ FreeBSD is adding ,1 for revisions.. remove that
+ """
+ # FIXME return a tuple with a revision...
+ rev = "r0"
+ split = bsd_version.rsplit(',', 1)
+ split = split[0]
+ split = split.rsplit('_', 1)
+ if len(split) == 2:
+ rev = "r%s" % split[1]
+ return (split[0], rev)
+