#!/usr/bin/python3 -u import sys import os import locale import gettext import hashlib import re GETTEXT_PROGNAME = "abrt" _ = gettext.gettext tags = [ "WARNING:", "[ER]IP[^:]", " \\[<[a-f0-9]{8,16}>\\]" ] checks = [ ("i915", "xorg-x11-drv-intel"), ("nouveau", "xorg-x11-drv-nouveau"), ("radeon", "xorg-x11-drv-ati"), ("qxl", "xorg-x11-drv-qxl"), ] def check_tag(line): for tag in tags: if re.match(tag, line) is not None: for (mod, component) in checks: if re.search(mod, line) is not None: return component return None def get_new_component(filename): try: f = open(filename, "r") except IOError as e: return None for line in f: c = check_tag(line) if c is not None: f.close() return c f.close() return None def open_or_die(filename, mode): try: f = open(filename, mode) except IOError as e: sys.stderr.write(str(e) + "\n") sys.exit(1) return f if __name__ == "__main__": try: locale.setlocale(locale.LC_ALL, "") except locale.Error: os.environ['LC_ALL'] = 'C' locale.setlocale(locale.LC_ALL, "") # Defeat "AttributeError: 'module' object has no attribute 'nl_langinfo'" try: gettext.bind_textdomain_codeset(GETTEXT_PROGNAME, locale.nl_langinfo(locale.CODESET)) except AttributeError: pass gettext.bindtextdomain(GETTEXT_PROGNAME, '/usr/share/locale') gettext.textdomain(GETTEXT_PROGNAME) # # Certain drivers are in the kernel but need to be tracked separtely # in other components. This fixes those components. # new_component = get_new_component("backtrace") if new_component is None: sys.exit(0) print("Oops looks like a problem in kernel module, new component {0}" .format(new_component)) f = open_or_die("component", "w") f.write(new_component) f.close() # keep kernel maint in the loop even if the component gets changed f = open_or_die("extra-cc", "w") f.write("kernel-maint@redhat.com") f.close()