diff --git a/src/smblib/smbhash.c b/src/smblib/smbhash.c index 483a72133aba6d2d2e5e85045f2c0d7109301200..015ff8ae2857cf8b9d4396ab3279651220f07543 100644 --- a/src/smblib/smbhash.c +++ b/src/smblib/smbhash.c @@ -63,6 +63,7 @@ int SMBCALL smb_findhash(smb_t* smb, hash_t** compare, hash_t* found_hash, if(count && source_mask!=SMB_HASH_SOURCE_NONE) { rewind(smb->hash_fp); + clearerr(smb->hash_fp); while(!feof(smb->hash_fp)) { if(smb_fread(smb,&hash,sizeof(hash),smb->hash_fp)!=sizeof(hash)) break; @@ -85,13 +86,13 @@ int SMBCALL smb_findhash(smb_t* smb, hash_t** compare, hash_t* found_hash, continue; /* wrong pre-process flags */ if((compare[c]->flags&hash.flags&SMB_HASH_MASK)==0) continue; /* no matching hashes */ - if(compare[c]->flags&hash.flags&SMB_HASH_CRC16 + if((compare[c]->flags&hash.flags&SMB_HASH_CRC16) && compare[c]->crc16!=hash.crc16) continue; /* wrong crc-16 */ - if(compare[c]->flags&hash.flags&SMB_HASH_CRC32 + if((compare[c]->flags&hash.flags&SMB_HASH_CRC32) && compare[c]->crc32!=hash.crc32) continue; /* wrong crc-32 */ - if(compare[c]->flags&hash.flags&SMB_HASH_MD5 + if((compare[c]->flags&hash.flags&SMB_HASH_MD5) && memcmp(compare[c]->md5,hash.md5,sizeof(hash.md5))) continue; /* wrong MD5 */ @@ -278,7 +279,7 @@ hash_t** SMBCALL smb_msghashes(smbmsg_t* msg, const uchar* body, long source_mas } break; } - if((hash=smb_hashstr(msg->hdr.number, t, SMB_HASH_SOURCE_SUBJECT,flags, msg->subj))!=NULL) + if((hash=smb_hashstr(msg->hdr.number, t, SMB_HASH_SOURCE_SUBJECT, flags, p))!=NULL) hashes[h++]=hash; }