diff --git a/src/sbbs3/fido.cpp b/src/sbbs3/fido.cpp index f2378f3c1f056719987013850730da848976b592..2792f480331ab5ce402a04b13b5657512ae0644a 100644 --- a/src/sbbs3/fido.cpp +++ b/src/sbbs3/fido.cpp @@ -1,7 +1,5 @@ /* Synchronet FidoNet-related routines */ -/* $Id: fido.cpp,v 1.82 2020/07/15 06:12:56 rswindell Exp $ */ - /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * @@ -15,21 +13,9 @@ * See the GNU General Public License for more details: gpl.txt or * * http://www.fsf.org/copyleft/gpl.html * * * - * Anonymous FTP access to the most recent released source is available at * - * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net * - * * - * Anonymous CVS access to the development source and modification history * - * is available at cvs.synchro.net:/cvsroot/sbbs, example: * - * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login * - * (just hit return, no password is necessary) * - * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src * - * * * For Synchronet coding style and modification guidelines, see * * http://www.synchro.net/source.html * * * - * You are encouraged to submit any modifications (preferably in Unix diff * - * format) via e-mail to mods@synchro.net * - * * * Note: If this box doesn't appear square, then you need to fix your tabs. * ****************************************************************************/ @@ -94,39 +80,3 @@ bool sbbs_t::lookup_netuser(char *into) fclose(stream); return(false); } - -/****************************************************************************/ -/* Returns the FidoNet address kept in str as ASCII. */ -/****************************************************************************/ -faddr_t atofaddr(scfg_t* cfg, char *str) -{ - char *p; - faddr_t addr; - - addr.zone=addr.net=addr.node=addr.point=0; - if((p=strchr(str,':'))!=NULL) { - addr.zone=atoi(str); - addr.net=atoi(p+1); - } - else { - if(cfg->total_faddrs) - addr.zone=cfg->faddr[0].zone; - else - addr.zone=1; - addr.net=atoi(str); - } - if(!addr.zone) /* no such thing as zone 0 */ - addr.zone=1; - if((p=strchr(str,'/'))!=NULL) - addr.node=atoi(p+1); - else { - if(cfg->total_faddrs) - addr.net=cfg->faddr[0].net; - else - addr.net=1; - addr.node=atoi(str); - } - if((p=strchr(str,'.'))!=NULL) - addr.point=atoi(p+1); - return(addr); -} diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c index 90fbb8ae3f1ba61828af54740eded516379336a8..b7d15523a225bcef9b36eeff2fd0a436a2575c36 100644 --- a/src/sbbs3/mailsrvr.c +++ b/src/sbbs3/mailsrvr.c @@ -2971,6 +2971,7 @@ static void smtp_thread(void* arg) if(startup->inbound_sound[0] && !(startup->options&MAIL_OPT_MUTE)) PlaySound(startup->inbound_sound, NULL, SND_ASYNC|SND_FILENAME); #endif + SAFEPRINTF(domain_list,"%sdomains.cfg",scfg.ctrl_dir); addr_len=sizeof(server_addr); @@ -4664,7 +4665,6 @@ static void smtp_thread(void* arg) *cp=0; dest_port=atoi(cp+1); } - SAFEPRINTF(domain_list,"%sdomains.cfg",scfg.ctrl_dir); if((stricmp(dest_host,scfg.sys_inetaddr)!=0 && stricmp(dest_host,startup->host_name)!=0 && findstr(dest_host,domain_list)==FALSE) @@ -4927,7 +4927,10 @@ static void smtp_thread(void* arg) && scfg.sys_misc&SM_FWDTONET && (user.misc&NETMAIL || forward) && tp!=NULL && smb_netaddr_type(user.netmail)==NET_INTERNET - && !strstr(tp,scfg.sys_inetaddr)) { + && stricmp(tp + 1, scfg.sys_inetaddr) != 0 + && stricmp(tp + 1, startup->host_name) != 0 + && findstr(tp + 1, domain_list)==FALSE + ) { lprintf(LOG_INFO,"%04d %s %s Forwarding to: %s" ,socket, client.protocol, client_id, user.netmail); fprintf(rcptlst,"%s=%u\n",smb_hfieldtype(RECIPIENTNETTYPE),NET_INTERNET); diff --git a/src/sbbs3/netmail.cpp b/src/sbbs3/netmail.cpp index 457ca30eaa02980ff84a712be10c3b0bf248d2c4..e8a3e6ae68ca8994e07eb6dc74f1f667c3bb7390 100644 --- a/src/sbbs3/netmail.cpp +++ b/src/sbbs3/netmail.cpp @@ -1,9 +1,5 @@ -/* netmail.cpp */ - /* Synchronet network mail-related functions */ -/* $Id: netmail.cpp,v 1.69 2020/05/01 00:10:07 rswindell Exp $ */ - /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * @@ -17,30 +13,25 @@ * See the GNU General Public License for more details: gpl.txt or * * http://www.fsf.org/copyleft/gpl.html * * * - * Anonymous FTP access to the most recent released source is available at * - * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net * - * * - * Anonymous CVS access to the development source and modification history * - * is available at cvs.synchro.net:/cvsroot/sbbs, example: * - * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login * - * (just hit return, no password is necessary) * - * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src * - * * * For Synchronet coding style and modification guidelines, see * * http://www.synchro.net/source.html * * * - * You are encouraged to submit any modifications (preferably in Unix diff * - * format) via e-mail to mods@synchro.net * - * * * Note: If this box doesn't appear square, then you need to fix your tabs. * ****************************************************************************/ #include "sbbs.h" #include "qwk.h" -faddr_t atofaddr(scfg_t* cfg, char *str); void pt_zone_kludge(fmsghdr_t hdr,int fido); +/****************************************************************************/ +/* Returns the FidoNet address (struct) parsed from str (in ASCII text). */ +/****************************************************************************/ +static faddr_t atofaddr(scfg_t* cfg, const char *str) +{ + return smb_atofaddr(&cfg->faddr[0], str); +} + /****************************************************************************/ /* Send FidoNet/QWK/Internet NetMail from BBS */ /****************************************************************************/ @@ -1431,18 +1422,35 @@ bool sbbs_t::qnetmail(const char *into, const char *subj, long mode, smb_t* resm extern "C" BOOL is_supported_netmail_addr(scfg_t* cfg, const char* addr) { + const char* p; + fidoaddr_t faddr; + + if((p = strchr(addr, '@')) == NULL) + return FALSE; + p++; switch (smb_netaddr_type(addr)) { case NET_FIDO: - return INT_TO_BOOL(cfg->total_faddrs && (cfg->netmail_misc&NMAIL_ALLOW)); + if(!(cfg->netmail_misc&NMAIL_ALLOW)) + return FALSE; + if(cfg->total_faddrs < 1) + return FALSE; + faddr = atofaddr(cfg, p); + for(int i = 0; i < cfg->total_faddrs; i++) + if(memcmp(&cfg->faddr[i], &faddr, sizeof(faddr)) == 0) + return FALSE; + return TRUE; case NET_INTERNET: - return INT_TO_BOOL(cfg->inetmail_misc&NMAIL_ALLOW); + if(!(cfg->inetmail_misc&NMAIL_ALLOW)) + return FALSE; + if(stricmp(p, cfg->sys_inetaddr) == 0) + return FALSE; + char domain_list[MAX_PATH + 1]; + SAFEPRINTF(domain_list, "%sdomains.cfg", cfg->ctrl_dir); + return findstr(p, domain_list) == FALSE; case NET_QWK: { char fulladdr[256] = ""; - const char* p = strchr(addr, '@'); - if(p == NULL) - return FALSE; - qwk_route(cfg, p + 1, fulladdr, sizeof(fulladdr)-1); + qwk_route(cfg, p, fulladdr, sizeof(fulladdr)-1); return fulladdr[0] != 0; } default: diff --git a/src/sbbs3/pack_qwk.cpp b/src/sbbs3/pack_qwk.cpp index 5cce065994c9bb1ed1e510745c8482f4d10fffe6..6c3371a1c1e08516cbe082bbbc68b01747698a1e 100644 --- a/src/sbbs3/pack_qwk.cpp +++ b/src/sbbs3/pack_qwk.cpp @@ -570,16 +570,17 @@ bool sbbs_t::pack_qwk(char *packet, ulong *msgcnt, bool prepack) time_t elapsed = time(NULL)-start; if(elapsed < 1) elapsed = 1; + byte_estimate_to_str(ftell(qwk), tmp, sizeof(tmp), 1024, 1); if(online == ON_REMOTE) - bprintf("\r\n\r\n\1n\1hPacked %lu messages (%lu bytes) in %lu seconds " + bprintf("\r\n\r\n\1n\1hPacked %lu messages (%s bytes) in %lu seconds " "(%lu messages/second)." ,(*msgcnt)+mailmsgs - ,ftell(qwk) - ,elapsed + ,tmp + ,(ulong)elapsed ,((*msgcnt)+mailmsgs) / elapsed); - lprintf(LOG_INFO, "packed %lu messages (%lu bytes) in %lu seconds (%lu msgs/sec)" + lprintf(LOG_INFO, "packed %lu messages (%s bytes) in %lu seconds (%lu msgs/sec)" ,(*msgcnt)+mailmsgs - ,ftell(qwk) + ,tmp ,(ulong)elapsed ,((*msgcnt)+mailmsgs)/elapsed); }