#!/usr/bin/python import os import os.path import string import sys def setup_paths(): check_file = 'lib/python/debian_support.py' path = os.getcwd() while 1: if os.path.exists("%s/%s" % (path, check_file)): sys.path = [path + '/lib/python'] + sys.path return path idx = string.rfind(path, '/') if idx == -1: raise ImportError, "could not setup paths" path = path[0:idx] root_path = setup_paths() import bugs import debian_support def do_parse(f): names = {} errors = False try: for r in f: n = r.name if n[0:4] in ('CAN', 'CVE'): n = n[4:] if names.has_key(n): if names[n] <> r.name: sys.stderr.write("error: duplicate CVE entry: %s and %s\n" % (names[n], r.name)) else: sys.stderr.write("error: duplicate CVE entry: %s\n" % r.name) errors = True names[n] = r.name except debian_support.ParseError, e: e.printOut(sys.stderr) errors = True if errors: sys.exit(1) def construct(c, name): if name == '-': f = sys.stdin name = '' else: f = file(name) return c(name, f) def parse_CVE(name): f = construct(bugs.CVEFile, name) # Relax syntax checking a bit. f.no_version_needs_note = False do_parse(f) def parse_DSA(name): do_parse(construct(bugs.DSAFile, name)) def parse_DTSA(name): do_parse(construct(bugs.DTSAFile, name)) file_types = {'CVE' : parse_CVE, 'DSA' : parse_DSA, 'DTSA' : parse_DTSA} if len(sys.argv) <> 3 or not file_types.has_key(sys.argv[1]): l = file_types.keys() l.sort() sys.stderr.write("usage: check-syntax {%s} file-name\n" % '|'.join(l)) sys.exit(1) file_types[sys.argv[1]](sys.argv[2])