public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/autodep:master commit in: logger/src/autodep/logfs/, logger/src/hook_fusefs/, logger/src/autodep/
@ 2011-06-10  6:45 Александр Берсенев
  0 siblings, 0 replies; 4+ messages in thread
From: Александр Берсенев @ 2011-06-10  6:45 UTC (permalink / raw
  To: gentoo-commits

commit:     8b8b0e496ae3676790215f1eb94e233403f06936
Author:     Alexander Bersenev <bay <AT> hackerdom <DOT> ru>
AuthorDate: Fri Jun 10 12:45:13 2011 +0000
Commit:     Александр Берсенев <bay <AT> hackerdom <DOT> ru>
CommitDate: Fri Jun 10 12:45:13 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/autodep.git;a=commit;h=8b8b0e49

Finalized format of communications. Fiexed a very annoying bug with lost ALLOW packet. Fixed tests

---
 logger/src/autodep/logfs/fstracer.py      |  102 +++++++++++++++++++++++++----
 logger/src/autodep/logfs/logger_fusefs.py |    6 +-
 logger/src/autodep/logfs/test_fstracer.py |   41 +++++++-----
 logger/src/autodep/showfsevents.py        |   30 ++++++++-
 logger/src/hook_fusefs/hookfs.c           |   74 ++++++++++++++++++---
 5 files changed, 210 insertions(+), 43 deletions(-)

diff --git a/logger/src/autodep/logfs/fstracer.py b/logger/src/autodep/logfs/fstracer.py
index cf10e6e..6979b27 100644
--- a/logger/src/autodep/logfs/fstracer.py
+++ b/logger/src/autodep/logfs/fstracer.py
@@ -30,22 +30,76 @@ def parse_message(message):
 # check if proccess is finished
 def checkfinished(pid):
   if not os.path.exists("/proc/%d/stat" % pid):
-	return (True,0)
+	return True
 
   try:
 	pid_child,exitcode = os.waitpid(pid, os.WNOHANG)
   except OSError, e:
 	if e.errno == 10: 
-	  return (False,0)
+	  return False
 	else:
 	  raise
   
   if pid_child==0:
-	return (False,0)
-  return (True,exitcode)
+	return False
+  return True
+
+#check if process is zombie
+def iszombie(pid):
+  try:
+	statfile=open("/proc/%d/stat" % pid,"r")
+	line=statfile.readline()
+	statfile.close()
+	line=line.rsplit(")")[1] # find last ")" char
+	line=line.strip()
+	match=re.match(r"(\w)",line)
+	if match==None:
+	  print "Failed to get check if process is zombie. Format of /proc/<pid>/stat is incorrect. Did you change a kernel?"
+	  return False
+	
+	return match.group(1)=="Z"
+	
+  except IOError,e:
+	return True
+  
+
+# uses /proc filesystem to get pid of parent
+def getparentpid(pid):
+  try:
+	statfile=open("/proc/%d/stat" % pid,"r")
+	line=statfile.readline()
+	statfile.close()
+	line=line.rsplit(")")[1] # find last ")" char
+	line=line.strip()
+	match=re.match(r"\w\s(\d+)",line)
+	if match==None:
+	  print "Failed to get parent process. Format of /proc/<pid>/stat is incorrect. Did you change a kernel?"
+	  return 1
+	
+	return int(match.group(1))
+	
+  except IOError,e:
+	return 1
+
+#check if message came from one of a child
+def checkparent(parent,child):
+  #print "Parent %s, child %s"%(parent,child)
+  if child==1 or getparentpid(child)==1:
+	return True
+	  
+  currpid=child
+#   for(pid=getpid();pid!=0;pid=__getparentpid(pid))
+  while getparentpid(currpid)!=1:
+	currpid=getparentpid(currpid)
+	if currpid==parent:
+	  return True
+  
+  print "External actions with filesystem detected pid of external prog is %d" % child
+  return False
+
+# default access filter. Allow acess to all files
+def defaultfilter(eventname, filename, pid):
   
-# default access filter. Allow always  
-def defaultfilter(time, filename, pid):
   return True
 
 # run the program and get file access events
@@ -59,7 +113,7 @@ def getfsevents(prog_name,arguments,approach="hooklib",filterproc=defaultfilter)
 	sock_listen=socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
 	sock_listen.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 	sock_listen.bind(socketname)
-	sock_listen.listen(1024)
+	sock_listen.listen(65536*8)
   except socket.error, e:
     print "Failed to create a socket for exchange data with the logger: %s" % e
     return []
@@ -103,7 +157,7 @@ def getfsevents(prog_name,arguments,approach="hooklib",filterproc=defaultfilter)
 			  input.append(client)
 			  buffers[client]=''
 		  else:
-			data=s.recv(65536)
+			data=s.recv(4096)
 			
 			buffers[s]+=data
 			  
@@ -131,26 +185,50 @@ def getfsevents(prog_name,arguments,approach="hooklib",filterproc=defaultfilter)
 			  #print "datalen: %d" % len(data)
 			  message=parse_message(record)
 			  
+			  
 			  try:
 				if message[4]=="ASKING":
-				  if filterproc(message[1],message[2],message[3]):
+				  #print "ASKING %s"%message[2]
+				  if message[2]=="/" or ( # always allow acces to "/" because of some processes like ksysguardd
+					True):#checkparent(pid,int(message[3])) and filterproc(message[1],message[2],message[3])):
 					s.sendall("ALLOW\n"); # TODO: think about flush here
+					#print "ALLOWING %s"%message[2]
+					
 				  else:
 					print "Blocking an access to %s" % message[2]
 					s.sendall("DENY\n"); # TODO: think about flush here
 					
 				else:
-				  events.append([message[1],message[2]]);
+				  # check previous five messages for possible repeats
+				  for prevevent in events[-5:]:
+					if prevevent[1:]==message[1:]:
+					  break
+				  else:
+					pass
+					#events.append(message)
 			  except IndexError:
 				print "IndexError while parsing %s"%record
 			  #print "!!"+data+"!!"
 			  #print parse_message(data)
 
-		if len(input)==1 and connects==0:
+		
+		if len(input)==1 and connects==0: #or 
 		  # seems like there is no connect
-		  print "It seems like a logger module was unable to start." + \
+		  print "It seems like a logger module was unable to start or failed to finish" + \
 				"Check that you are not launching a suid program under non-root user."
 		  return []
+		#if iszombie(pid):
+		#  print "Child finished, but connection remains. Closing a connection"
+		#  break
 
 	  os.wait()
+  
+  if len(events)==0:
+	return []
+	
+  timeofstart=int(events[0][0])
+  # make all event times relative to time 0 - time of start task
+  for event_num in range(0,len(events)):
+	events[event_num][0]=int(events[event_num][0])-timeofstart
   return events
+

diff --git a/logger/src/autodep/logfs/logger_fusefs.py b/logger/src/autodep/logfs/logger_fusefs.py
index 11a6f39..ec19b80 100644
--- a/logger/src/autodep/logfs/logger_fusefs.py
+++ b/logger/src/autodep/logfs/logger_fusefs.py
@@ -93,9 +93,9 @@ class logger:
 		print "Unmounting partitions"
 		self.mountlist.reverse()
 		for mount in self.mountlist:
-		  self.smartcommandlauncher(['umount',self.rootmountpath+mount])
-		self.smartcommandlauncher(['fusermount','-u',self.rootmountpath]);
-		self.smartcommandlauncher(['umount',self.rootmountpath]);
+		  self.smartcommandlauncher(['umount','-l',self.rootmountpath+mount])
+		self.smartcommandlauncher(['fusermount','-z','-u',self.rootmountpath]);
+		self.smartcommandlauncher(['umount','-l',self.rootmountpath]);
 		os.rmdir(self.rootmountpath)
 
 	  except OSError, e:

diff --git a/logger/src/autodep/logfs/test_fstracer.py b/logger/src/autodep/logfs/test_fstracer.py
index c254bce..a4c4b56 100644
--- a/logger/src/autodep/logfs/test_fstracer.py
+++ b/logger/src/autodep/logfs/test_fstracer.py
@@ -2,6 +2,13 @@ import unittest
 
 import fstracer
 
+def simple_getfsevents(prog,args,approach="hooklib"):
+  ret=[]
+  events = fstracer.getfsevents(prog,args,approach)
+  for event in events:
+	ret.append([event[1],event[2],event[4]])
+  return ret
+
 class hooklib_simple_tests(unittest.TestCase):
   def test_open_unexists(self):
 	self.assertEqual(fstracer.getfsevents('/bin/cat',
@@ -48,17 +55,20 @@ class hooklib_simple_tests(unittest.TestCase):
 
 class fusefs_simple_tests(unittest.TestCase):
   def test_open_unexists(self):
-	eventslist=fstracer.getfsevents('/bin/cat', ['/bin/cat','/f1','/f2'],approach="fusefs")
-	self.assertTrue(eventslist.count(['stat', '/f1'])==1)
-	def test_open_exists(self):
-	  eventslist=fstracer.getfsevents('/bin/cat', ['/bin/cat','/etc/passwd'],approach="fusefs")
-	  self.assertTrue(eventslist.count(['stat', '/etc/passwd'])>=1)
+	eventslist=simple_getfsevents('/bin/cat', ['/bin/cat','/f1','/f2'],approach="fusefs")
+	print eventslist
+	self.assertTrue(eventslist.count(['stat', '/f1',"ERR/2"])==1)
+	self.assertTrue(eventslist.count(['stat', '/f2',"ERR/2"])==1)
+	
+  def test_open_exists(self):
+	  eventslist=simple_getfsevents('/bin/cat', ['/bin/cat','/etc/passwd'],approach="fusefs")
+	  self.assertTrue(eventslist.count(['stat', '/etc/passwd',"OK"])>=1)
 
   def test_open_many(self):
 	filesnum=200
-	eventslist=fstracer.getfsevents('/bin/cat',['/bin/cat']+
+	eventslist=simple_getfsevents('/bin/cat',['/bin/cat']+
 									map(lambda x: '/file'+str(x),range(0,filesnum)), approach="fusefs")
-	for f in map(lambda x: ['stat','/file'+str(x)],range(0,filesnum)):
+	for f in map(lambda x: ['stat','/file'+str(x),"ERR/2"],range(0,filesnum)):
 	  self.assertTrue(f in eventslist)
 
   def test_parralel(self):
@@ -72,21 +82,20 @@ class fusefs_simple_tests(unittest.TestCase):
 	  for f in xrange(0,filesnum):
 		command+="/file_%d_%d " % (p,f)
 	  command+="& "
-	command+=" >/dev/null 2>&1"
+	command+=" 2>/dev/null"
 	#command+=" "+"A"*65536
 	
-	resultarray=fstracer.getfsevents('/bin/sh', ['/bin/sh','-c',command],approach="fusefs")
-
-	#self.assertTrue(resultarray.count(['execve', '/bin/cat'])==procnum)
-
-	print resultarray
+	resultarray=simple_getfsevents('/bin/sh', ['/bin/sh','-c',command],approach="fusefs")
 
 	for p in xrange(0,procnum):
 	  for f in xrange(0,filesnum):
-		self.assertTrue(resultarray.count(['stat', '/file_%d_%d' % (p,f)])==1)
-
-
+		self.assertTrue(resultarray.count(['stat', '/file_%d_%d' % (p,f),"ERR/2"])==1)
 
+  def test_open_very_many(self):
+	resultarray=simple_getfsevents('/bin/sh', ['/bin/sh','-c',
+									"for i in `seq 1 10`; do cat /testmany;done 2> /dev/null"],approach="fusefs")
+	print resultarray
+	self.assertTrue(resultarray.count(['stat','/testmany',"ERR/2"])>=1000)
 
 if __name__ == '__main__':
   #unittest.main()

diff --git a/logger/src/autodep/showfsevents.py b/logger/src/autodep/showfsevents.py
index 25bf1ff..0fba98a 100755
--- a/logger/src/autodep/showfsevents.py
+++ b/logger/src/autodep/showfsevents.py
@@ -5,6 +5,10 @@ import sys
 
 import logfs.fstracer
 
+def printevents(events):
+  for event in events:
+	print "%s %s"%(event[1],event[2])
+	
 #logfs.fstracer.getfsevents("/bin/sh", ["sh" , "-c", "/usr/bin/tac bay_success; /usr/bin/tac bay_god bay_god2"])
 #events=logfs.fstracer.getfsevents("/bin/cat", ["cat" , "l l l"])
 if len(sys.argv)<2:
@@ -12,5 +16,29 @@ if len(sys.argv)<2:
   exit(1)
   
 events=logfs.fstracer.getfsevents(sys.argv[1], sys.argv[1:],approach="fusefs")
-print events
+
+succ_events=[]
+err_events=[]
+deny_events=[]
+
+for event in events:
+  if event[4]=="OK":
+	succ_events.append(event)
+  elif event[4]=="DENIED":
+	deny_events.append(event)
+  else:
+	err_events.append(event)
+	
+  
+	
+print "Report:"	
+if len(succ_events)>0:
+  print "Successful events:"
+  printevents(succ_events)
+if len(err_events)>0:
+  print "\nNon-successful events:"
+  printevents(err_events)
+if len(deny_events)>0:
+  print "\nBlocked events:"
+  printevents(deny_events)
 #logfs.fstracer.getfsevents("emerge", ["emerge","--info"])
\ No newline at end of file

diff --git a/logger/src/hook_fusefs/hookfs.c b/logger/src/hook_fusefs/hookfs.c
index 16b9a46..45bcd6b 100644
--- a/logger/src/hook_fusefs/hookfs.c
+++ b/logger/src/hook_fusefs/hookfs.c
@@ -60,7 +60,7 @@ struct hookfs_config config;
  * Prints a string escaping spaces and '\'
  * Does not check input variables
 */
-void __print_escaped(FILE *fh ,const char *s){
+static void __print_escaped(FILE *fh ,const char *s){
 	for(;(*s)!=0; s++) {
 		if(*s==' ')
 		  fprintf(fh,"\\ ");
@@ -78,10 +78,25 @@ void __print_escaped(FILE *fh ,const char *s){
 }
 
 /*
- * Format of log string: time event file flags result parents
-*/
-void log_event(const char *event_type, const char *filename, char *result,int err, pid_t pid) {
-  pthread_mutex_lock( &socketblock );
+ * This is here because launching of a task is very slow without it
+ */
+static int is_file_excluded(const char *filename) {
+  if(strcmp(filename,"/etc/ld.so.preload")==0)
+	return 1;
+  if(strcmp(filename,"/etc/ld.so.cache")==0)
+	return 1;
+  if(strcmp(filename,"/usr/lib64/locale/locale-archive")==0)
+	return 1;
+  if(strcmp(filename,"/usr/lib64/locale")==0)
+	return 1;
+  
+  return 0;
+}
+
+
+static void raw_log_event(const char *event_type, const char *filename, char *result,int err, pid_t pid) {
+  if(is_file_excluded(filename)) return;
+
 
   fprintf(log_file,"%lld ",(unsigned long long)time(NULL));
 
@@ -97,6 +112,14 @@ void log_event(const char *event_type, const char *filename, char *result,int er
   fprintf(log_file,"\n");
   fflush(log_file);
 
+}
+
+/*
+ * Format of log string: time event file flags result parents
+*/
+static void log_event(const char *event_type, const char *filename, char *result,int err, pid_t pid) {
+  pthread_mutex_lock( &socketblock );
+  raw_log_event(event_type,filename,result,err,pid);
   pthread_mutex_unlock( &socketblock );
 }
 
@@ -104,13 +127,17 @@ void log_event(const char *event_type, const char *filename, char *result,int er
  * Ack a python part about an event
  * Returns 1 if access is allowed and 0 if denied
 */
-int is_event_allowed(const char *event_type,const char *filename, pid_t pid) {
+static int is_event_allowed(const char *event_type,const char *filename, pid_t pid) {
   // sending asking log_event
-  log_event(event_type,filename,"ASKING",0,pid);
+  if(is_file_excluded(filename)) return 1;
+  //return 1;
+  pthread_mutex_lock( &socketblock );
+  
+  raw_log_event(event_type,filename,"ASKING",0,pid);
   char answer[8];
 
-  pthread_mutex_lock( &socketblock );
   fscanf(log_file,"%7s",answer);
+  fflush(log_file); // yes, it is here too
   pthread_mutex_unlock( &socketblock );
   
   if(strcmp(answer,"ALLOW")==0)
@@ -122,7 +149,6 @@ int is_event_allowed(const char *event_type,const char *filename, pid_t pid) {
   return 0;
 }
 
-
 static char * malloc_relative_path(const char *path) {
 	int len = strlen(path);
 	char * buf = malloc(1 + len + 1);
@@ -149,6 +175,14 @@ static int hookfs_getattr(const char *path, struct stat *stbuf)
 {
   	struct fuse_context * context = fuse_get_context();
 
+	if(! is_event_allowed("stat",path,context->pid)) {
+	  errno=2; // not found
+	  log_event("stat",path,"DENIED",errno,context->pid);
+
+	  return -errno;
+	}
+
+	
 	char * rel_path = malloc_relative_path(path);
 	if (! rel_path) {
 		return -errno;
@@ -172,7 +206,14 @@ static int hookfs_fgetattr(const char *path, struct stat *stbuf,
 	int res;
 
   	struct fuse_context * context = fuse_get_context();
+	if(! is_event_allowed("stat",path,context->pid)) {
+	  errno=2; // not found
+	  log_event("stat",path,"DENIED",errno,context->pid);
+
+	  return -errno;
+	}
 
+	
 	res = fstat(fi->fh, stbuf);
 	
 	if (res == -1) {
@@ -188,6 +229,14 @@ static int hookfs_access(const char *path, int mask)
 {
  	struct fuse_context * context = fuse_get_context();
 
+	if(! is_event_allowed("stat",path,context->pid)) {
+	  errno=2; // not found
+	  log_event("stat",path,"DENIED",errno,context->pid);
+
+	  return -errno;
+	}
+
+	
 	char * rel_path = malloc_relative_path(path);
 	if (! rel_path) {
 		return -errno;
@@ -348,7 +397,7 @@ static int hookfs_unlink(const char *path)
 
 	int res = unlink(rel_path);
 	free(rel_path);
-	//NOTIFY(post_unlink, path, res);
+
 	if (res == -1)
 		return -errno;
 
@@ -556,6 +605,8 @@ static int hookfs_create(const char *path, mode_t mode, struct fuse_file_info *f
   
 	if(! is_event_allowed("create",path,context->pid)) {
 	  errno=2; // not found
+	  log_event("create",path,"DENIED",errno,context->pid);
+
 	  return -errno;
 	}
 
@@ -587,6 +638,8 @@ static int hookfs_open(const char *path, struct fuse_file_info *fi)
 
 	if(! is_event_allowed("open",path,context->pid)) {
 	  errno=2; // not found
+	  log_event("open",path,"DENIED",errno,context->pid);
+
 	  return -errno;
 	}
 	
@@ -895,7 +948,6 @@ static int hookfs_handle_opt(void *data, const char *arg, int key, struct fuse_a
 					 "\n"
 					 "%s options:\n"
 					 "    --argv-debug           enable argv debugging\n"
-					 "    --flush                flush log after each write\n"
 					 "\n"
 					 "general options:\n"
 					 "    -o opt,[opt...]        mount options\n"



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [gentoo-commits] proj/autodep:master commit in: logger/src/autodep/logfs/, logger/src/hook_fusefs/, logger/src/autodep/
@ 2011-06-18 15:53 Александр Берсенев
  0 siblings, 0 replies; 4+ messages in thread
From: Александр Берсенев @ 2011-06-18 15:53 UTC (permalink / raw
  To: gentoo-commits

commit:     34711186c479a6010a28ba916e1cdbf81fe505b4
Author:     Alexander Bersenev <bay <AT> hackerdom <DOT> ru>
AuthorDate: Sat Jun 18 21:52:40 2011 +0000
Commit:     Александр Берсенев <bay <AT> hackerdom <DOT> ru>
CommitDate: Sat Jun 18 21:52:40 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/autodep.git;a=commit;h=34711186

reporting a possible dependency packages

---
 logger/src/autodep/logfs/portage_utils.py |   41 ++++++++++++++++++++
 logger/src/autodep/showfsevents.py        |   58 ++++++++++++++++++++--------
 logger/src/hook_fusefs/hookfs.c           |    2 +-
 3 files changed, 83 insertions(+), 18 deletions(-)

diff --git a/logger/src/autodep/logfs/portage_utils.py b/logger/src/autodep/logfs/portage_utils.py
new file mode 100644
index 0000000..6592d7a
--- /dev/null
+++ b/logger/src/autodep/logfs/portage_utils.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python2
+
+import os
+import subprocess
+import re
+
+def getpackagesbyfiles(files):
+  ret={}
+  listtocheck=[]
+  for f in files:
+	if os.path.isdir(f):
+	  ret[f]="directory"
+	else:
+	  listtocheck.append(f)
+	  
+  try:
+	proc=subprocess.Popen(['qfile']+['--nocolor','--exact','','--from','-'],
+	  stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.PIPE, 
+	  bufsize=4096)
+	
+	out,err=proc.communicate("\n".join(listtocheck))
+	if err!=None:
+	  print "Noncritical error while launch qfile %s"%err;
+
+	lines=out.split("\n")
+	#print lines
+	line_re=re.compile(r"^([^ ]+)\s+\(([^)]+)\)$")
+	for line in lines:
+	  if len(line)==0:
+		continue
+	  match=line_re.match(line)
+	  if match:
+		ret[match.group(2)]=match.group(1)
+	  else:
+		print "Util qfile returned unparsable string: %s" % line
+
+  except OSError,e:
+	print "Error while launching qfile: %s" % e
+	
+	
+  return ret
\ No newline at end of file

diff --git a/logger/src/autodep/showfsevents.py b/logger/src/autodep/showfsevents.py
index 24a4bdd..fd628cd 100755
--- a/logger/src/autodep/showfsevents.py
+++ b/logger/src/autodep/showfsevents.py
@@ -4,11 +4,8 @@ import os
 import sys
 
 import logfs.fstracer
+import logfs.portage_utils
 
-def printevents(events):
-  for event in events:
-	print "%s %s"%(event[1],event[2])
-	
 #logfs.fstracer.getfsevents("/bin/sh", ["sh" , "-c", "/usr/bin/tac bay_success; /usr/bin/tac bay_god bay_god2"])
 #events=logfs.fstracer.getfsevents("/bin/cat", ["cat" , "l l l"])
 if len(sys.argv)<2:
@@ -16,32 +13,59 @@ if len(sys.argv)<2:
   exit(1)
   
 events=logfs.fstracer.getfsevents(sys.argv[1], sys.argv[1:],approach="fusefs")
+print "Program finished, analyzing dependencies"
+# get unique filenames
+filenames={}
+for stage in events:
+  succ_events=events[stage][0]
+  fail_events=events[stage][1]
+  for filename in succ_events:
+	filenames[filename]=""
+  for filename in fail_events:
+	filenames[filename]=""
+filenames=filenames.keys();
+
+file_to_package=logfs.portage_utils.getpackagesbyfiles(filenames)
 #print events
 
-for stage in events:
+stagesorder={"setup":1,"unpack":2,"prepare":3,"compile":4,"test":5,
+			 "src_install":6,"preinst":7,"postinst":8, "unknown":9}
+
+for stage in sorted(events, key=stagesorder.get):
   succ_events=events[stage][0]
   fail_events=events[stage][1]
   print "On stage %s:" % stage
-  for filename in sorted(succ_events):
-	print " %40s\t" % filename,
+  for filename in sorted(succ_events, key=file_to_package.get):
+	print " %-40s" % filename,
+	action=""
 	if succ_events[filename]==[False,False]:
-	  print "accessed"
+	  action="accessed",
 	elif succ_events[filename]==[True,False]:
-	  print "readed"
+	  action="readed",
 	elif succ_events[filename]==[False,True]:
-	  print "writed"
+	  action="writed",
 	elif succ_events[filename]==[True,True]:
-	  print "readed and writed"
-  for filename in sorted(fail_events):
+	  action="readed and writed",
+	  
+	print "  %-21s  " % action,
+	if filename in file_to_package:
+	  print file_to_package[filename],
+	print  
 	
-	print " %40s\t"%filename,
+  for filename in sorted(fail_events, key=file_to_package.get):
+	print " %-40s" % filename,
+	action=""
 	if fail_events[filename]==[True,False]:
-	  print "file not found"
+	  action="file not found"
 	elif fail_events[filename]==[True,True]:
-	  print "blocked somewhen, not found somewhen"
+	  action="blocked and not found"
 	elif fail_events[filename]==[False,True]:
-	  print "blocked"
+	  action="blocked"
 	elif fail_events[filename]==[False,False]:
-	  print "other error"
+	  action="other error"
+	print "  %-21s  " % action,
+	if filename in file_to_package:
+	  print file_to_package[filename],
+	print  
 	
 ##logfs.fstracer.getfsevents("emerge", ["emerge","--info"])
\ No newline at end of file

diff --git a/logger/src/hook_fusefs/hookfs.c b/logger/src/hook_fusefs/hookfs.c
index 9241a2a..6456bef 100644
--- a/logger/src/hook_fusefs/hookfs.c
+++ b/logger/src/hook_fusefs/hookfs.c
@@ -93,7 +93,7 @@ pid_t getparentpid(pid_t pid){
   
   filedata[bytes_readed]=0;
   
-  char *beg_scan_offset=rindex(filedata,')');
+  char *beg_scan_offset=strrchr(filedata,')');
   if(beg_scan_offset==NULL) {
 	fclose(stat_file_handle);
 	return 0;	



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [gentoo-commits] proj/autodep:master commit in: logger/src/autodep/logfs/, logger/src/hook_fusefs/, logger/src/autodep/
@ 2011-06-25 19:52 Александр Берсенев
  0 siblings, 0 replies; 4+ messages in thread
From: Александр Берсенев @ 2011-06-25 19:52 UTC (permalink / raw
  To: gentoo-commits

commit:     61c0886b26c9ee2b9e13f14b08cd6cd46b2faf1b
Author:     Alexander Bersenev <bay <AT> hackerdom <DOT> ru>
AuthorDate: Sun Jun 26 01:52:41 2011 +0000
Commit:     Александр Берсенев <bay <AT> hackerdom <DOT> ru>
CommitDate: Sun Jun 26 01:52:41 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/autodep.git;a=commit;h=61c0886b

move to seqpacket sockets

---
 logger/src/autodep/logfs/fstracer.py      |  119 ++++++++++++-----------------
 logger/src/autodep/logfs/test_fstracer.py |   30 +++++---
 logger/src/autodep/showfsevents.py        |    8 +-
 logger/src/hook_fusefs/hookfs.c           |  117 +++++++++++++++--------------
 4 files changed, 134 insertions(+), 140 deletions(-)

diff --git a/logger/src/autodep/logfs/fstracer.py b/logger/src/autodep/logfs/fstracer.py
index 5842372..dda7afe 100644
--- a/logger/src/autodep/logfs/fstracer.py
+++ b/logger/src/autodep/logfs/fstracer.py
@@ -126,10 +126,12 @@ def getfsevents(prog_name,arguments,approach="hooklib",filterproc=defaultfilter)
   socketname = os.path.join(tmpdir, 'socket')
 
   try:
-	sock_listen=socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+	#sock_listen=socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+	sock_listen=socket.socket(socket.AF_UNIX, socket.SOCK_SEQPACKET)
+
 	sock_listen.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 	sock_listen.bind(socketname)
-	sock_listen.listen(65536)
+	sock_listen.listen(1024)
   except socket.error, e:
     print "Failed to create a socket for exchange data with the logger: %s" % e
     return []
@@ -155,9 +157,7 @@ def getfsevents(prog_name,arguments,approach="hooklib",filterproc=defaultfilter)
 	else:
 	  input = [sock_listen]
 	  connects = 0;
-	  
-	  buffers = {}
-	  
+	  	  
 	  while input:
 		inputready,_,_ = select.select(input,[],[],5)
 		
@@ -171,83 +171,68 @@ def getfsevents(prog_name,arguments,approach="hooklib",filterproc=defaultfilter)
 			  (client,addr)=ret
 			  connects+=1; # client accepted
 			  input.append(client)
-			  buffers[client]=""
 		  else:
-			data=s.recv(65536)
+			record=s.recv(8192)
 			
-			buffers[s]+=data
-			  
-			if not data:
+			if not record:
 			  s.close()
 			  input.remove(s)
-			  del buffers[s]
 			  connects-=1;
 			  if connects==0:
 				input.remove(sock_listen)
 				sock_listen.close()
 			  continue
 						
-			if not "\0\0" in buffers[s]:
-			  continue
-			  
-			data,buffers[s] = buffers[s].rsplit("\0\0",1)
+			message=record.split("\0")
+			#print message
 			
-			for record in data.split("\0\0"):
-			  if len(record)==0:
-				continue
-			  # TODO: check array
-			  #print "!"+"%d"%len(record)+"?"
-			  #print "datalen: %d" % len(data)
-			  message=record.split("\0")
-			  #print message
-			  
-			  try:
-				if message[4]=="ASKING":
-				  if filterproc(message[1],message[2],message[3]):
-					#print "Allowing an access to %s" % message[2]
-					s.sendall("ALLOW\n"); # TODO: think about flush here
-					
-				  else:
-					print "Blocking an access to %s" % message[2]
-					s.sendall("DENY\n"); # TODO: think about flush here
-					
+			try:
+			  if message[4]=="ASKING":
+				if filterproc(message[1],message[2],message[3]):
+				  #print "Allowing an access to %s" % message[2]
+				  s.sendall("ALLOW"); # TODO: think about flush here
+				  
 				else:
-				  eventname,filename,stage,result=message[1:5]
-				  #if stage != "unknown":
+				  print "Blocking an access to %s" % message[2]
+				  s.sendall("DENY"); # TODO: think about flush here
 				  
-
-				  if not stage in events:
-					events[stage]=[{},{}]
+			  else:
+				eventname,filename,stage,result=message[1:5]
+				#if stage != "unknown":
+				
+
+				if not stage in events:
+				  events[stage]=[{},{}]
+				
+				hashofsucesses=events[stage][0]
+				hashoffailures=events[stage][1]
+				
+				if result=="OK":
+				  if not filename in hashofsucesses:
+					hashofsucesses[filename]=[False,False]
 				  
-				  hashofsucesses=events[stage][0]
-				  hashoffailures=events[stage][1]
+				  readed_or_writed=hashofsucesses[filename]
 				  
-				  if result=="OK":
-					if not filename in hashofsucesses:
-					  hashofsucesses[filename]=[False,False]
-					
-					readed_or_writed=hashofsucesses[filename]
-					
-					if eventname=="read":
-					  readed_or_writed[0]=True
-					elif eventname=="write":
-					  readed_or_writed[1]=True
-					  
-				  elif result[0:3]=="ERR" or result=="DENIED":
-					if not filename in hashoffailures:
-					  hashoffailures[filename]=[False,False]
-					notfound_or_blocked=hashoffailures[filename]
+				  if eventname=="read":
+					readed_or_writed[0]=True
+				  elif eventname=="write":
+					readed_or_writed[1]=True
 					
-					if result=="ERR/2":
-					  notfound_or_blocked[0]=True
-					elif result=="DENIED":
-					  notfound_or_blocked[1]=True
-
-				  else:
-					print "Error in logger module<->analyser protocol"
+				elif result[0:3]=="ERR" or result=="DENIED":
+				  if not filename in hashoffailures:
+					hashoffailures[filename]=[False,False]
+				  notfound_or_blocked=hashoffailures[filename]
 				  
-			  except IndexError:
-				print "IndexError while parsing %s"%record
+				  if result=="ERR/2":
+					notfound_or_blocked[0]=True
+				  elif result=="DENIED":
+					notfound_or_blocked[1]=True
+
+				else:
+				  print "Error in logger module<->analyser protocol"
+				
+			except IndexError:
+			  print "IndexError while parsing %s"%record
 
 		
 		if len(input)==1 and connects==0: #or 
@@ -264,9 +249,5 @@ def getfsevents(prog_name,arguments,approach="hooklib",filterproc=defaultfilter)
   #if len(events)==0:
 	#return []
 	
-  #timeofstart=int(events[0][0])
-  # make all event times relative to time 0 - time of start task
-  #for event_num in range(0,len(events)):
-	#events[event_num][0]=int(events[event_num][0])-timeofstart
   return events
 

diff --git a/logger/src/autodep/logfs/test_fstracer.py b/logger/src/autodep/logfs/test_fstracer.py
index a4c4b56..db61486 100644
--- a/logger/src/autodep/logfs/test_fstracer.py
+++ b/logger/src/autodep/logfs/test_fstracer.py
@@ -5,8 +5,13 @@ import fstracer
 def simple_getfsevents(prog,args,approach="hooklib"):
   ret=[]
   events = fstracer.getfsevents(prog,args,approach)
-  for event in events:
-	ret.append([event[1],event[2],event[4]])
+  #print events
+  for stage in events:
+	for filename in events[stage][0]:
+	  ret.append([filename,'success'])
+	for filename in events[stage][1]:
+	  ret.append([filename,'fail'])
+	  
   return ret
 
 class hooklib_simple_tests(unittest.TestCase):
@@ -57,23 +62,23 @@ class fusefs_simple_tests(unittest.TestCase):
   def test_open_unexists(self):
 	eventslist=simple_getfsevents('/bin/cat', ['/bin/cat','/f1','/f2'],approach="fusefs")
 	print eventslist
-	self.assertTrue(eventslist.count(['stat', '/f1',"ERR/2"])==1)
-	self.assertTrue(eventslist.count(['stat', '/f2',"ERR/2"])==1)
+	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")
-	  self.assertTrue(eventslist.count(['stat', '/etc/passwd',"OK"])>=1)
+	  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")
-	for f in map(lambda x: ['stat','/file'+str(x),"ERR/2"],range(0,filesnum)):
+	for f in map(lambda x: ['/file'+str(x),'fail'],range(0,filesnum)):
 	  self.assertTrue(f in eventslist)
 
   def test_parralel(self):
-	filesnum=200
-	procnum=6
+	filesnum=400
+	procnum=8
 	
 	# create command
 	command=""
@@ -89,13 +94,14 @@ class fusefs_simple_tests(unittest.TestCase):
 
 	for p in xrange(0,procnum):
 	  for f in xrange(0,filesnum):
-		self.assertTrue(resultarray.count(['stat', '/file_%d_%d' % (p,f),"ERR/2"])==1)
+		self.assertTrue(resultarray.count(['/file_%d_%d' % (p,f),"fail"])==1)
 
   def test_open_very_many(self):
 	resultarray=simple_getfsevents('/bin/sh', ['/bin/sh','-c',
-									"for i in `seq 1 10`; do cat /testmany;done 2> /dev/null"],approach="fusefs")
-	print resultarray
-	self.assertTrue(resultarray.count(['stat','/testmany',"ERR/2"])>=1000)
+									"for i in `seq 1 1000`; do cat /testmany$i;done 2> /dev/null"],approach="fusefs")
+	#print resultarray
+	for i in range(1,1000):
+	  self.assertTrue(resultarray.count(['/testmany'+str(i),'fail'])==1)
 
 if __name__ == '__main__':
   #unittest.main()

diff --git a/logger/src/autodep/showfsevents.py b/logger/src/autodep/showfsevents.py
index fd628cd..444b96a 100755
--- a/logger/src/autodep/showfsevents.py
+++ b/logger/src/autodep/showfsevents.py
@@ -25,11 +25,13 @@ for stage in events:
 	filenames[filename]=""
 filenames=filenames.keys();
 
-file_to_package=logfs.portage_utils.getpackagesbyfiles(filenames)
+# temporary disabled
+#file_to_package=logfs.portage_utils.getpackagesbyfiles(filenames)
+file_to_package={}
 #print events
 
-stagesorder={"setup":1,"unpack":2,"prepare":3,"compile":4,"test":5,
-			 "src_install":6,"preinst":7,"postinst":8, "unknown":9}
+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}
 
 for stage in sorted(events, key=stagesorder.get):
   succ_events=events[stage][0]

diff --git a/logger/src/hook_fusefs/hookfs.c b/logger/src/hook_fusefs/hookfs.c
index 89c899a..8219994 100644
--- a/logger/src/hook_fusefs/hookfs.c
+++ b/logger/src/hook_fusefs/hookfs.c
@@ -46,6 +46,8 @@
 #define MAXSOCKETPATHLEN 108
 #define MAXFILEBUFFLEN 2048
 
+#define MAXSOCKETMSGLEN 8192
+
 #define MAXSTAGELEN 20
 
 #define IOBUFSIZE 65536
@@ -60,7 +62,7 @@ pthread_mutex_t socketblock = PTHREAD_MUTEX_INITIALIZER;
 
 int mountpoint_fd = -1;
 char *mountpoint = NULL;
-FILE * log_file = NULL;
+//FILE * log_file = NULL;
 int log_socket=-1;
 struct hookfs_config config;
 
@@ -243,15 +245,18 @@ static int is_process_external(pid_t pid) {
 }
 
 static void raw_log_event(const char *event_type, const char *filename, char *result,int err, char* stage) {
-  fprintf(log_file,"%lld%c",(unsigned long long)time(NULL),0);
-  fprintf(log_file,"%s%c%s%c%s%c",event_type,0,filename,0,stage,0);
+  char msg_buff[MAXSOCKETMSGLEN];
+  int bytes_to_send;
+  if(strcmp(result,"ERR")==0) {
+	bytes_to_send=snprintf(msg_buff,MAXSOCKETMSGLEN,"%lld%c%s%c%s%c%s%c%s/%d",
+	  (unsigned long long)time(NULL),0,event_type,0,filename,0,stage,0,result,err);
+  } else {
+	bytes_to_send=snprintf(msg_buff,MAXSOCKETMSGLEN,"%lld%c%s%c%s%c%s%c%s",
+	  (unsigned long long)time(NULL),0,event_type,0,filename,0,stage,0,result);	
+  }
   
-  if(strcmp(result,"ERR")==0)
-	fprintf(log_file,"%s/%d",result,err);
-  else
-	fprintf(log_file,"%s",result);
-
-  fprintf(log_file,"%c%c",0,0);
+  if(bytes_to_send>=MAXSOCKETMSGLEN) return;
+  send(log_socket,msg_buff,bytes_to_send,0);
 }
 
 /*
@@ -259,11 +264,9 @@ static void raw_log_event(const char *event_type, const char *filename, char *re
 */
 static void log_event(const char *event_type, const char *filename, char *result,int err, char* stage) {
   if(is_file_excluded(filename)) return;
-
-  pthread_mutex_lock( &socketblock );
+//  pthread_mutex_lock( &socketblock );
   raw_log_event(event_type,filename,result,err,stage);
-
-  pthread_mutex_unlock( &socketblock );
+//  pthread_mutex_unlock( &socketblock );
 }
 
 /*
@@ -278,17 +281,19 @@ static int is_event_allowed(const char *event_type,const char *filename, pid_t p
 
   // sending asking log_event
   raw_log_event(event_type,filename,"ASKING",0,stage);
-  fflush(log_file);
-  char answer[8];
 
-  fscanf(log_file,"%7s",answer);
+  char answer[8];
+  int bytes_recieved;
+  bytes_recieved=recv(log_socket,answer,8,0);
+  
+  //fscanf(log_file,"%7s",answer);
   pthread_mutex_unlock( &socketblock );
   
   if(strcmp(answer,"ALLOW")==0)
 	return 1;
   else if(strcmp(answer,"DENY")==0)
 	return 0;
-  else
+  else 
 	fprintf(stderr,"Protocol error, text should be ALLOW or DENY, got: %s",answer);
   return 0;
 }
@@ -972,7 +977,7 @@ static void * hookfs_init(struct fuse_conn_info *conn) {
 }
 
 static void hookfs_destroy() {
-	fflush(log_file);
+//	fflush(log_file);
 }
 
 static struct fuse_operations hookfs_oper = {
@@ -1124,45 +1129,45 @@ int main(int argc, char *argv[]) {
   
   char *log_socket_name=getenv("LOG_SOCKET");
   if(log_socket_name==NULL) {
-	  fprintf(stderr,"Using stderr as output for logs "
-			  "because the LOG_SOCKET environment variable isn't defined.\n");
-	  log_file=stderr;
-  } else {
-	if(strlen(log_socket_name)>=MAXSOCKETPATHLEN) {
-	  fprintf(stderr,"Unable to create a unix-socket %s: socket name is too long,exiting\n", log_socket_name);
+	  fprintf(stderr,"LOG_SOCKET environment variable isn't defined."
+			  "Are this library launched by server?\n");
 	  return 1;
-	}
+  } 
+  
+  if(strlen(log_socket_name)>=MAXSOCKETPATHLEN) {
+	fprintf(stderr,"Unable to create a unix-socket %s: socket name is too long,exiting\n", log_socket_name);
+	return 1;
+  }
 
-	log_socket=socket(AF_UNIX, SOCK_STREAM, 0);
-	if(log_socket==-1) {
-	  fprintf(stderr,"Unable to create a unix-socket %s: %s\n", log_socket_name, strerror(errno));
-	  return 1;
-	}
-	
-	struct sockaddr_un serveraddr;
-	memset(&serveraddr, 0, sizeof(serveraddr));
-	serveraddr.sun_family = AF_UNIX;
-	strcpy(serveraddr.sun_path, log_socket_name);
-	
-	int ret=connect(log_socket, (struct sockaddr *)&serveraddr, SUN_LEN(&serveraddr));
-	if(ret==-1) {
-	  fprintf(stderr,"Unable to connect a unix-socket: %s\n", strerror(errno));
-	  return 1;
-	}
-	
-	log_file=fdopen(log_socket,"a+");
-	
-	if(log_file==NULL) {
-	  fprintf(stderr,"Unable to open a socket for a steam writing: %s\n", strerror(errno));
-	  exit(1);
-	}
-	
-	ret=setvbuf(log_file,NULL,_IOFBF,IOBUFSIZE);
-	if(ret!=0){
-	  fprintf(stderr,"Unable to set a size of io buffer");
-	  exit(1);
-	} 
+  log_socket=socket(AF_UNIX, SOCK_SEQPACKET, 0);
+  if(log_socket==-1) {
+	fprintf(stderr,"Unable to create a unix-socket %s: %s\n", log_socket_name, strerror(errno));
+	return 1;
+  }
+  
+  struct sockaddr_un serveraddr;
+  memset(&serveraddr, 0, sizeof(serveraddr));
+  serveraddr.sun_family = AF_UNIX;
+  strcpy(serveraddr.sun_path, log_socket_name);
+  
+  int ret=connect(log_socket, (struct sockaddr *)&serveraddr, SUN_LEN(&serveraddr));
+  if(ret==-1) {
+	fprintf(stderr,"Unable to connect a unix-socket: %s\n", strerror(errno));
+	return 1;
   }
+    
+  //log_file=fdopen(log_socket,"a+");
+  
+  //if(log_file==NULL) {
+	//fprintf(stderr,"Unable to open a socket for a steam writing: %s\n", strerror(errno));
+	//exit(1);
+  //}
+  
+  //ret=setvbuf(log_file,NULL,_IOFBF,IOBUFSIZE);
+  //if(ret!=0){
+	//fprintf(stderr,"Unable to set a size of io buffer");
+	//exit(1);
+  //} 
   
   if (! try_chdir_to_mountpoint(args.argc, args.argv)) {
 	  return 1;
@@ -1170,7 +1175,7 @@ int main(int argc, char *argv[]) {
 
   umask(0);
   int res = fuse_main(args.argc, args.argv, &hookfs_oper, NULL);
-  fflush(log_file);
-  fclose(log_file);
+  //fflush(log_file);
+  //fclose(log_file);
   return res;
 }



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [gentoo-commits] proj/autodep:master commit in: logger/src/autodep/logfs/, logger/src/hook_fusefs/, logger/src/autodep/
@ 2011-06-26 17:18 Александр Берсенев
  0 siblings, 0 replies; 4+ messages in thread
From: Александр Берсенев @ 2011-06-26 17:18 UTC (permalink / raw
  To: gentoo-commits

commit:     def6b2dfe499271ac0fb1ff493f8fd13800962f4
Author:     Alexander Bersenev <bay <AT> hackerdom <DOT> ru>
AuthorDate: Sun Jun 26 23:18:26 2011 +0000
Commit:     Александр Берсенев <bay <AT> hackerdom <DOT> ru>
CommitDate: Sun Jun 26 23:18:26 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/autodep.git;a=commit;h=def6b2df

using epoll instead of select

---
 logger/src/autodep/logfs/fstracer.py |   62 +++++++++++++++++----------------
 logger/src/autodep/showfsevents.py   |    2 +-
 logger/src/hook_fusefs/hookfs.c      |    2 +-
 3 files changed, 34 insertions(+), 32 deletions(-)

diff --git a/logger/src/autodep/logfs/fstracer.py b/logger/src/autodep/logfs/fstracer.py
index dda7afe..a4a5b49 100644
--- a/logger/src/autodep/logfs/fstracer.py
+++ b/logger/src/autodep/logfs/fstracer.py
@@ -155,34 +155,38 @@ def getfsevents(prog_name,arguments,approach="hooklib",filterproc=defaultfilter)
 	  print "Launch likely was unsuccessful"
 	  sys.exit(1)
 	else:
-	  input = [sock_listen]
+	  epoll=select.epoll()
+	  epoll.register(sock_listen.fileno(), select.EPOLLIN)
+
 	  connects = 0;
-	  	  
-	  while input:
-		inputready,_,_ = select.select(input,[],[],5)
-		
-		for s in inputready:
-		  #print "!! len: %d" % len(buffers)
-		  if s == sock_listen:
-			ret = s.accept()
+	  clients={}
+	  stop=0
+	  
+	  while stop==0:
+		sock_events = epoll.poll(3)
+		for fileno, sock_event in sock_events:
+		  if fileno == sock_listen.fileno():
+			ret = sock_listen.accept()
 			if ret is None:
 			  pass
 			else:
 			  (client,addr)=ret
 			  connects+=1; # client accepted
-			  input.append(client)
-		  else:
+			  epoll.register(client.fileno(), select.EPOLLIN)
+			  clients[client.fileno()]=client
+		  elif sock_event & select.EPOLLHUP:
+			epoll.unregister(fileno)
+			clients[fileno].close()
+			del clients[fileno]
+			connects-=1
+			
+			if connects==0:
+			  stop=1
+			  break
+		  elif sock_event & select.EPOLLIN:
+			s=clients[fileno]
 			record=s.recv(8192)
 			
-			if not record:
-			  s.close()
-			  input.remove(s)
-			  connects-=1;
-			  if connects==0:
-				input.remove(sock_listen)
-				sock_listen.close()
-			  continue
-						
 			message=record.split("\0")
 			#print message
 			
@@ -198,8 +202,6 @@ def getfsevents(prog_name,arguments,approach="hooklib",filterproc=defaultfilter)
 				  
 			  else:
 				eventname,filename,stage,result=message[1:5]
-				#if stage != "unknown":
-				
 
 				if not stage in events:
 				  events[stage]=[{},{}]
@@ -235,19 +237,19 @@ def getfsevents(prog_name,arguments,approach="hooklib",filterproc=defaultfilter)
 			  print "IndexError while parsing %s"%record
 
 		
-		if len(input)==1 and connects==0: #or 
-		  # seems like there is no connect
-		  print "It seems like a logger module was unable to start or failed to finish" + \
+		if len(sock_events)==0 and len(clients)==0: 
+		#  # seems like there is no connect
+		  print "It seems like a logger module was unable to start or failed to finish\n" + \
 				"Check that you are not launching a suid program under non-root user."
 		  return []
-		if len(inputready)==0 and iszombie(pid):
-		  print "Child finished, but connection remains. Closing a connection"
-		  break
+		if len(clients)==0 and iszombie(pid):
+		 break
 
 	  os.wait()
   
-  #if len(events)==0:
-	#return []
+	  epoll.unregister(sock_listen.fileno())
+	  epoll.close()
+	  sock_listen.close()
 	
   return events
 

diff --git a/logger/src/autodep/showfsevents.py b/logger/src/autodep/showfsevents.py
index 444b96a..2b04709 100755
--- a/logger/src/autodep/showfsevents.py
+++ b/logger/src/autodep/showfsevents.py
@@ -12,7 +12,7 @@ if len(sys.argv)<2:
   print "Usage: showfsevents.py <command>"
   exit(1)
   
-events=logfs.fstracer.getfsevents(sys.argv[1], sys.argv[1:],approach="fusefs")
+events=logfs.fstracer.getfsevents(sys.argv[1], sys.argv[1:],approach="hooklib")
 print "Program finished, analyzing dependencies"
 # get unique filenames
 filenames={}

diff --git a/logger/src/hook_fusefs/hookfs.c b/logger/src/hook_fusefs/hookfs.c
index 8219994..24b6342 100644
--- a/logger/src/hook_fusefs/hookfs.c
+++ b/logger/src/hook_fusefs/hookfs.c
@@ -264,6 +264,7 @@ static void raw_log_event(const char *event_type, const char *filename, char *re
 */
 static void log_event(const char *event_type, const char *filename, char *result,int err, char* stage) {
   if(is_file_excluded(filename)) return;
+
 //  pthread_mutex_lock( &socketblock );
   raw_log_event(event_type,filename,result,err,stage);
 //  pthread_mutex_unlock( &socketblock );
@@ -281,7 +282,6 @@ static int is_event_allowed(const char *event_type,const char *filename, pid_t p
 
   // sending asking log_event
   raw_log_event(event_type,filename,"ASKING",0,stage);
-
   char answer[8];
   int bytes_recieved;
   bytes_recieved=recv(log_socket,answer,8,0);



^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-06-26 17:19 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-26 17:18 [gentoo-commits] proj/autodep:master commit in: logger/src/autodep/logfs/, logger/src/hook_fusefs/, logger/src/autodep/ Александр Берсенев
  -- strict thread matches above, loose matches on Subject: below --
2011-06-25 19:52 Александр Берсенев
2011-06-18 15:53 Александр Берсенев
2011-06-10  6:45 Александр Берсенев

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox