Index: /trunk/configure.ac
===================================================================
--- /trunk/configure.ac	(revision 401)
+++ /trunk/configure.ac	(revision 402)
@@ -12,5 +12,5 @@
 dnl start
 dnl
-AM_INIT_AUTOMAKE(samhain, 3.0.3)
+AM_INIT_AUTOMAKE(samhain, 3.0.4)
 AC_DEFINE([SAMHAIN], 1, [Application is samhain])
 AC_CANONICAL_HOST
Index: /trunk/docs/Changelog
===================================================================
--- /trunk/docs/Changelog	(revision 401)
+++ /trunk/docs/Changelog	(revision 402)
@@ -1,3 +1,9 @@
-3.0.3:
+3.0.4:
+	* fix verbosity of message for alerts on already deleted watches
+	  (set it to debug - suggested by xrx)
+	* fix extraneous error messages about file not found from
+	  sh_fInotify_init_internal() (bug reports by xrx and aj)
+
+3.0.3 (28-03-2012):
 	* fix potential deadlock in sh_ext_popen()
 	* make sure sh_processes_readps cannot hang forever
@@ -10,8 +16,8 @@
 	* fixed lacking support for O_NOATIME on 64bit linux
 
-3.0.2a:
+3.0.2a (23-02-2012):
 	* Fix compile error on Solaris 10
 
-3.0.2:
+3.0.2 (16-02-2012):
 	* change sql init scripts to make bigint fields unsigned (problem
 	  reported by A. Sabitov)
Index: /trunk/src/sh_fInotify.c
===================================================================
--- /trunk/src/sh_fInotify.c	(revision 401)
+++ /trunk/src/sh_fInotify.c	(revision 402)
@@ -363,13 +363,24 @@
 	  if ((errnum == ENOENT) || (errnum == EEXIST))
 	    {
-	      char * epath = sh_util_safe_name (filename);
-	      SH_MUTEX_LOCK(mutex_thread_nolog);
-	      sh_error_handle( (class == SH_LEVEL_ALLIGNORE) ? 
-			       ShDFLevel[class] : 
-			       ShDFLevel[SH_ERR_T_FILE], 
-			       FIL__, __LINE__, errnum, MSG_E_SUBGPATH, 
-			       errbuf, _("sh_fInotify_init_internal"), epath);
-	      SH_MUTEX_UNLOCK(mutex_thread_nolog);
-	      SH_FREE(epath);
+	      /* (1) Did it exist at init ? 
+	       */
+	      if (sh_hash_have_it (filename) >= 0)
+		{
+		  /* (2) Do we want to report on it ?
+		   */
+		  if (S_FALSE == sh_ignore_chk_del(filename))
+		    {
+		      char * epath = sh_util_safe_name (filename);
+
+		      SH_MUTEX_LOCK(mutex_thread_nolog);
+		      sh_error_handle( (class == SH_LEVEL_ALLIGNORE) ? 
+				       ShDFLevel[class] : 
+				       ShDFLevel[SH_ERR_T_FILE], 
+				       FIL__, __LINE__, errnum, MSG_E_SUBGPATH, 
+				       errbuf, _("sh_fInotify_init_internal"), epath);
+		      SH_MUTEX_UNLOCK(mutex_thread_nolog);
+		      SH_FREE(epath);
+		    }
+		}
 	    }
 	  else
@@ -457,5 +468,5 @@
 
 	  SH_MUTEX_LOCK(mutex_thread_nolog);
-	  sh_error_handle((-1), FIL__, __LINE__, event->wd, MSG_E_SUBGEN, 
+	  sh_error_handle(SH_ERR_ALL, FIL__, __LINE__, event->wd, MSG_E_SUBGEN, 
 			  _("Watch removed: file path unknown"), 
 			  _("sh_fInotify_process"));
Index: /trunk/src/sh_files.c
===================================================================
--- /trunk/src/sh_files.c	(revision 401)
+++ /trunk/src/sh_files.c	(revision 402)
@@ -451,4 +451,5 @@
 		  CLEAR_SH_FFLAG_REPORTED(ptr->is_reported);
 		}
+
 	      /* Catchall
 	       */
Index: /trunk/src/sh_hash.c
===================================================================
--- /trunk/src/sh_hash.c	(revision 401)
+++ /trunk/src/sh_hash.c	(revision 402)
@@ -1239,9 +1239,11 @@
   sh_do_decode(ft.checksum, sl_strlen(ft.checksum));
   
-  
+  /* TXT entries are c_mode[0] != 'l' and do not get decoded 
+   */
   if (ft.c_mode[0] == 'l' && linkpath != notalink)
     {  
       sh_do_decode(linkpath, sl_strlen(linkpath));
     }
+
   if ((ft.mark & REC_FLAGS_ATTR) != 0)
     {  
@@ -1772,4 +1774,6 @@
   }
 
+  /* NOTE: TXT entries are c_mode[0] != 'l' and do not get decoded 
+   */
   if (buf != NULL /* && buf->c_mode[0] == 'l' */ && buf->link_path != NULL) 
     {  
Index: /trunk/src/sh_unix.c
===================================================================
--- /trunk/src/sh_unix.c	(revision 401)
+++ /trunk/src/sh_unix.c	(revision 402)
@@ -4252,5 +4252,5 @@
       SH_FREE(linknamebuf);
     }
-  else /* not a link */
+  else /* not a link, theFile->c_mode[0] != 'l' */
     {
       if (content)
