Esempio n. 1
0
        print "no command"
        return

    # otevreni vstupniho souboru
    # a nacteni dat (pravidel pro injection)
    inputData = ""
    try:
        inputFile = file(inputFilename, 'r')
    except IOError:
        print "File does not exist."
        return
    inputData = inputFile.read()
    inputFile.close()

    # extrakce systemovych volani a jejich navratovych hodnot
    extractor = SyscallExtractor()
    try:
        syscallsAndErrors = extractor.extract("syscalls")
    except:
        print "Error during syscalls search"
        return

    # lexikalni a syntakticka analyza vstupniho soboru s pravidly
    scanner = InputScanner(syscallsAndErrors)
    injectValues = scanner.scan(inputData)
    if injectValues == None:
        print "Bad format of input file"
        return

    # vygeneruje soubor pro systemtap
    generator = GenerateStap()
Esempio n. 2
0
    def __init__(self):

        self.injectBasicFilename = "injectBasic.stp"
        self.injectAdvancedFilename = "injectAdvanced.stp"

        self.injector = None
        self.controller = None

        self.builder = gtk.Builder()
        self.builder.add_from_file("fault_injection.glade")
        # signaly z glade souboru
        self.builder.connect_signals({
            "exitApp": gtk.main_quit,
            "browseButtonClicked": self.browseClicked,
            "nofileRadio": self.nofileRadioClicked,
            "eacessRadio": self.eacessRadioClicked,
            "enoentRadio": self.enoentRadioClicked,
            "emfileRadio": self.emfileRadioClicked,
            "ewouldblockRadio": self.ewouldblockRadioClicked,
            "eexistRadio": self.eexistRadioClicked,
            "nonetRadio": self.nonetRadioClicked,
            "enetunreachRadio": self.enetunreachRadioClicked,
            "etimedoutRadio": self.etimedoutRadioClicked,
            "econnrefusedRadio": self.econnrefusedRadioClicked,
            "econnresetRadio": self.econnresetRadioClicked,
            "emsgsizeRadio": self.emsgsizeRadioClicked,
            "eisconnRadio": self.eisconnRadioClicked,
            "enotconnRadio": self.enotconnRadioClicked,
            "startButtonClicked": self.startButtonClicked,
            "termButtonClicked": self.termButtonClicked,
            "eaccesProcessRadio": self.eaccesProcessRadioClicked,
            "enoentProcessRadio": self.enoentProcessRadioClicked,
            "enoexecRadio": self.enoexecRadioClicked,
            "enomemProcessRadio": self.enomemProcessRadioClicked,
            "elibbadRadio": self.elibbadRadioClicked,
            "etxtbsyRadio": self.etxtbsyRadioClicked,
            "noprocessRadio": self.noprocessRadioClicked,
            "addFaultButton": self.addFaultButtonClicked,
            "removeButtonClicked": self.removeButtonClicked,
            "modeBasicToggled": self.modeBasicToggled,
            "modeAdvancedToggled": self.modeAdvancedToggled,
            "saveAs": self.saveAs,
            "save": self.save,
            "open": self.openFile,
            "mainDeleteEvent": self.mainDeleteEvent,
            "noMemoryRadio": self.noMemoryRadioClicked,
            "memoryEnomemRadio": self.memoryEnomemRadioClicked,
            "memoryEaccesRadio": self.memoryEaccesRadioClicked,
            "memoryEagainRadio": self.memoryEagainRadioClicked,
            "noRwRadio": self.noRwRadioClicked,
            "rwEbadfRadio": self.rwEbadfRadioClicked,
            "rwEioRadio": self.rwEioRadioClicked,
            "rwEfbigRadio": self.rwEfbigRadioClicked,
            "rwEnospcRadio": self.rwEnospcRadioClicked,
            "fileENOTDIRRadio": self.fileENOTDIRRadioClicked,
            "fileEBUSYRadio": self.fileEBUSYRadioClicked,
            "fileENOTEMPTYRadio": self.fileENOTEMPTYRadioClicked,
            "fileEMLINKRadio": self.fileEMLINKRadioClicked,
            "runAbout": self.runAbout,
            "textViewAllocate": self.scrollDown
        })

        button = self.builder.get_object("termButton")
        button.set_sensitive(False)
        self.window = self.builder.get_object("mainWindow")
        self.window.show()

        # Tabulka pro chyby v pokrocilem rezimu
        self.faultView = self.builder.get_object("faultView")
        self.faultList = gtk.ListStore(
            gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING,
            gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING,
            gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_BOOLEAN)
        self.faultView.set_model(self.faultList)
        column = gtk.TreeViewColumn("Syscall", gtk.CellRendererText(), text=0)
        column.set_resizable(True)
        self.faultView.append_column(column)
        column = gtk.TreeViewColumn("arg1", gtk.CellRendererText(), text=1)
        column.set_resizable(True)
        self.faultView.append_column(column)
        column = gtk.TreeViewColumn("arg2", gtk.CellRendererText(), text=2)
        column.set_resizable(True)
        self.faultView.append_column(column)
        column = gtk.TreeViewColumn("arg3", gtk.CellRendererText(), text=3)
        column.set_resizable(True)
        self.faultView.append_column(column)
        column = gtk.TreeViewColumn("arg4", gtk.CellRendererText(), text=4)
        column.set_resizable(True)
        self.faultView.append_column(column)
        column = gtk.TreeViewColumn("arg5", gtk.CellRendererText(), text=5)
        column.set_resizable(True)
        self.faultView.append_column(column)
        column = gtk.TreeViewColumn("arg6", gtk.CellRendererText(), text=6)
        column.set_resizable(True)
        self.faultView.append_column(column)
        column = gtk.TreeViewColumn("Error", gtk.CellRendererText(), text=7)
        column.set_resizable(True)
        self.faultView.append_column(column)
        cell = gtk.CellRendererToggle()
        cell.set_radio(True)
        cell.connect("toggled", self.faultToggled, self.faultList)
        column = gtk.TreeViewColumn("Enable", cell, active=8)
        column.set_clickable(True)
        column.set_resizable(True)
        column.set_alignment(0.5)
        self.faultView.append_column(column)

        # extrakce systemovych volani a jejich navratovych hodnot
        extractor = SyscallExtractor()
        self.syscallsAndErrors = extractor.extract("syscalls")

        # asociativni pole pro povolene chyby od zacatku testovani
        # v zakladnim rezimu
        self.enableFault = {}
        self.enableFault["file"] = "NOFAULT"
        self.enableFault["net"] = "NOFAULT"
        self.enableFault["process"] = "NOFAULT"
        self.enableFault["memory"] = "NOFAULT"
        self.enableFault["rw"] = "NOFAULT"

        # datove typy pro chyby v pokrocilem rezimu
        self.faults = {}
        self.existedFaults = []
        self.faultsStartValue = {}
        self.faultsEdited = False
        self.saveItem = self.builder.get_object("saveItem")
        self.saveAsItem = self.builder.get_object("saveAsItem")
        self.openItem = self.builder.get_object("openItem")
        self.saveItem.set_sensitive(False)
        self.saveAsItem.set_sensitive(False)
        self.openItem.set_sensitive(False)
        self.fileName = None

        # log pro aktualni chyby
        self.logText = ""
        self.textBuffer = self.builder.get_object("textBuffer")
        self.logView = self.builder.get_object("textViewLog")

        # jmeno systemtapoveho modulu v procfs
        self.moduleName = ""

        # jmeno aplikace a jeji argumenty
        self.appEntry = self.builder.get_object("appEntry")
        self.paramEntry = self.builder.get_object("paramEntry")

        # normalni nebo pokracile vkladani
        self.modeBasic = True
        frame = self.builder.get_object("frame2")
        frame.set_visible(False)

        # vkladane chyby do zakladniho modu
        self.basicError = {}
        self.basicError["file"] = {
            "open": ["EACCES", "ENOENT", "EMFILE", "EEXIST"],
            "creat": ["EACCES", "ENOENT", "EMFILE", "EEXIST"],
            "mkdir": ["EACCES", "ENOENT", "ENOTDIR", "EEXIST"],
            "mkdirat": ["EACCES", "ENOENT", "ENOTDIR", "EEXIST"],
            "chmod": ["EACCES", "ENOENT", "ENOTDIR"],
            "chmodat": ["EACCES", "ENOENT", "ENOTDIR"],
            "chown": ["EACCES", "ENOENT", "ENOTDIR"],
            "fchown": ["EACCES", "ENOENT", "ENOTDIR"],
            "lchown": ["EACCES", "ENOENT", "ENOTDIR"],
            "rmdir": ["EACCES", "ENOENT", "ENOTDIR", "EBUSY", "ENOTEMPTY"],
            "link": ["EACCES", "ENOENT", "ENOTDIR", "EEXIST", "EMLINK"],
            "linkat": ["EACCES", "ENOENT", "ENOTDIR", "EEXIST", "EMLINK"]
        }
        self.basicError["net"] = {
            "connect": ["ENETUNREACH", "ETIMEDOUT", "ECONNREFUSED", "EISCONN"],
            "send": ["ECONNRESET", "EMSGSIZE", "EISCONN", "ENOTCONN"],
            "sendto": ["ECONNRESET", "EMSGSIZE", "EISCONN", "ENOTCONN"],
            "sendmsg": ["ECONNRESET", "EMSGSIZE", "EISCONN", "ENOTCONN"],
            "recv": ["ECONNREFUSED", "ENOTCONN"],
            "recvfrom": ["ECONNREFUSED", "ENOTCONN"],
            "recvmsg": ["ECONNREFUSED", "ENOTCONN"]
        }
        self.basicError["process"] = {
            "execve":
            ["EACCES", "ENOENT", "ENOEXEC", "ENOMEM", "ELIBBAD", "ETXTBSY"],
            "fork": ["ENOMEM"]
        }
        self.basicError["memory"] = {
            "mmap2": ["ENOMEM", "EACCES", "EAGAIN"],
            "munmap": ["ENOMEM", "EACCES", "EAGAIN"],
            "mremap": ["EAGAIN"],
            "mprotect": ["EACCES", "EAGAIN"],
            "brk": ["EAGAIN"]
        }
        self.basicError["rw"] = {
            "write": ["EBADF", "EIO", "EFBIG", "ENOSPC"],
            "read": ["EBADF", "EIO"]
        }

        # chybejici volani v zakladnim rezim
        self.missingSyscall = []

        # zkontroluje, ktere volani v zakldnim rezimu nelze pouzit
        self.checkError()

        # stav aplikace
        self.progress = self.builder.get_object("progressbar")
        self.imageYes = self.builder.get_object("imageYes")
        self.imageYes.set_visible(False)
        self.imageNo = self.builder.get_object("imageNo")
        self.labelStatus = self.builder.get_object("labelStatus")