diff options
author | Florian Weimer <fw@deneb.enyo.de> | 2008-12-05 19:10:23 +0000 |
---|---|---|
committer | Florian Weimer <fw@deneb.enyo.de> | 2008-12-05 19:10:23 +0000 |
commit | 125d1a482329b8581d29fd943178a06e31b0bc2b (patch) | |
tree | 2cf8178cee0dac1e3dd1ce36efc7229249bf6320 /bin/show-debsecan | |
parent | 9455d0c2c873343c5649a11af88c93ebba17eaa0 (diff) |
bin/show-debsecan: new script to debug debsecan data
git-svn-id: svn+ssh://svn.debian.org/svn/secure-testing@10628 e39458fd-73e7-0310-bf30-c45bca0a0e42
Diffstat (limited to 'bin/show-debsecan')
-rw-r--r-- | bin/show-debsecan | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/bin/show-debsecan b/bin/show-debsecan new file mode 100644 index 0000000000..c801aabfd3 --- /dev/null +++ b/bin/show-debsecan @@ -0,0 +1,55 @@ +#!/usr/bin/python + +import sys +import apsw +import base64 +import zlib +from cStringIO import StringIO + +if len(sys.argv) not in (2, 3): + print "usage: show-debsecan DATABASE-PATH [BLOB-NAME]" + sys.exit(1) + +db = apsw.Connection(sys.argv[1]) +c = db.cursor() + +if len(sys.argv) == 2: + for (name,) in c.execute("SELECT name FROM debsecan_data ORDER BY name"): + print name +else: # len(sys.argv) == 3 + name = sys.argv[2] + for (data,) in c.execute("SELECT data FROM debsecan_data WHERE name = ?", + (name,)): + pass + data = base64.b64decode(data) + data = zlib.decompress(data) + + # The following has been taken from a debsecan test case. + data = StringIO(data) + + if data.readline() <> "VERSION 1\n": + sys.stderr.write("error: server sends data in unknown format\n") + sys.exit(1) + + vuln_names = [] + for line in data: + if line[-1:] == '\n': + line = line[:-1] + if line == '': + break + (name, flags, desc) = line.split(',', 2) + vuln_names.append(name) + + for line in data: + if line[-1:] == '\n': + line = line[:-1] + if line == '': + break + (package, vuln, rest) = line.split(',', 2) + vuln = vuln_names[int(vuln)] + print "%s,%s,%s" % (package, vuln, rest) + + for line in data: + print line, + +db.close() |