From 89b9ac31c66c1af6737ff3693618a727f1720213 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Fri, 7 Oct 2005 00:57:18 +0000 Subject: [PATCH] Bug-fix: clear the from_ext for the bounce message (not from a user). Simplify the bouncing of e-mails using smb_updatemsg() and the original message's from_ext convenience pointer. No need to call smb_init_idx() here since smb_addmsghdr()->putmsg() does this already (in the latest smblib). --- src/sbbs3/mailsrvr.c | 41 +++++++++-------------------------------- 1 file changed, 9 insertions(+), 32 deletions(-) diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c index 1e607ff16d..d1cbc53db8 100644 --- a/src/sbbs3/mailsrvr.c +++ b/src/sbbs3/mailsrvr.c @@ -3349,48 +3349,27 @@ BOOL bounce(smb_t* smb, smbmsg_t* msg, char* err, BOOL immediate) ,msg->from ,msg->to_net.addr); - if((i=smb_locksmbhdr(smb))!=SMB_SUCCESS) { - lprintf(LOG_WARNING,"0000 !BOUNCE ERROR %d (%s) locking message base" - ,i, smb->last_error); - return(FALSE); - } - - if((i=smb_lockmsghdr(smb,msg))!=SMB_SUCCESS) { - smb_unlocksmbhdr(smb); - lprintf(LOG_WARNING,"0000 !BOUNCE ERROR %d (%s) locking message header #%lu" - ,i, smb->last_error, msg->hdr.number); - return(FALSE); - } - - if((i=smb_putmsg(smb,msg))!=SMB_SUCCESS) { - smb_unlockmsghdr(smb,msg); - smb_unlocksmbhdr(smb); + if((i=smb_updatemsg(smb,msg))!=SMB_SUCCESS) { lprintf(LOG_ERR,"0000 !BOUNCE ERROR %d (%s) incrementing delivery attempt counter" ,i, smb->last_error); return(FALSE); } - if(!immediate && msg->hdr.delivery_attempts<startup->max_delivery_attempts) { - smb_unlockmsghdr(smb,msg); - smb_unlocksmbhdr(smb); + if(!immediate && msg->hdr.delivery_attempts < startup->max_delivery_attempts) return(TRUE); - } newmsg=*msg; /* Mark original message as deleted */ msg->hdr.attr|=MSG_DELETE; - i=smb_putmsg(smb,msg); - - smb_unlockmsghdr(smb,msg); - smb_unlocksmbhdr(smb); + i=smb_updatemsg(smb,msg); + if(msg->hdr.auxattr&MSG_FILEATTACH) + delfattach(&scfg,msg); if(i!=SMB_SUCCESS) { lprintf(LOG_ERR,"0000 !BOUNCE ERROR %d (%s) deleting message" ,i, smb->last_error); return(FALSE); } - if(msg->hdr.auxattr&MSG_FILEATTACH) - delfattach(&scfg,msg); if(msg->from_agent!=AGENT_PERSON /* don't bounce 'bounce messages' */ || (msg->idx.from==0 && msg->from_net.type==NET_NONE) @@ -3404,17 +3383,16 @@ BOOL bounce(smb_t* smb, smbmsg_t* msg, char* err, BOOL immediate) newmsg.hfield=NULL; newmsg.hfield_dat=NULL; newmsg.total_hfields=0; - newmsg.idx.to=newmsg.idx.from; - newmsg.idx.from=0; newmsg.hdr.delivery_attempts=0; SAFEPRINTF(str,"Delivery failure: %s",newmsg.subj); smb_hfield_str(&newmsg, SUBJECT, str); smb_hfield_str(&newmsg, RECIPIENT, newmsg.from); - if(newmsg.idx.to) { - sprintf(str,"%u",newmsg.idx.to); - smb_hfield_str(&newmsg, RECIPIENTEXT, str); + if(newmsg.from_ext!=NULL) { /* Back to sender */ + smb_hfield_str(&newmsg, RECIPIENTEXT, newmsg.from_ext); + newmsg.from_ext=NULL; /* Clear the sender extension */ } + if((newmsg.from_net.type==NET_QWK || newmsg.from_net.type==NET_INTERNET) && newmsg.reverse_path!=NULL) { smb_hfield(&newmsg, RECIPIENTNETTYPE, sizeof(newmsg.from_net.type), &newmsg.from_net.type); @@ -3441,7 +3419,6 @@ BOOL bounce(smb_t* smb, smbmsg_t* msg, char* err, BOOL immediate) smb_hfield_str(&newmsg, SMB_COMMENT, err); smb_hfield_str(&newmsg, SMB_COMMENT, "\r\nOriginal message text follows:\r\n"); - smb_init_idx(smb,&newmsg); if((i=smb_addmsghdr(smb,&newmsg,SMB_SELFPACK))!=SMB_SUCCESS) lprintf(LOG_ERR,"0000 !BOUNCE ERROR %d (%s) adding message header" ,i,smb->last_error); -- GitLab