示例#1
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")
示例#2
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()
示例#3
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")