From 4be8e46c41abf2360b04c0f89a745a017d7775a4 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Tue, 24 Mar 2009 20:40:17 +0000
Subject: [PATCH] Define and use SMB_HASH_SOURCE_DUPE, which doesn't include
 the message SUBJECT (subjects can/should not be used for dupe message
 checking).

---
 src/sbbs3/chksmb.c     | 4 ++--
 src/sbbs3/postmsg.cpp  | 2 +-
 src/sbbs3/qwktomsg.cpp | 2 +-
 src/sbbs3/sbbsecho.c   | 2 +-
 src/sbbs3/smbutil.c    | 2 +-
 src/smblib/smbadd.c    | 2 +-
 src/smblib/smbdefs.h   | 1 +
 src/smblib/smbhash.c   | 4 ++--
 8 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/src/sbbs3/chksmb.c b/src/sbbs3/chksmb.c
index 13d3774eb2..d2f3106781 100644
--- a/src/sbbs3/chksmb.c
+++ b/src/sbbs3/chksmb.c
@@ -344,10 +344,10 @@ int main(int argc, char **argv)
 
 		if(!(smb.status.attr&SMB_EMAIL) && chkhash) {
 			/* Look-up the message hashes */
-			hashes=smb_msghashes(&msg,body,SMB_HASH_SOURCE_ALL);
+			hashes=smb_msghashes(&msg,body,SMB_HASH_SOURCE_DUPE);
 			if(hashes!=NULL 
 				&& hashes[0]!=NULL 
-				&& (i=smb_findhash(&smb,hashes,NULL,SMB_HASH_SOURCE_ALL,/* mark */TRUE ))
+				&& (i=smb_findhash(&smb,hashes,NULL,SMB_HASH_SOURCE_DUPE,/* mark */TRUE ))
 					!=SMB_SUCCESS) {
 				for(h=0;hashes[h]!=NULL;h++) {
 					if(hashes[h]->flags&SMB_HASH_MARKED)
diff --git a/src/sbbs3/postmsg.cpp b/src/sbbs3/postmsg.cpp
index 17687dd623..d758ee258c 100644
--- a/src/sbbs3/postmsg.cpp
+++ b/src/sbbs3/postmsg.cpp
@@ -425,7 +425,7 @@ extern "C" int DLLCALL savemsg(scfg_t* cfg, smb_t* smb, smbmsg_t* msg, client_t*
 	ushort	xlat=XLAT_NONE;
 	int 	i;
 	int		storage=SMB_SELFPACK;
-	long	dupechk_hashes=SMB_HASH_SOURCE_ALL;
+	long	dupechk_hashes=SMB_HASH_SOURCE_DUPE;
 
 	if(msg==NULL)
 		return(SMB_FAILURE);
diff --git a/src/sbbs3/qwktomsg.cpp b/src/sbbs3/qwktomsg.cpp
index ff6b8089cb..1cc4df9404 100644
--- a/src/sbbs3/qwktomsg.cpp
+++ b/src/sbbs3/qwktomsg.cpp
@@ -221,7 +221,7 @@ bool sbbs_t::qwk_import_msg(FILE *qwk_fp, char *hdrblk, ulong blocks
 	uint16_t	net_type;
 	ushort		xlat=XLAT_NONE;
 	int			storage=SMB_SELFPACK;
-	long		dupechk_hashes=SMB_HASH_SOURCE_ALL;
+	long		dupechk_hashes=SMB_HASH_SOURCE_DUPE;
 
 	if(subnum!=INVALID_SUB
 		&& (hdrblk[0]=='*' || hdrblk[0]=='+' || cfg.sub[subnum]->misc&SUB_PONLY))
diff --git a/src/sbbs3/sbbsecho.c b/src/sbbs3/sbbsecho.c
index 3582106fe6..0e3ea2ecf9 100644
--- a/src/sbbs3/sbbsecho.c
+++ b/src/sbbs3/sbbsecho.c
@@ -2236,7 +2236,7 @@ int fmsgtosmsg(uchar* fbuf, fmsghdr_t fmsghdr, uint user, uint subnum)
 	ushort	xlat=XLAT_NONE,net;
 	ulong	l,m,length,bodylen,taillen,crc;
 	ulong	save;
-	long	dupechk_hashes=SMB_HASH_SOURCE_ALL;
+	long	dupechk_hashes=SMB_HASH_SOURCE_DUPE;
 	faddr_t faddr,origaddr,destaddr;
 	smb_t*	smbfile;
 	char	fname[MAX_PATH+1];
diff --git a/src/sbbs3/smbutil.c b/src/sbbs3/smbutil.c
index 484b95cef2..e3b349cdb0 100644
--- a/src/sbbs3/smbutil.c
+++ b/src/sbbs3/smbutil.c
@@ -183,7 +183,7 @@ void postmsg(char type, char* to, char* to_number, char* to_address,
 	int 		i;
 	ushort		agent=AGENT_SMBUTIL;
 	smbmsg_t	msg;
-	long		dupechk_hashes=SMB_HASH_SOURCE_ALL;
+	long		dupechk_hashes=SMB_HASH_SOURCE_DUPE;
 
 	/* Read message text from stream (file or stdin) */
 	msgtxtlen=0;
diff --git a/src/smblib/smbadd.c b/src/smblib/smbadd.c
index c336419492..93bc61d34e 100644
--- a/src/smblib/smbadd.c
+++ b/src/smblib/smbadd.c
@@ -85,7 +85,7 @@ int SMBCALL smb_addmsg(smb_t* smb, smbmsg_t* msg, int storage, long dupechk_hash
 		msg->hdr.number=smb->status.last_msg+1;
 		if(!(smb->status.attr&(SMB_EMAIL|SMB_NOHASH))) {
 
-			hashes=smb_msghashes(msg,body,SMB_HASH_SOURCE_ALL);
+			hashes=smb_msghashes(msg,body,SMB_HASH_SOURCE_DUPE);
 
 			if(smb_findhash(smb, hashes, &found, dupechk_hashes, /* mark? */FALSE)==SMB_SUCCESS) {
 				safe_snprintf(smb->last_error,sizeof(smb->last_error)
diff --git a/src/smblib/smbdefs.h b/src/smblib/smbdefs.h
index 633be8e44a..6ee40f7dcd 100644
--- a/src/smblib/smbdefs.h
+++ b/src/smblib/smbdefs.h
@@ -469,6 +469,7 @@ enum {
 #define SMB_HASH_SOURCE_MASK	0x1f
 #define SMB_HASH_SOURCE_NONE	0
 #define SMB_HASH_SOURCE_ALL		0xff
+#define SMB_HASH_SOURCE_DUPE	((1<<SMB_HASH_SOURCE_BODY)|(1<<SMB_HASH_SOURCE_MSG_ID)|(1<<SMB_HASH_SOURCE_FTN_ID))
 
 typedef struct _PACK {
 
diff --git a/src/smblib/smbhash.c b/src/smblib/smbhash.c
index 2a87ff6157..d75fde471c 100644
--- a/src/smblib/smbhash.c
+++ b/src/smblib/smbhash.c
@@ -289,9 +289,9 @@ int SMBCALL smb_hashmsg(smb_t* smb, smbmsg_t* msg, const uchar* text, BOOL updat
 	if(smb->status.attr&(SMB_EMAIL|SMB_NOHASH))
 		return(SMB_SUCCESS);
 
-	hashes=smb_msghashes(msg,text,SMB_HASH_SOURCE_ALL);
+	hashes=smb_msghashes(msg,text,SMB_HASH_SOURCE_DUPE);
 
-	if(smb_findhash(smb, hashes, &found, SMB_HASH_SOURCE_ALL, update)==SMB_SUCCESS && !update) {
+	if(smb_findhash(smb, hashes, &found, SMB_HASH_SOURCE_DUPE, update)==SMB_SUCCESS && !update) {
 		retval=SMB_DUPE_MSG;
 		safe_snprintf(smb->last_error,sizeof(smb->last_error)
 			,"duplicate %s: %s found in message #%lu"
-- 
GitLab