diff --git a/src/sbbs3/msg_id.c b/src/sbbs3/msg_id.c index 5eb9b9eb17c9e63554d8219ad9f9f541dbbb9d5f..8d2923d8c1cedcecf6d0bd78f9d9bf40c30db02f 100644 --- a/src/sbbs3/msg_id.c +++ b/src/sbbs3/msg_id.c @@ -70,13 +70,22 @@ static ulong msgid_serialno(smbmsg_t* msg) /****************************************************************************/ /* Returns a FidoNet (FTS-9) message-ID */ +/* Returns NULL if the message is from FidoNet and doesn't have a MSGID */ +/* Pass NULL for msgid if (single-threaded) caller wishes to use static buf */ /****************************************************************************/ char* DLLCALL ftn_msgid(sub_t *sub, smbmsg_t* msg, char* msgid, size_t maxlen) { - if(msg->ftn_msgid!=NULL && *msg->ftn_msgid!=0) { - strncpy(msgid,msg->ftn_msgid,maxlen); - return(msg->ftn_msgid); + static char msgidbuf[256]; + + if(msgid == NULL) { + msgid = msgidbuf; + maxlen = sizeof(msgidbuf); } + if(msg->ftn_msgid!=NULL && *msg->ftn_msgid!=0) + return msg->ftn_msgid; + + if(msg->from_net.type == NET_FIDO) // Don't generate a message-ID for imported FTN messages + return NULL; safe_snprintf(msgid,maxlen ,"%lu.%s@%s %08lx" @@ -86,7 +95,7 @@ char* DLLCALL ftn_msgid(sub_t *sub, smbmsg_t* msg, char* msgid, size_t maxlen) ,msgid_serialno(msg) ); - return(msgid); + return msgid; } /****************************************************************************/ diff --git a/src/sbbs3/postmsg.cpp b/src/sbbs3/postmsg.cpp index 99353c1079e940f0a9c847594ba089f4ef383559..acf87ee9ba4afe295308c6d408351cc6e43c16c7 100644 --- a/src/sbbs3/postmsg.cpp +++ b/src/sbbs3/postmsg.cpp @@ -339,8 +339,9 @@ bool sbbs_t::postmsg(uint subnum, smbmsg_t *remsg, long wm_mode) /* Generate FTN (FTS-9) MSGID */ if(cfg.sub[subnum]->misc&SUB_FIDO) { - ftn_msgid(cfg.sub[subnum],&msg,msg_id,sizeof(msg_id)); - smb_hfield_str(&msg,FIDOMSGID,msg_id); + char* p; + if((p = ftn_msgid(cfg.sub[subnum],&msg,msg_id,sizeof(msg_id))) != NULL) + smb_hfield_str(&msg, FIDOMSGID, p); } /* Generate FidoNet Program Identifier */ @@ -512,8 +513,9 @@ extern "C" int DLLCALL savemsg(scfg_t* cfg, smb_t* smb, smbmsg_t* msg, client_t* /* Generate FidoNet MSGID (for FidoNet sub-boards) */ if(smb->subnum!=INVALID_SUB && cfg->sub[smb->subnum]->misc&SUB_FIDO && msg->ftn_msgid==NULL) { - ftn_msgid(cfg->sub[smb->subnum],msg,msg_id,sizeof(msg_id)); - smb_hfield_str(msg,FIDOMSGID,msg_id); + char* p; + if((p = ftn_msgid(cfg->sub[smb->subnum],msg,msg_id,sizeof(msg_id))) != NULL) + smb_hfield_str(msg, FIDOMSGID, p); } /* Generate FidoNet Program Identifier */ diff --git a/src/sbbs3/sbbsecho.c b/src/sbbs3/sbbsecho.c index fca70a70fef64e8666973b611770ddc84691f6b6..7c3a123c3cfeb77b24dbcad05ebde53bbc811712 100644 --- a/src/sbbs3/sbbsecho.c +++ b/src/sbbs3/sbbsecho.c @@ -4593,7 +4593,6 @@ static void write_export_ptr(int subnum, uint32_t ptr, const char* tag) void export_echomail(const char* sub_code, const nodecfg_t* nodecfg, bool rescan) { char str[256],tear,cr; - char msgid[256]; char* buf=NULL; char* minus; char* fmsgbuf=NULL; @@ -4796,8 +4795,9 @@ void export_echomail(const char* sub_code, const nodecfg_t* nodecfg, bool rescan if(msg.ftn_flags!=NULL) f+=sprintf(fmsgbuf+f,"\1FLAGS %.256s\r", msg.ftn_flags); - f+=sprintf(fmsgbuf+f,"\1MSGID: %.256s\r" - ,ftn_msgid(scfg.sub[subnum],&msg,msgid,sizeof(msgid))); + char* p = ftn_msgid(scfg.sub[subnum], &msg, NULL, 0); + if(p != NULL) + f += sprintf(fmsgbuf+f,"\1MSGID: %.256s\r", p); if(msg.ftn_reply!=NULL) /* use original REPLYID */ f+=sprintf(fmsgbuf+f,"\1REPLY: %.256s\r", msg.ftn_reply);