Skip to content
Snippets Groups Projects
Commit 7914da93 authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Add option to delete bad incoming packets (not rename them)

So a sysop now has 3 choices for SBBSecho's handling of incoming bad packets:
 - delete them
 - rename them *.bad
 - rename them *.reason.bad (the default)

If SBBSecho is configured to rename bad packets, but the rename fails, the
error is logged (as before) but the packet is not deleted (this is a change
from previous behavior).

Always log the *reason* a pkt was determined bad in the "Bad packet detected"
log message.
parent 9a253736
No related branches found
No related tags found
1 merge request!463MRC mods by Codefenix (2024-10-20)
Pipeline #4078 passed
...@@ -92,8 +92,8 @@ void global_settings(void) ...@@ -92,8 +92,8 @@ void global_settings(void)
,cfg.sort_nodelist ? "Yes":"No"); ,cfg.sort_nodelist ? "Yes":"No");
snprintf(opt[i++],MAX_OPLN-1,"%-30s %-3.3s","Delete Processed Packets" snprintf(opt[i++],MAX_OPLN-1,"%-30s %-3.3s","Delete Processed Packets"
,cfg.delete_packets ? "Yes":"No"); ,cfg.delete_packets ? "Yes":"No");
snprintf(opt[i++],MAX_OPLN-1,"%-30s %-3.3s","Verbose Bad Packet Filenames" snprintf(opt[i++],MAX_OPLN-1,"%-30s %s","Incoming Bad Packets"
,cfg.verbose_bad_packet_names ? "Yes":"No"); ,cfg.delete_bad_packets ? "Deleted" : cfg.verbose_bad_packet_names ? "Renamed *.reason.bad" : "Renamed *.bad");
sprintf(opt[i++], "%-30s %s", "BSY Mutex File Timeout", duration_to_vstr(cfg.bsy_timeout, duration, sizeof(duration))); sprintf(opt[i++], "%-30s %s", "BSY Mutex File Timeout", duration_to_vstr(cfg.bsy_timeout, duration, sizeof(duration)));
if(cfg.flo_mailer) { if(cfg.flo_mailer) {
...@@ -169,8 +169,8 @@ void global_settings(void) ...@@ -169,8 +169,8 @@ void global_settings(void)
"`Delete Processed Packets` instructs SBBSecho to delete packet files\n" "`Delete Processed Packets` instructs SBBSecho to delete packet files\n"
" after they've been imported (as one would normally expect).\n" " after they've been imported (as one would normally expect).\n"
"\n" "\n"
"`Verbose Bad Packet Filenames` instructs SBBSecho to include the `reason` an\n" "`Incoming Bad Packets` can be `Deleted` or `Renamed` (*.bad) and optionally\n"
" incoming packet is considered `bad` in the renamed packet filename.\n" " include the `reason` in the renamed packet filename (the default).\n"
"\n" "\n"
"`BSY Mutex File Timeout` determines the maximum age of an existing\n" "`BSY Mutex File Timeout` determines the maximum age of an existing\n"
" mutex file (`*.bsy`) before SBBSecho will act as though the mutex\n" " mutex file (`*.bsy`) before SBBSecho will act as though the mutex\n"
...@@ -326,6 +326,12 @@ void global_settings(void) ...@@ -326,6 +326,12 @@ void global_settings(void)
} }
case 13: case 13:
{ {
int k = !cfg.delete_bad_packets;
switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&k,0
,"Delete Bad Incoming Packets (.pkt files) When Detected", uifcYesNoOpts)) {
case 0: cfg.delete_bad_packets = true;
break;
case 1: cfg.delete_bad_packets = false;
int k = !cfg.verbose_bad_packet_names; int k = !cfg.verbose_bad_packet_names;
switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&k,0 switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&k,0
,"Include Reason in Renamed Bad Packet Filenames", uifcYesNoOpts)) { ,"Include Reason in Renamed Bad Packet Filenames", uifcYesNoOpts)) {
...@@ -334,6 +340,8 @@ void global_settings(void) ...@@ -334,6 +340,8 @@ void global_settings(void)
} }
break; break;
} }
break;
}
case 14: case 14:
duration_to_vstr(cfg.bsy_timeout, duration, sizeof(duration)); duration_to_vstr(cfg.bsy_timeout, duration, sizeof(duration));
if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "BSY Mutex File Timeout", duration, 10, K_EDIT) > 0) if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "BSY Mutex File Timeout", duration, 10, K_EDIT) > 0)
......
...@@ -204,6 +204,8 @@ void get_default_echocfg(sbbsecho_cfg_t* cfg) ...@@ -204,6 +204,8 @@ void get_default_echocfg(sbbsecho_cfg_t* cfg)
cfg->bso_lock_attempts = 60; cfg->bso_lock_attempts = 60;
cfg->bso_lock_delay = 10; cfg->bso_lock_delay = 10;
cfg->delete_packets = true; cfg->delete_packets = true;
cfg->delete_bad_packets = false;
cfg->verbose_bad_packet_names = true;
cfg->delete_netmail = true; cfg->delete_netmail = true;
cfg->echomail_notify = true; cfg->echomail_notify = true;
cfg->kill_empty_netmail = true; cfg->kill_empty_netmail = true;
...@@ -218,7 +220,6 @@ void get_default_echocfg(sbbsecho_cfg_t* cfg) ...@@ -218,7 +220,6 @@ void get_default_echocfg(sbbsecho_cfg_t* cfg)
cfg->auto_utf8 = true; cfg->auto_utf8 = true;
cfg->strip_soft_cr = true; cfg->strip_soft_cr = true;
cfg->require_linked_node_cfg = true; cfg->require_linked_node_cfg = true;
cfg->verbose_bad_packet_names = true;
cfg->min_free_diskspace = 10*1024*1024; cfg->min_free_diskspace = 10*1024*1024;
cfg->max_logs_kept = 10; cfg->max_logs_kept = 10;
cfg->max_log_size = 10*1024*1024; cfg->max_log_size = 10*1024*1024;
...@@ -277,6 +278,8 @@ bool sbbsecho_read_ini(sbbsecho_cfg_t* cfg) ...@@ -277,6 +278,8 @@ bool sbbsecho_read_ini(sbbsecho_cfg_t* cfg)
cfg->use_outboxes = iniGetBool(ini, ROOT_SECTION, "UseOutboxes", cfg->use_outboxes); cfg->use_outboxes = iniGetBool(ini, ROOT_SECTION, "UseOutboxes", cfg->use_outboxes);
cfg->auto_utf8 = iniGetBool(ini, ROOT_SECTION, "AutoUTF8", cfg->auto_utf8); cfg->auto_utf8 = iniGetBool(ini, ROOT_SECTION, "AutoUTF8", cfg->auto_utf8);
cfg->sort_nodelist = iniGetBool(ini, ROOT_SECTION, "SortNodeList", cfg->sort_nodelist); cfg->sort_nodelist = iniGetBool(ini, ROOT_SECTION, "SortNodeList", cfg->sort_nodelist);
cfg->delete_packets = iniGetBool(ini, ROOT_SECTION, "DeletePackets", cfg->delete_packets);
cfg->delete_bad_packets = iniGetBool(ini, ROOT_SECTION, "DeleteBadPackets", cfg->delete_bad_packets);
cfg->verbose_bad_packet_names = iniGetBool(ini, ROOT_SECTION, "VerboseBadPacketNames", cfg->verbose_bad_packet_names); cfg->verbose_bad_packet_names = iniGetBool(ini, ROOT_SECTION, "VerboseBadPacketNames", cfg->verbose_bad_packet_names);
/* EchoMail options: */ /* EchoMail options: */
...@@ -307,7 +310,6 @@ bool sbbsecho_read_ini(sbbsecho_cfg_t* cfg) ...@@ -307,7 +310,6 @@ bool sbbsecho_read_ini(sbbsecho_cfg_t* cfg)
cfg->ignore_netmail_local_attr = iniGetBool(ini, ROOT_SECTION, "IgnoreNetmailLocalAttr", cfg->ignore_netmail_local_attr); cfg->ignore_netmail_local_attr = iniGetBool(ini, ROOT_SECTION, "IgnoreNetmailLocalAttr", cfg->ignore_netmail_local_attr);
cfg->kill_empty_netmail = iniGetBool(ini, ROOT_SECTION, "KillEmptyNetmail", cfg->kill_empty_netmail); cfg->kill_empty_netmail = iniGetBool(ini, ROOT_SECTION, "KillEmptyNetmail", cfg->kill_empty_netmail);
cfg->delete_netmail = iniGetBool(ini, ROOT_SECTION, "DeleteNetmail", cfg->delete_netmail); cfg->delete_netmail = iniGetBool(ini, ROOT_SECTION, "DeleteNetmail", cfg->delete_netmail);
cfg->delete_packets = iniGetBool(ini, ROOT_SECTION, "DeletePackets", cfg->delete_packets);
cfg->max_netmail_age = (ulong)iniGetDuration(ini, ROOT_SECTION, "MaxNetmailAge", cfg->max_netmail_age); cfg->max_netmail_age = (ulong)iniGetDuration(ini, ROOT_SECTION, "MaxNetmailAge", cfg->max_netmail_age);
/* BinkP options: */ /* BinkP options: */
...@@ -568,6 +570,7 @@ bool sbbsecho_write_ini(sbbsecho_cfg_t* cfg) ...@@ -568,6 +570,7 @@ bool sbbsecho_write_ini(sbbsecho_cfg_t* cfg)
iniSetBool(&ini, ROOT_SECTION, "KillEmptyNetmail", cfg->kill_empty_netmail ,style); iniSetBool(&ini, ROOT_SECTION, "KillEmptyNetmail", cfg->kill_empty_netmail ,style);
iniSetBool(&ini, ROOT_SECTION, "DeleteNetmail", cfg->delete_netmail ,style); iniSetBool(&ini, ROOT_SECTION, "DeleteNetmail", cfg->delete_netmail ,style);
iniSetBool(&ini, ROOT_SECTION, "DeletePackets", cfg->delete_packets ,style); iniSetBool(&ini, ROOT_SECTION, "DeletePackets", cfg->delete_packets ,style);
iniSetBool(&ini, ROOT_SECTION, "DeleteBadPackets", cfg->delete_bad_packets ,style);
iniSetBool(&ini, ROOT_SECTION, "VerboseBadPacketNames", cfg->verbose_bad_packet_names ,style); iniSetBool(&ini, ROOT_SECTION, "VerboseBadPacketNames", cfg->verbose_bad_packet_names ,style);
iniSetBool(&ini, ROOT_SECTION, "IgnoreNetmailDestAddr" ,cfg->ignore_netmail_dest_addr ,style); iniSetBool(&ini, ROOT_SECTION, "IgnoreNetmailDestAddr" ,cfg->ignore_netmail_dest_addr ,style);
......
...@@ -5664,7 +5664,9 @@ void find_stray_packets(void) ...@@ -5664,7 +5664,9 @@ void find_stray_packets(void)
bool rename_bad_packet(const char* packet, const char* reason) bool rename_bad_packet(const char* packet, const char* reason)
{ {
lprintf(LOG_WARNING, "Bad packet detected: %s", packet); lprintf(LOG_WARNING, "Bad packet detected (reason: %s): %s", reason, packet);
if(cfg.delete_bad_packets)
return delfile(packet, __LINE__);
char badpkt[MAX_PATH+1]; char badpkt[MAX_PATH+1];
SAFECOPY(badpkt, packet); SAFECOPY(badpkt, packet);
char* ext = getfext(badpkt); char* ext = getfext(badpkt);
...@@ -5674,11 +5676,7 @@ bool rename_bad_packet(const char* packet, const char* reason) ...@@ -5674,11 +5676,7 @@ bool rename_bad_packet(const char* packet, const char* reason)
sprintf(ext, ".%s.bad", reason); sprintf(ext, ".%s.bad", reason);
else else
strcpy(ext, ".bad"); strcpy(ext, ".bad");
if(mv(packet, badpkt, /* copy: */false) == 0) return mv(packet, badpkt, /* copy: */false) == 0;
return true;
if(cfg.delete_packets)
delfile(packet, __LINE__);
return false;
} }
void import_packets(const char* inbound, nodecfg_t* inbox, bool secure) void import_packets(const char* inbound, nodecfg_t* inbox, bool secure)
......
...@@ -199,6 +199,7 @@ typedef struct { ...@@ -199,6 +199,7 @@ typedef struct {
bool kill_empty_netmail; bool kill_empty_netmail;
bool delete_netmail; bool delete_netmail;
bool delete_packets; bool delete_packets;
bool delete_bad_packets;
bool verbose_bad_packet_names; bool verbose_bad_packet_names;
bool echomail_notify; bool echomail_notify;
bool ignore_netmail_dest_addr; bool ignore_netmail_dest_addr;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment