diff options
author | 2011-07-23 14:03:24 +0000 | |
---|---|---|
committer | 2011-07-23 14:03:24 +0000 | |
commit | 1b6585e90c962ce1a89d8544e9ece356e418262b (patch) | |
tree | 6861b2fe2108ea99a4ec47798a6f4a2e59ae4096 /src | |
parent | more work on pre-dependency analisys (diff) | |
download | autodep-1b6585e90c962ce1a89d8544e9ece356e418262b.tar.gz autodep-1b6585e90c962ce1a89d8544e9ece356e418262b.tar.bz2 autodep-1b6585e90c962ce1a89d8544e9ece356e418262b.zip |
many changes. See the log
Diffstat (limited to 'src')
20 files changed, 316 insertions, 101 deletions
diff --git a/src/autodep/helpers/__init__.py b/src/autodep/helpers/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/autodep/helpers/__init__.py diff --git a/src/autodep/helpers/__init__.pyc b/src/autodep/helpers/__init__.pyc Binary files differnew file mode 100644 index 0000000..1bbf93f --- /dev/null +++ b/src/autodep/helpers/__init__.pyc diff --git a/src/autodep/helpers/colorize_output.py b/src/autodep/helpers/colorize_output.py new file mode 100644 index 0000000..fb4c9c4 --- /dev/null +++ b/src/autodep/helpers/colorize_output.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python + +# color output support +class color_printer: +# HEADER = '\033[95m' +# OKBLUE = '\033[94m' +# OKGREEN = '\033[92m' +# FAIL = '\033[91m' + + def __init__(self, enable_colors=True): + if enable_colors: + self.COLOR2CODE={"warning":'\033[91m', "text":'\033[90m'} + self.ENDCOLOR='\033[0m' + else: + self.COLOR2CODE={"warning":'', "text":''} + self.ENDCOLOR='' + def printmsg(self,importance,msg): + print self.COLOR2CODE[importance] + str(msg) + self.ENDCOLOR, diff --git a/src/autodep/helpers/colorize_output.pyc b/src/autodep/helpers/colorize_output.pyc Binary files differnew file mode 100644 index 0000000..b42f854 --- /dev/null +++ b/src/autodep/helpers/colorize_output.pyc diff --git a/src/autodep/helpers/events_analysis.py b/src/autodep/helpers/events_analysis.py new file mode 100644 index 0000000..e4cb342 --- /dev/null +++ b/src/autodep/helpers/events_analysis.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python + +# some heuristics here to cut few packets +def is_package_useful(pkg,stages,files): + # test 1: package is not useful if all files are *.desktop or *.xml or *.m4 + for f in files: + if not (f.endswith(".desktop") or f.endswith(".xml") or f.endswith(".m4")): + break + else: + return False + + return True + +
\ No newline at end of file diff --git a/src/autodep/helpers/events_analysis.pyc b/src/autodep/helpers/events_analysis.pyc Binary files differnew file mode 100644 index 0000000..aa72ec0 --- /dev/null +++ b/src/autodep/helpers/events_analysis.pyc diff --git a/src/autodep/logfs/logger_fusefs.py b/src/autodep/logfs/logger_fusefs.py index 7965d45..10e23dc 100644 --- a/src/autodep/logfs/logger_fusefs.py +++ b/src/autodep/logfs/logger_fusefs.py @@ -6,8 +6,6 @@ import os import sys import signal - - class logger: socketname='' readytolaunch=False diff --git a/src/autodep/runtests.py b/src/autodep/runtests.py index 4605cfb..201a4ad 100644..100755 --- a/src/autodep/runtests.py +++ b/src/autodep/runtests.py @@ -1,8 +1,7 @@ #!/usr/bin/env python2 -#import test.test_fstracer - import unittest -import test.all_tests -testSuite = test.all_tests.create_test_suite() +from tests import all_tests + +testSuite = all_tests.create_test_suite() text_runner = unittest.TextTestRunner().run(testSuite)
\ No newline at end of file diff --git a/src/autodep/showfsevents.py b/src/autodep/showfsevents.py index 960d038..1d7834f 100755 --- a/src/autodep/showfsevents.py +++ b/src/autodep/showfsevents.py @@ -7,12 +7,40 @@ import sys import time import logfs.fstracer -import package_utils.portage_utils -import package_utils.portage_misc_functions -import package_utils.portage_log_parser - -portage_api=package_utils.portage_misc_functions.portage_api() -portage_api=package_utils.portage_misc_functions.portage_api() +from helpers import colorize_output, events_analysis +from package_utils import portage_utils, portage_misc_functions, portage_log_parser + +# dies if bad args +def parse_args(): + args_parser=optparse.OptionParser("%prog [options] <command>") + args_parser.add_option("-b", "--block",action="store", type="string", + dest="packages", default="", + help="block an access to files from this packages") + args_parser.add_option("-f","--files", action="store_true", dest="show_files", + default=False, help="show accessed files and not founded files") + args_parser.add_option("-v","--verbose", action="store_true", dest="verbose", + default=False, help="show non-important packages, " + "show unknown package and unknown stage") + args_parser.add_option("-C","--nocolor",action="store_true", dest="nocolor", + default=False, help="don't output color") + + args_parser.add_option("--hooklib",action="store_const", dest="approach", + const="hooklib", help="use ld_preload logging approach(default)") + args_parser.add_option("--fusefs",action="store_const", dest="approach", + const="fusefs", help="use fuse logging approach(slow, but reliable)") + args_parser.set_defaults(approach="hooklib") + + args_parser.epilog="Example: %s -b lsof,cowsay emerge bash" % (os.path.basename(sys.argv[0])) + args_parser.disable_interspersed_args() + (options, args) = args_parser.parse_args() + if len(args)==0: + args_parser.print_help() + exit(1) + + return options,args + +portage_api=portage_misc_functions.portage_api() +system_packages = portage_api.get_system_packages_list() runtime_vars={} # This is here mainly for grouping. We are trying to # get as much data about an environment as possible @@ -21,40 +49,11 @@ runtime_vars["starttime"]=int(time.time()) #quit(1) +options,args=parse_args() -#system_packages = deps_finder.get_system_packages_list() -#print "sys-libs/glibc-2.13-r2" in system_packages -#print deps_finder.get_deps('bash') -#print(runtime_vars["starttime"]) -#quit(1) +color_printer=colorize_output.color_printer(not options.nocolor) -args_parser=optparse.OptionParser("%prog [options] <command>") -args_parser.add_option("-b", "--block",action="store", type="string", - dest="packages", default="", help="block an access to files from this packages") -args_parser.add_option("-f","--files", action="store_true", dest="show_files", - default=False, help="show accessed files and not founded files") -args_parser.add_option("-v","--verbose", action="store_true", dest="verbose", - default=False, help="show non-important packages, " - "show unknown package and unknown stage") -args_parser.add_option("-C","--nocolor",action="store_true", dest="nocolor", - default=False, help="don't output color") - -args_parser.add_option("--hooklib",action="store_const", dest="approach", - const="hooklib", help="use ld_preload logging approach(default)") -args_parser.add_option("--fusefs",action="store_const", dest="approach", - const="fusefs", help="use fuse logging approach(slow, but reliable)") -args_parser.set_defaults(approach="hooklib") - -args_parser.epilog="Example: %s -b lsof,cowsay emerge bash" % (os.path.basename(sys.argv[0])) -args_parser.disable_interspersed_args() -(options, args) = args_parser.parse_args() -#print options -#print args - -if len(args)==0: - args_parser.print_help() - exit(1) if args[0]=="emerge": runtime_vars["is_emerge"]=True @@ -73,7 +72,7 @@ if options.packages: packages=options.packages.split(",") files_to_block=[] for package in packages: - files_in_package=package_utils.portage_utils.getfilesbypackage(package) + files_in_package=portage_utils.getfilesbypackage(package) if len(files_in_package)==0: print "Bad package name: %s. Exiting" % package exit(1) @@ -84,14 +83,15 @@ if options.packages: return not filename in files_to_block filter_function=filter +# launching program events=logfs.fstracer.getfsevents(args[0], args,approach=options.approach,filterproc=filter_function) -print "Program finished, analyzing dependencies" runtime_vars["endtime"]=int(time.time()) +print "Program finished, analyzing dependencies" if runtime_vars["is_emerge"]: # try to get information about packages merged sucessfully try: - pkgs=package_utils.portage_log_parser.get_list_of_merged_packages( + pkgs=portage_log_parser.get_list_of_merged_packages( runtime_vars["starttime"],runtime_vars["endtime"] ) if len(pkgs) > 1: @@ -103,28 +103,23 @@ if runtime_vars["is_emerge"]: runtime_vars["deps_buildtime"]+=portage_api.get_deps(pkg,["DEPEND"]) runtime_vars["deps_all"]+=portage_api.get_deps(pkg,["DEPEND","RDEPEND"]) - print runtime_vars["deps_buildtime"] - print runtime_vars["deps_all"] + #print runtime_vars["deps_buildtime"] + #print runtime_vars["deps_all"] except: print "Non-critical error while parsing logfile of emerge" runtime_vars["is_emerge"]=False # shutting down all emerge handling logic pass # get unique filenames -filenames={} +filenames=set() for stage in events: - succ_events=events[stage][0] - fail_events=events[stage][1] - for filename in succ_events: - filenames[filename]=None - for filename in fail_events: - filenames[filename]=None -filenames=filenames.keys(); + succ_events=set(events[stage][0]) + fail_events=set(events[stage][1]) + filenames=filenames.union(succ_events) + filenames=filenames.union(fail_events) +filenames=list(filenames) -# temporary disabled -file_to_package=package_utils.portage_utils.getpackagesbyfiles(filenames) -#file_to_package={} -#print events +file_to_package=portage_utils.getpackagesbyfiles(filenames) # This part is completly unreadable. # It converting one complex struct(returned by getfsevents) to another complex @@ -177,8 +172,6 @@ for stage in sorted(events): stagesorder={"clean":1,"setup":2,"unpack":3,"prepare":4,"configure":5,"compile":6,"test":7, "install":8,"preinst":9,"postinst":10,"prerm":11,"postrm":12,"unknown":13} -deps_finder=package_utils.portage_misc_functions.portage_api() -system_packages = deps_finder.get_system_packages_list() # print information grouped by package for package in sorted(packagesinfo): @@ -201,21 +194,28 @@ for package in sorted(packagesinfo): stages.append(stage) if len(stages)!=0: - - print "%s %-40s: %s"%(is_attention_pkg,package,stages) + filenames={} + for stage in stages: + for filename in packagesinfo[package][stage]: + if len(packagesinfo[package][stage][filename]["found"])!=0: + was_readed,was_writed=packagesinfo[package][stage][filename]["found"] + if not filename in filenames: + filenames[filename]=[was_readed,was_writed] + else: + old_was_readed, old_was_writed=filenames[filename] + filenames[filename]=[old_was_readed | was_readed, old_was_writed | was_writed ] + + if not is_attention_pkg: + color_printer.printmsg("text","[OK]") + elif not events_analysis.is_package_useful(package,stages,filenames.keys()): + color_printer.printmsg("text","[LIKELY OK]") + else: + color_printer.printmsg("warning","[NOT IN DEPS]") # show information about accessed files - if options.show_files: - filenames={} - for stage in stages: - for filename in packagesinfo[package][stage]: - if len(packagesinfo[package][stage][filename]["found"])!=0: - was_readed,was_writed=packagesinfo[package][stage][filename]["found"] - if not filename in filenames: - filenames[filename]=[was_readed,was_writed] - else: - old_was_readed, old_was_writed=filenames[filename] - filenames[filename]=[old_was_readed | was_readed, old_was_writed | was_writed ] + print "%-40s: %s"%(package,stages) + + if options.show_files: # this is here for readability action={ (False,False):"accessed", diff --git a/src/autodep/test/1_access/Makefile b/src/autodep/tests/1_access/Makefile index b3ea345..b3ea345 100644 --- a/src/autodep/test/1_access/Makefile +++ b/src/autodep/tests/1_access/Makefile diff --git a/src/autodep/test/1_access/accesser.c b/src/autodep/tests/1_access/accesser.c index cdfe520..cdfe520 100644 --- a/src/autodep/test/1_access/accesser.c +++ b/src/autodep/tests/1_access/accesser.c diff --git a/src/autodep/tests/__init__.py b/src/autodep/tests/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/autodep/tests/__init__.py diff --git a/src/autodep/test/all_tests.py b/src/autodep/tests/all_tests.py index 9095742..3542ca8 100644 --- a/src/autodep/test/all_tests.py +++ b/src/autodep/tests/all_tests.py @@ -1,9 +1,12 @@ import glob import unittest +# change it if you don't want get all tests runned +testsglob='tests/test_*.py' + def create_test_suite(): - test_file_strings = glob.glob('test/test_fusefs.py') - module_strings = ['test.'+str[5:len(str)-3] for str in test_file_strings] + test_file_strings = glob.glob(testsglob) + module_strings = ['tests.'+str[6:len(str)-3] for str in test_file_strings] suites = [unittest.defaultTestLoader.loadTestsFromName(name) \ for name in module_strings] testSuite = unittest.TestSuite(suites) diff --git a/src/autodep/tests/alltests.py b/src/autodep/tests/alltests.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/autodep/tests/alltests.py diff --git a/src/autodep/tests/helpers/Makefile b/src/autodep/tests/helpers/Makefile new file mode 100644 index 0000000..5ce6d6b --- /dev/null +++ b/src/autodep/tests/helpers/Makefile @@ -0,0 +1,6 @@ +exec: exec.c + +all: exec + +clean: + rm -f exec diff --git a/src/autodep/tests/helpers/exec.c b/src/autodep/tests/helpers/exec.c new file mode 100644 index 0000000..237a6e2 --- /dev/null +++ b/src/autodep/tests/helpers/exec.c @@ -0,0 +1,126 @@ +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <string.h> +#include <errno.h> +#include <bits/stat.h> +#include <sys/socket.h> +#include <sys/un.h> +#include <stdlib.h> +#include <unistd.h> + + + +int main() { + + // test one: execve + if(fork()==0) { + char *argv[]={"/bin/cat","/f1",NULL}; + char *env[]={"TEST=TEST",NULL}; + execve("/bin/cat",argv,env); + exit(1); + } else wait(NULL); + + // test two: execve with env changing + if(fork()==0) { + char *argv[]={"/bin/cat","/f2",NULL}; + char *env[]={"LD_PRELOAD=BADVALUE",NULL}; + execve("/bin/cat",argv,env); + exit(1); + } else wait(NULL); + + // test three: execve without env + if(fork()==0) { + char *argv[]={"/bin/cat","/f3",NULL}; + char *env[]={NULL}; + execve("/bin/cat",argv,env); + exit(1); + } else wait(NULL); + + // test four: execv + if(fork()==0) { + char *argv[]={"/bin/cat","/f4",NULL}; + execv("/bin/cat",argv); + exit(1); + } else wait(NULL); + + // test five: execv with env changing + if(fork()==0) { + setenv("LD_PRELOAD","BADVALUE",1); + char *argv[]={"/bin/cat","/f5",NULL}; + execv("/bin/cat",argv); + exit(1); + } else wait(NULL); + + // test six: execv with env changing(putenv) + if(fork()==0) { + putenv("LD_PRELOAD=BADVALUE"); + char *argv[]={"/bin/cat","/f6",NULL}; + execv("/bin/cat",argv); + exit(1); + } else wait(NULL); + + // test seven: execvp with env changing(putenv) + if(fork()==0) { + putenv("LD_PRELOAD=BADVALUE"); + char *argv[]={"/bin/cat","/f7",NULL}; + execvp("/bin/cat",argv); + exit(1); + } else wait(NULL); + + // test eight: execvp with env changing(putenv) + if(fork()==0) { + //putenv("LD_PRELOAD=BADVALUE"); + char *env[]={"LD_PRELOAD=BADVALUE",NULL}; + char *argv[]={"/bin/cat","/f8",NULL}; + execvpe("/bin/cat",argv,env); + exit(1); + } else wait(NULL); + + // test nine: execl with env changing(putenv) + if(fork()==0) { + putenv("LD_PRELOAD=BADVALUE"); + //char *env[]={"LD_PRELOAD=BADVALUE",NULL}; + //char *argv[]={"/bin/cat","/f9",NULL}; + execl("/bin/cat","/bin/cat","/f9",NULL); + exit(1); + } else wait(NULL); + + // test ten: execlp with env changing(putenv) + if(fork()==0) { + putenv("LD_PRELOAD=BADVALUE"); + //char *env[]={"LD_PRELOAD=BADVALUE",NULL}; + //char *argv[]={"/bin/cat","/f9",NULL}; + execlp("/bin/cat","/bin/cat","/f10",NULL); + exit(1); + } else wait(NULL); + + // test eleven: execle with env changing + if(fork()==0) { + char *env[]={"LD_PRELOAD=BADVALUE",NULL}; + execle("/bin/cat","/bin/cat","/f11",NULL,env); + exit(1); + } else wait(NULL); + + // test twelve: fexecve with env changing + if(fork()==0) { + char *argv[]={"/bin/cat","/f12",NULL}; + char *env[]={"LD_PRELOAD=BADVALUE",NULL}; + int handle=open("/bin/cat",O_RDONLY); + fexecve(handle,argv,env); + exit(1); + } else wait(NULL); + + // test thirteen: system wit env changing(putenv) + if(fork()==0) { + putenv("LD_PRELOAD=BADVALUE"); + //putenv("LOG_SOCKET=BADVALUE"); + //system("echo aa $LOG_SOCKET fff"); + system("cat /f13"); + //system("set"); + exit(1); + } else wait(NULL); + + return 0; +} diff --git a/src/autodep/test/test_fusefs.py b/src/autodep/tests/test_fusefs.py index fb57de7..71e2a85 100644 --- a/src/autodep/test/test_fusefs.py +++ b/src/autodep/tests/test_fusefs.py @@ -1,9 +1,29 @@ import unittest import logfs.fstracer +import os +import sys -def simple_getfsevents(prog,args,approach="hooklib"): +class null_writer: + def __init__(self): + pass + def write(self,string): + pass + + +def simple_getfsevents(prog,args,approach="fusefs"): ret=[] + null_out=null_writer() + nullfile=open("/dev/null") + nullfd=nullfile.fileno() + outfd=os.dup(sys.stdout.fileno()) + errfd=os.dup(sys.stderr.fileno()) + os.dup2(nullfd,sys.stdout.fileno()) + os.dup2(nullfd,sys.stderr.fileno()) + events = logfs.fstracer.getfsevents(prog,args,approach) + os.dup2(outfd,sys.stdout.fileno()) + os.dup2(errfd,sys.stderr.fileno()) + #print events for stage in events: for filename in events[stage][0]: @@ -17,19 +37,18 @@ def simple_getfsevents(prog,args,approach="hooklib"): class fusefs_simple_tests(unittest.TestCase): def test_open_unexists(self): - eventslist=simple_getfsevents('/bin/cat', ['/bin/cat','/f1','/f2'],approach="fusefs") - print eventslist + eventslist=simple_getfsevents('/bin/cat', ['/bin/cat','/f1','/f2']) self.assertTrue(eventslist.count(['/f1',"fail"])==1) self.assertTrue(eventslist.count(['/f2',"fail"])==1) def test_open_exists(self): - eventslist=simple_getfsevents('/bin/cat', ['/bin/cat','/etc/passwd'],approach="fusefs") + eventslist=simple_getfsevents('/bin/cat', ['/bin/cat','/etc/passwd']) self.assertTrue(eventslist.count(['/etc/passwd','success'])>=1) def test_open_many(self): filesnum=200 eventslist=simple_getfsevents('/bin/cat',['/bin/cat']+ - map(lambda x: '/file'+str(x),range(0,filesnum)), approach="fusefs") + map(lambda x: '/file'+str(x),range(0,filesnum))) for f in map(lambda x: ['/file'+str(x),'fail'],range(0,filesnum)): self.assertTrue(f in eventslist) @@ -47,7 +66,7 @@ class fusefs_simple_tests(unittest.TestCase): command+=" 2>/dev/null" #command+=" "+"A"*65536 - resultarray=simple_getfsevents('/bin/sh', ['/bin/sh','-c',command],approach="fusefs") + resultarray=simple_getfsevents('/bin/sh', ['/bin/sh','-c',command]) for p in xrange(0,procnum): for f in xrange(0,filesnum): @@ -55,13 +74,13 @@ class fusefs_simple_tests(unittest.TestCase): def test_open_very_many(self): resultarray=simple_getfsevents('/bin/sh', ['/bin/sh','-c', - "for i in `seq 1 1000`; do cat /testmany$i;done 2> /dev/null"],approach="fusefs") + "for i in `seq 1 1000`; do cat /testmany$i;done 2> /dev/null"]) #print resultarray for i in range(1,1000): self.assertTrue(resultarray.count(['/testmany'+str(i),'fail'])==1) def test_exec(self): - eventslist=simple_getfsevents('test/helpers/exec', ['test/helpers/exec'],approach="fusefs") + eventslist=simple_getfsevents('tests/helpers/exec', ['test/helpers/exec']) for i in range(1,14): self.assertTrue(eventslist.count(['/f'+str(i),"fail"])==1) diff --git a/src/autodep/test/test_hookfs.py b/src/autodep/tests/test_hookfs.py index fdab1f0..0dbabed 100644 --- a/src/autodep/test/test_hookfs.py +++ b/src/autodep/tests/test_hookfs.py @@ -1,9 +1,31 @@ import unittest import logfs.fstracer +import os +import sys + +# just a copypasted tests for fusefs but with hooklib approach + +class null_writer: + def __init__(self): + pass + def write(self,string): + pass + def simple_getfsevents(prog,args,approach="hooklib"): ret=[] + null_out=null_writer() + nullfile=open("/dev/null") + nullfd=nullfile.fileno() + outfd=os.dup(sys.stdout.fileno()) + errfd=os.dup(sys.stderr.fileno()) + os.dup2(nullfd,sys.stdout.fileno()) + os.dup2(nullfd,sys.stderr.fileno()) + events = logfs.fstracer.getfsevents(prog,args,approach) + os.dup2(outfd,sys.stdout.fileno()) + os.dup2(errfd,sys.stderr.fileno()) + #print events for stage in events: for filename in events[stage][0]: @@ -13,21 +35,22 @@ def simple_getfsevents(prog,args,approach="hooklib"): return ret -class hooklib_simple_tests(unittest.TestCase): + + +class fusefs_simple_tests(unittest.TestCase): def test_open_unexists(self): - eventslist=simple_getfsevents('/bin/cat', ['/bin/cat','/f1','/f2'],approach="hooklib") - print eventslist + eventslist=simple_getfsevents('/bin/cat', ['/bin/cat','/f1','/f2']) self.assertTrue(eventslist.count(['/f1',"fail"])==1) self.assertTrue(eventslist.count(['/f2',"fail"])==1) - + def test_open_exists(self): - eventslist=simple_getfsevents('/bin/cat', ['/bin/cat','/etc/passwd'],approach="hooklib") + eventslist=simple_getfsevents('/bin/cat', ['/bin/cat','/etc/passwd']) self.assertTrue(eventslist.count(['/etc/passwd','success'])>=1) def test_open_many(self): filesnum=200 eventslist=simple_getfsevents('/bin/cat',['/bin/cat']+ - map(lambda x: '/file'+str(x),range(0,filesnum)), approach="hooklib") + map(lambda x: '/file'+str(x),range(0,filesnum))) for f in map(lambda x: ['/file'+str(x),'fail'],range(0,filesnum)): self.assertTrue(f in eventslist) @@ -45,7 +68,7 @@ class hooklib_simple_tests(unittest.TestCase): command+=" 2>/dev/null" #command+=" "+"A"*65536 - resultarray=simple_getfsevents('/bin/sh', ['/bin/sh','-c',command],approach="hooklib") + resultarray=simple_getfsevents('/bin/sh', ['/bin/sh','-c',command]) for p in xrange(0,procnum): for f in xrange(0,filesnum): @@ -53,13 +76,18 @@ class hooklib_simple_tests(unittest.TestCase): def test_open_very_many(self): resultarray=simple_getfsevents('/bin/sh', ['/bin/sh','-c', - "for i in `seq 1 1000`; do cat /testmany$i;done 2> /dev/null"],approach="hooklib") + "for i in `seq 1 1000`; do cat /testmany$i;done 2> /dev/null"]) #print resultarray for i in range(1,1000): self.assertTrue(resultarray.count(['/testmany'+str(i),'fail'])==1) def test_exec(self): - eventslist=simple_getfsevents('test/helpers/exec', ['test/helpers/exec'],approach="hooklib") + eventslist=simple_getfsevents('tests/helpers/exec', ['test/helpers/exec']) for i in range(1,14): self.assertTrue(eventslist.count(['/f'+str(i),"fail"])==1) -
\ No newline at end of file + +#if __name__ == '__main__': + #unittest.main() + #suite = unittest.TestLoader().loadTestsFromTestCase(fusefs_simple_tests) +# suite = unittest.TestLoader().loadTestsFromTestCase(hooklib_simple_tests) +# unittest.TextTestRunner(verbosity=2).run(suite)
\ No newline at end of file diff --git a/src/hook_fusefs/hookfs.c b/src/hook_fusefs/hookfs.c index 0d957dc..00a27a8 100644 --- a/src/hook_fusefs/hookfs.c +++ b/src/hook_fusefs/hookfs.c @@ -246,6 +246,9 @@ static int is_process_external(pid_t pid) { return 1; } +/* + * Send an event to python part +*/ static void raw_log_event(const char *event_type, const char *filename, char *result,int err, char* stage) { char msg_buff[MAXSOCKETMSGLEN]; int bytes_to_send; diff --git a/src/hook_lib/file_hook.c b/src/hook_lib/file_hook.c index 22e56f5..555d6dc 100644 --- a/src/hook_lib/file_hook.c +++ b/src/hook_lib/file_hook.c @@ -31,7 +31,6 @@ //extern int errorno; pthread_mutex_t socketblock = PTHREAD_MUTEX_INITIALIZER; -pthread_mutex_t envblock = PTHREAD_MUTEX_INITIALIZER; int (*_open)(const char * pathname, int flags, ...); int (*_open64)(const char * pathname, int flags, ...); @@ -590,7 +589,8 @@ int execl(const char *path, const char *arg, ...){ va_start(ap,arg); while(arg!=0 && i<MAXARGS) { - argv[i++]=arg; + argv[i]=(char *)arg; + i++; arg=va_arg(ap,const char *); } argv[i]=NULL; @@ -634,7 +634,8 @@ int execlp(const char *file, const char *arg, ...) { va_start(ap,arg); while(arg!=0 && i<MAXARGS) { - argv[i++]=arg; + argv[i]=(char *)arg; + i++; arg=va_arg(ap,const char *); } argv[i]=NULL; @@ -663,14 +664,14 @@ int execle(const char *path, const char *arg, ... ){ va_list ap; char * argv[MAXARGS+1]; - argv[0]=arg; + argv[0]=(char *)arg; va_start(ap,arg); int i=0; while(argv[i++]!=NULL && i<MAXARGS) { - argv[i]=va_arg(ap,const char *); + argv[i]=(char *)va_arg(ap,const char *); } - char *const *envp=va_arg(ap, const char *const *); + char **envp=(char **) va_arg(ap, const char *); char *envp_new[MAXENVSIZE]; __fixenvp(envp,envp_new); |