diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c index 08f01cca969548bf23e9fbe28e6210bb83dde656..e3871d3c56663e21b27f298c981a21a0f0786f22 100644 --- a/src/sbbs3/mailsrvr.c +++ b/src/sbbs3/mailsrvr.c @@ -2631,24 +2631,6 @@ static int chk_received_hdr(SOCKET socket,const char* prot,const char *buf,IN_AD return(dnsbl_result->s_addr); } -static void strip_char(char* str, char ch) -{ - char* src; - char* p; - char* tmp = strdup(str); - - if(tmp == NULL) - return; - p=tmp; - for(src = str; *src; src++) { - if(*src != ch) - *(p++) = *src; - } - *p=0; - strcpy(str, tmp); - free(tmp); -} - static void parse_mail_address(char* p ,char* name, size_t name_len ,char* addr, size_t addr_len) @@ -2684,7 +2666,7 @@ static void parse_mail_address(char* p if(tp) *tp=0; sprintf(name,"%.*s",(int)name_len,p); truncsp(name); - strip_char(name, '\\'); + strip_char(name, name, '\\'); } /* Decode quoted-printable content-transfer-encoded text */ @@ -4015,7 +3997,7 @@ static void smtp_thread(void* arg) continue; } /* RFC822 Header parsing */ - strip_char(buf, '\r'); /* There should be no bare carriage returns in header fields */ + strip_char(buf, buf, '\r'); /* There should be no bare carriage returns in header fields */ if(startup->options&MAIL_OPT_DEBUG_RX_HEADER) lprintf(LOG_DEBUG,"%04d %s %s",socket, client.protocol, buf); diff --git a/src/sbbs3/rechocfg.c b/src/sbbs3/rechocfg.c index 971608a2cf77c4afd3cf977b87a1233160cdb9b8..67316186214e308b063a65851137f7425d1dcac3 100644 --- a/src/sbbs3/rechocfg.c +++ b/src/sbbs3/rechocfg.c @@ -230,6 +230,7 @@ void get_default_echocfg(sbbsecho_cfg_t* cfg) cfg->auto_add_subs = true; cfg->auto_add_to_areafile = true; cfg->auto_utf8 = true; + cfg->strip_soft_cr = true; cfg->min_free_diskspace = 10*1024*1024; } diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index ca69c300db720b10ae114dad7b7b59d3146336d5..e184332582d1b26f17933ec9924906a5ab0100ed 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -1160,6 +1160,7 @@ extern "C" { DLLEXPORT char * strip_space(const char *str, char* dest); DLLEXPORT char * prep_file_desc(const char *str, char* dest); DLLEXPORT char * strip_ctrl(const char *str, char* dest); + DLLEXPORT char * strip_char(const char* str, char* dest, char); DLLEXPORT char * net_addr(net_t* net); DLLEXPORT BOOL valid_ctrl_a_attr(char a); DLLEXPORT BOOL valid_ctrl_a_code(char a); diff --git a/src/sbbs3/sbbsecho.c b/src/sbbs3/sbbsecho.c index 99a788b48c3388150ed9ede758d7e38d860b029f..1278a5426074455104ee7df2b2ac18178d5fef8d 100644 --- a/src/sbbs3/sbbsecho.c +++ b/src/sbbs3/sbbsecho.c @@ -3475,8 +3475,7 @@ int fmsgtosmsg(char* fbuf, fmsghdr_t* hdr, uint user, uint subnum) continue; } - if(ch == '\n' || - (ch == FIDO_SOFT_CR && cfg.strip_soft_cr)) + if(ch == '\n') continue; if(cr && (!strncmp((char *)fbuf+l,"--- ",4) || !strncmp((char *)fbuf+l,"---\r",4))) @@ -3549,6 +3548,10 @@ int fmsgtosmsg(char* fbuf, fmsghdr_t* hdr, uint user, uint subnum) if(smb_msg_is_utf8(&msg)) msg.hdr.auxattr |= MSG_HFIELDS_UTF8; + else { + if(cfg.strip_soft_cr) + strip_char((const char*)sbody, (char*)sbody, FIDO_SOFT_CR); + } if(subnum==INVALID_SUB && !bodylen && !taillen && cfg.kill_empty_netmail) { lprintf(LOG_INFO,"Empty NetMail - Ignored "); diff --git a/src/sbbs3/str_util.c b/src/sbbs3/str_util.c index 7ca637b7aa3292f0f03811f120cab8b03a796e09..e0adfdfdb12e133d3ac37cb564e359741150c6b3 100644 --- a/src/sbbs3/str_util.c +++ b/src/sbbs3/str_util.c @@ -115,6 +115,21 @@ char* strip_space(const char *str, char* dest) return dest; } +char* strip_char(const char* str, char* dest, char ch) +{ + const char* src; + + if(dest == NULL && (dest = strdup(str)) == NULL) + return NULL; + char* retval = dest; + for(src = str; *src != '\0'; src++) { + if(*src != ch) + *(dest++) = *src; + } + *dest = '\0'; + return retval; +} + char* prep_file_desc(const char *str, char* dest) { int i,j;