There was a bug indeed. Now it should be fixed.
Pablo Virolainen
? 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;
_______________________________________________ Aide mailing list Aide@cs.tut.fi https://mailman.cs.tut.fi/mailman/listinfo/aide