diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c index 9f3b5cf34115863c2b097d5a479dd2cf32d84b57..e57b7782e3d00efeb2b66d23aa10e3b2adef5f1b 100644 --- a/src/sbbs3/mailsrvr.c +++ b/src/sbbs3/mailsrvr.c @@ -1168,7 +1168,7 @@ static BOOL chk_email_addr(SOCKET socket, char* p, char* host_name, char* host_i lprintf("%04d !SMTP BLOCKED SOURCE: %s" ,socket, addr); sprintf(tmp,"Blocked source e-mail address: %s", addr); - spamlog(&scfg, "SMTP", "REFUSED", tmp, host_name, host_ip, to); + spamlog(&scfg, "SMTP", "MAIL REFUSED", tmp, host_name, host_ip, to); sockprintf(socket, "554 Sender not allowed."); return(FALSE); @@ -1331,17 +1331,17 @@ static void smtp_thread(void* arg) /* SPAM Filters (mail-abuse.org) */ dnsbl_result.s_addr = dns_blacklisted(smtp.client_addr.sin_addr.s_addr,dnsbl); if(dnsbl_result.s_addr) { - lprintf("%04d SMTP BLACKLISTED SERVER on %s: %s [%s] = %s" + lprintf("%04d !SMTP BLACKLISTED SERVER on %s: %s [%s] = %s" ,socket, dnsbl, host_name, host_ip, inet_ntoa(dnsbl_result)); if(startup->options&MAIL_OPT_DNSBL_REFUSE) { sprintf(str,"Listed on %s as %s", dnsbl, inet_ntoa(dnsbl_result)); - spamlog(&scfg, "SMTP", "REFUSED", str, host_name, host_ip, NULL); + spamlog(&scfg, "SMTP", "SESSION REFUSED", str, host_name, host_ip, NULL); sockprintf(socket ,"550 Mail from %s refused due to listing at %s" ,host_ip, dnsbl); mail_close_socket(socket); thread_down(); - lprintf("%04d !SMTP REFUSED MAIL from blacklisted server" + lprintf("%04d !SMTP REFUSED SESSION from blacklisted server" ,socket); return; } @@ -1413,7 +1413,7 @@ static void smtp_thread(void* arg) if(dnsbl_result.s_addr) { if(startup->options&MAIL_OPT_DNSBL_IGNORE) { - lprintf("%04d SMTP IGNORED MAIL from blacklisted server" + lprintf("%04d !SMTP IGNORED MAIL from blacklisted server" ,socket); sprintf(str,"Listed on %s as %s", dnsbl, inet_ntoa(dnsbl_result)); spamlog(&scfg, "SMTP", "IGNORED", str, host_name, host_ip, rcpt_addr); @@ -1421,14 +1421,19 @@ static void smtp_thread(void* arg) sockprintf(socket,SMTP_OK); continue; } - /* flag message as spam (should this be X-DNSBL?) */ - sprintf(str,"X-RBL: %s is listed on %s as %s" - ,host_ip, dnsbl, inet_ntoa(dnsbl_result)); - smb_hfield(&msg,RFC822HEADER,strlen(str),str); - lprintf("%04d SMTP FLAGGED MAIL from blacklisted server" - ,socket); - sprintf(str,"Listed on %s as %s", dnsbl, inet_ntoa(dnsbl_result)); - spamlog(&scfg, "SMTP", "FLAGGED", str, host_name, host_ip, rcpt_addr); + /* tag message as spam (should this be X-DNSBL?) */ + if(startup->dnsbl_hdr[0]) { + sprintf(str,"%s: %s is listed on %s as %s" + ,startup->dnsbl_hdr, host_ip + ,dnsbl, inet_ntoa(dnsbl_result)); + smb_hfield(&msg,RFC822HEADER,strlen(str),str); + lprintf("%04d !SMTP TAGGED MAIL HEADER from blacklisted server with: %s" + ,socket, startup->dnsbl_hdr); + } + if(startup->dnsbl_hdr[0] || startup->dnsbl_tag[0]) { + sprintf(str,"Listed on %s as %s", dnsbl, inet_ntoa(dnsbl_result)); + spamlog(&scfg, "SMTP", "TAGGED", str, host_name, host_ip, rcpt_addr); + } } if(telegram==TRUE) { /* Telegram */ @@ -1731,15 +1736,18 @@ static void smtp_thread(void* arg) ,socket, p, reverse_path); sprintf(tmp,"Blocked subject (%s) from: %s" ,p, reverse_path); - spamlog(&scfg, "SMTP", "REFUSED", tmp, host_name, host_ip, rcpt_addr); + spamlog(&scfg, "SMTP", "MAIL REFUSED", tmp, host_name, host_ip, rcpt_addr); sockprintf(socket, "554 Subject not allowed."); break; } - if(dnsbl_result.s_addr && startup->dnsbl_flag[0]) { + if(dnsbl_result.s_addr && startup->dnsbl_tag[0] + && !(startup->options&MAIL_OPT_DNSBL_IGNORE)) { sprintf(str,"%.*s: %.*s" - ,(int)sizeof(str)/2, startup->dnsbl_flag + ,(int)sizeof(str)/2, startup->dnsbl_tag ,(int)sizeof(str)/2, p); p=str; + lprintf("%04d !SMTP TAGGED MAIL SUBJECT from blacklisted server with: %s" + ,socket, startup->dnsbl_tag); } smb_hfield(&msg, SUBJECT, (ushort)strlen(p), p); strlwr(p); @@ -1984,7 +1992,7 @@ static void smtp_thread(void* arg) ,socket, MAX_RECIPIENTS); sprintf(tmp,"Maximum recipient count (%d) from: %s" ,MAX_RECIPIENTS, reverse_path); - spamlog(&scfg, "SMTP", "REFUSED", tmp, host_name, host_ip, rcpt_addr); + spamlog(&scfg, "SMTP", "MAIL REFUSED", tmp, host_name, host_ip, rcpt_addr); sockprintf(socket, "552 Too many recipients"); continue; } @@ -1995,11 +2003,22 @@ static void smtp_thread(void* arg) ,socket, rcpt_addr, reverse_path); sprintf(str,"Blocked recipient e-mail address from: %s" ,reverse_path); - spamlog(&scfg, "SMTP", "REFUSED", str, host_name, host_ip, rcpt_addr); + spamlog(&scfg, "SMTP", "MAIL REFUSED", str, host_name, host_ip, rcpt_addr); sockprintf(socket, "550 Unknown User:%s", buf+8); continue; } + if(dnsbl_result.s_addr && startup->options&MAIL_OPT_DNSBL_BADUSER) { + lprintf("%04d !SMTP REFUSED MAIL from blacklisted server" + ,socket); + sprintf(str,"Listed on %s as %s", dnsbl, inet_ntoa(dnsbl_result)); + spamlog(&scfg, "SMTP", "MAIL REFUSED", str, host_name, host_ip, NULL); + sockprintf(socket + ,"550 Mail from %s refused due to listing at %s" + ,host_ip, dnsbl); + continue; + } + /* Check for full address aliases */ p=alias(&scfg,p,alias_buf); if(p==alias_buf) @@ -2037,7 +2056,7 @@ static void smtp_thread(void* arg) ,socket, reverse_path, host_ip, p); sprintf(tmp,"Relay attempt from: %s to: %s" ,reverse_path, p); - spamlog(&scfg, "SMTP", "REFUSED", tmp, host_name, host_ip, rcpt_addr); + spamlog(&scfg, "SMTP", "MAIL REFUSED", tmp, host_name, host_ip, rcpt_addr); if(startup->options&MAIL_OPT_ALLOW_RELAY) sockprintf(socket, "553 Relaying through this server " "requires authentication. " diff --git a/src/sbbs3/mailsrvr.h b/src/sbbs3/mailsrvr.h index 29c06180af85232baa00827f53e83609aa1624a5..70a6cead8fa87c38fbe03e5e588607b85527e452 100644 --- a/src/sbbs3/mailsrvr.h +++ b/src/sbbs3/mailsrvr.h @@ -79,7 +79,9 @@ typedef struct { char relay_server[128]; char dns_server[128]; char default_user[128]; - char dnsbl_flag[128]; + char dnsbl_tag[32]; // Tag to add to blacklisted subject + char dnsbl_hdr[32]; // Header field to add to msg header + char reserved_string[64]; char reserved_path6[128]; char reserved_path5[128]; char reserved_path4[128]; @@ -106,6 +108,7 @@ typedef struct { #define MAIL_OPT_ALLOW_RELAY (1<<14) /* Allow relays from stored user IPs */ #define MAIL_OPT_DNSBL_REFUSE (1<<15) /* Refuse session, return error */ #define MAIL_OPT_DNSBL_IGNORE (1<<16) /* Dump mail, return success */ +#define MAIL_OPT_DNSBL_BADUSER (1<<17) /* Refuse mail (bad user name) */ #define MAIL_OPT_LOCAL_TIMEZONE (1<<30) /* Don't force UTC/GMT */ #define MAIL_OPT_MUTE (1<<31)