aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexander Bersenev <bay@hackerdom.ru>2011-07-23 14:03:24 +0000
committerAlexander Bersenev <bay@hackerdom.ru>2011-07-23 14:03:24 +0000
commit1b6585e90c962ce1a89d8544e9ece356e418262b (patch)
tree6861b2fe2108ea99a4ec47798a6f4a2e59ae4096 /src
parentmore work on pre-dependency analisys (diff)
downloadautodep-1b6585e90c962ce1a89d8544e9ece356e418262b.tar.gz
autodep-1b6585e90c962ce1a89d8544e9ece356e418262b.tar.bz2
autodep-1b6585e90c962ce1a89d8544e9ece356e418262b.zip
many changes. See the log
Diffstat (limited to 'src')
-rw-r--r--src/autodep/helpers/__init__.py0
-rw-r--r--src/autodep/helpers/__init__.pycbin0 -> 133 bytes
-rw-r--r--src/autodep/helpers/colorize_output.py18
-rw-r--r--src/autodep/helpers/colorize_output.pycbin0 -> 919 bytes
-rw-r--r--src/autodep/helpers/events_analysis.py14
-rw-r--r--src/autodep/helpers/events_analysis.pycbin0 -> 472 bytes
-rw-r--r--src/autodep/logfs/logger_fusefs.py2
-rwxr-xr-x[-rw-r--r--]src/autodep/runtests.py7
-rwxr-xr-xsrc/autodep/showfsevents.py138
-rw-r--r--src/autodep/tests/1_access/Makefile (renamed from src/autodep/test/1_access/Makefile)0
-rw-r--r--src/autodep/tests/1_access/accesser.c (renamed from src/autodep/test/1_access/accesser.c)0
-rw-r--r--src/autodep/tests/__init__.py0
-rw-r--r--src/autodep/tests/all_tests.py (renamed from src/autodep/test/all_tests.py)7
-rw-r--r--src/autodep/tests/alltests.py0
-rw-r--r--src/autodep/tests/helpers/Makefile6
-rw-r--r--src/autodep/tests/helpers/exec.c126
-rw-r--r--src/autodep/tests/test_fusefs.py (renamed from src/autodep/test/test_fusefs.py)35
-rw-r--r--src/autodep/tests/test_hookfs.py (renamed from src/autodep/test/test_hookfs.py)48
-rw-r--r--src/hook_fusefs/hookfs.c3
-rw-r--r--src/hook_lib/file_hook.c13
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
new file mode 100644
index 0000000..1bbf93f
--- /dev/null
+++ b/src/autodep/helpers/__init__.pyc
Binary files differ
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
new file mode 100644
index 0000000..b42f854
--- /dev/null
+++ b/src/autodep/helpers/colorize_output.pyc
Binary files differ
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
new file mode 100644
index 0000000..aa72ec0
--- /dev/null
+++ b/src/autodep/helpers/events_analysis.pyc
Binary files differ
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);