[Aide] Question about report output

Pablo Virolainen pablo at vapaa.fi
Wed Nov 29 17:47:01 EET 2006


There was a bug indeed. Now it should be fixed.

Pablo Virolainen
-------------- next part --------------
? aide.db
? retry.diff
Index: include/db.h
===================================================================
RCS file: /cvsroot/aide/aide/include/db.h,v
retrieving revision 1.3
diff -u -r1.3 db.h
--- include/db.h	15 Nov 2005 16:17:11 -0000	1.3
+++ include/db.h	29 Nov 2006 15:46:16 -0000
@@ -35,6 +35,7 @@
 int db_close(db_config*);
 
 void free_db_line(db_line* dl);
+void print_attr_diff(int errorlevel,char* filename1,char* filename2,DB_ATTR_TYPE attr1,DB_ATTR_TYPE attr2);
 
 extern const char* db_names[];
 extern const int db_value[];
Index: src/compare_db.c
===================================================================
RCS file: /cvsroot/aide/aide/src/compare_db.c,v
retrieving revision 1.19
diff -u -r1.19 compare_db.c
--- src/compare_db.c	27 Oct 2006 20:44:38 -0000	1.19
+++ src/compare_db.c	29 Nov 2006 15:46:17 -0000
@@ -945,8 +945,11 @@
       int localignorelist=old->attr ^ ((db_line*)r->data)->attr;
       
       if ((localignorelist&(~(DB_NEWFILE|DB_RMFILE)))!=0) {
+	print_attr_diff(2,old->filename,NULL,old->attr,((db_line*)r->data)->attr);
+	/*
 	error(2,"File %s in databases has different attributes, %llx,%llx\n",
               old->filename,old->attr,((db_line*)r->data)->attr);
+	*/
       }
       
       localignorelist|=ignorelist;
Index: src/db.c
===================================================================
RCS file: /cvsroot/aide/aide/src/db.c,v
retrieving revision 1.16
diff -u -r1.16 db.c
--- src/db.c	25 Nov 2006 10:07:40 -0000	1.16
+++ src/db.c	29 Nov 2006 15:46:17 -0000
@@ -129,6 +129,69 @@
   db_lnkcount } ;       /* "count",  */
 
 
+void print_attr_diff(int errorlevel,char* filename1,char* filename2,DB_ATTR_TYPE attr1,DB_ATTR_TYPE attr2)
+{
+	static char* stdmsg=
+		"File \"%s\"%s%s%s in databases has different attributes "
+		"%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s"
+		"%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s"
+		"%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s"
+		"%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n";
+	const char* p[128];
+	char* delim_l,*delim_r;
+	int count=0,pos=0;
+	
+
+	if (attr1==0 || attr2==0) {
+		return;
+	}
+
+	if (filename2==NULL) {
+		filename2="";
+		delim_l="";
+		delim_r="";
+	} else {
+		delim_l=" \"";
+		delim_r="\" ";
+	}
+	
+	while(attr1!=attr2) {
+		if ((attr1&1) != (attr2&1)) {
+			p[count]=db_names[pos];
+			count++;
+			if (attr1&1) {
+				p[count]=":N ";
+			} else {
+				p[count]=":O ";
+			}
+			count++;
+		}
+		if (pos!=db_unknown) {
+			pos++;
+		}
+		attr1=attr1>>1;
+		attr2=attr2>>1;
+	}
+
+	if (count==0) {
+		/* Programming error */
+		abort();
+	}
+	for(;count<128;count++) {
+		p[count]="";
+	}
+	error(errorlevel,stdmsg,filename1,delim_l,filename2,delim_r,
+	      p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9], p[10], p[11], p[12], p[13], p[14], p[15],
+	      p[16], p[17], p[18], p[19], p[20], p[21], p[22], p[23], p[24], p[25], p[26], p[27], p[28], p[29], p[30], p[31],
+	      p[32], p[33], p[34], p[35], p[36], p[37], p[38], p[39], p[40], p[41], p[42], p[43], p[44], p[45], p[46], p[47],
+	      p[48], p[49], p[50], p[51], p[52], p[53], p[54], p[55], p[56], p[57], p[58], p[59], p[60], p[61], p[62], p[63],
+	      p[64], p[65], p[66], p[67], p[68], p[69], p[70], p[71], p[72], p[73], p[74], p[75], p[76], p[77], p[78], p[79],
+	      p[80], p[81], p[82], p[83], p[84], p[85], p[86], p[87], p[88], p[89], p[90], p[91], p[92], p[93], p[94], p[95],
+	      p[96], p[97], p[98], p[99], p[100], p[101], p[102], p[103], p[104], p[105], p[106], p[107], p[108], p[109], p[110], p[111], 
+	      p[112], p[113], p[114], p[115], p[116], p[117], p[118], p[119], p[120], p[121], p[122], p[123], p[124], p[125], p[126], p[127]
+	      );
+}
+  
 int db_init(int db)
 {
   void* rv=NULL;
Index: src/gen_list.c
===================================================================
RCS file: /cvsroot/aide/aide/src/gen_list.c,v
retrieving revision 1.29
diff -u -r1.29 gen_list.c
--- src/gen_list.c	24 Nov 2006 18:25:02 -0000	1.29
+++ src/gen_list.c	29 Nov 2006 15:46:18 -0000
@@ -1218,8 +1218,11 @@
   if((node->checked&DB_OLD)&&(node->checked&DB_NEW)){
     localignorelist=(node->new_data->attr^node->old_data->attr);
     if (localignorelist!=0) {
+      print_attr_diff(2,node->old_data->filename,NULL,node->old_data->attr,node->new_data->attr);
+      /*
       error(2,"File %s in databases has different attributes, %llx,%llx\n",
             node->old_data->filename,node->old_data->attr,node->new_data->attr);
+      */
     }
     
     localignorelist|=ignorelist;
@@ -1267,8 +1270,11 @@
       localignorelist=(oldData->attr^newData->attr)&(~(DB_NEWFILE|DB_RMFILE));
 
       if (localignorelist!=0) {
+	print_attr_diff(5,newData->filename,oldData->filename,newData->attr,oldData->attr);
+	/*
         error(5,"File \"%s\" \"%s\" in databases has different attributes (here3), %llx,%llx\n",
   	    newData->filename,oldData->filename,oldData->attr,newData->attr);
+	*/
       }
     
       localignorelist|=ignorelist|DB_CTIME;


More information about the Aide mailing list