From d7cdd58e1c7057ccdee3a25e67cee56e471e4038 Mon Sep 17 00:00:00 2001 From: Rob Swindell <rob@synchro.net> Date: Fri, 4 Feb 2022 19:35:22 -0800 Subject: [PATCH] Detect and reject duplicate internal code prefixes Don't let (or at least try to prevent) a sysop create a duplicate message group or file library internal code prefix (which could lead to duplicate internal codes for subs and dirs, pretty easily and accidentally). --- src/sbbs3/scfg/scfg.h | 6 ++++-- src/sbbs3/scfg/scfgmsg.c | 24 +++++++++++++++++++++--- src/sbbs3/scfg/scfgxfr2.c | 24 +++++++++++++++++++++--- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/src/sbbs3/scfg/scfg.h b/src/sbbs3/scfg/scfg.h index eb933a83d0..677a1897e0 100644 --- a/src/sbbs3/scfg/scfg.h +++ b/src/sbbs3/scfg/scfg.h @@ -68,8 +68,10 @@ "For a complete list of the supported command-line specifiers, see:\n" \ "`http://wiki.synchro.net/config:cmdline`\n" -#define strInvalidCode "Invalid Internal Code Rejected!" -#define strDuplicateCode "Duplicate Internal Code Rejected!" +#define strInvalidCode "Invalid Internal Code Rejected!" +#define strInvalidCodePrefix "Invalid Internal Code Prefix Rejected!" +#define strDuplicateCode "Duplicate Internal Code Rejected!" +#define strDuplicateCodePrefix "Duplicate Internal Code Prefix Rejected!" /*************/ /* Constants */ diff --git a/src/sbbs3/scfg/scfgmsg.c b/src/sbbs3/scfg/scfgmsg.c index 41eb00317e..761c5b9729 100644 --- a/src/sbbs3/scfg/scfgmsg.c +++ b/src/sbbs3/scfg/scfgmsg.c @@ -40,6 +40,16 @@ char *utos(char *str) return(out); } +static bool code_prefix_exists(const char* prefix) +{ + size_t i; + + for(i=0; i < cfg.total_grps; i++) + if(cfg.grp[i]->code_prefix[0] && stricmp(cfg.grp[i]->code_prefix, prefix) == 0) + return true; + return false; +} + static bool new_grp(unsigned new_grpnum) { grp_t* new_group = malloc(sizeof(grp_t)); @@ -546,9 +556,13 @@ void msgs_cfg() uifc.helpbuf=grp_code_prefix_help; if(uifc.input(WIN_MID|WIN_SAV,0,0,"Internal Code Prefix", code_prefix, LEN_CODE, K_EDIT|K_UPPER) < 0) continue; + if (code_prefix_exists(code_prefix)) { + uifc.msg(strDuplicateCodePrefix); + continue; + } if (code_prefix[0] != 0 && !code_ok(code_prefix)) { uifc.helpbuf=invalid_code; - uifc.msg("Invalid Code Prefix"); + uifc.msg(strInvalidCodePrefix); continue; } if (!new_grp(grpnum)) @@ -682,11 +696,15 @@ void msgs_cfg() if(uifc.input(WIN_MID|WIN_SAV,0,17,"Internal Code Prefix" ,code_prefix,LEN_CODE,K_EDIT|K_UPPER) < 0) continue; - if(code_prefix[0] == 0 || code_ok(code_prefix)) { + if(stricmp(code_prefix, cfg.grp[grpnum]->code_prefix) == 0) + break; + if(code_prefix_exists(code_prefix)) + uifc.msg(strDuplicateCodePrefix); + else if(code_prefix[0] == 0 || code_ok(code_prefix)) { SAFECOPY(cfg.grp[grpnum]->code_prefix, code_prefix); } else { uifc.helpbuf = invalid_code; - uifc.msg("Invalid Code Prefix"); + uifc.msg(strInvalidCodePrefix); } break; } diff --git a/src/sbbs3/scfg/scfgxfr2.c b/src/sbbs3/scfg/scfgxfr2.c index 823a6bda59..fbcd171cad 100644 --- a/src/sbbs3/scfg/scfgxfr2.c +++ b/src/sbbs3/scfg/scfgxfr2.c @@ -74,6 +74,16 @@ static bool new_dir(unsigned new_dirnum, unsigned libnum) return true; } +static bool code_prefix_exists(const char* prefix) +{ + size_t i; + + for(i=0; i < cfg.total_libs; i++) + if(cfg.lib[i]->code_prefix[0] && stricmp(cfg.lib[i]->code_prefix, prefix) == 0) + return true; + return false; +} + static bool new_lib(unsigned new_libnum) { lib_t* new_library = malloc(sizeof(lib_t)); @@ -284,9 +294,13 @@ void xfer_cfg() uifc.helpbuf=lib_code_prefix_help; if(uifc.input(WIN_MID|WIN_SAV,0,0,"Internal Code Prefix", code_prefix, LEN_CODE, K_EDIT|K_UPPER) < 0) continue; + if (code_prefix_exists(code_prefix)) { + uifc.msg(strDuplicateCodePrefix); + continue; + } if (code_prefix[0] != 0 && !code_ok(code_prefix)) { uifc.helpbuf=invalid_code; - uifc.msg("Invalid Code Prefix"); + uifc.msg(strInvalidCodePrefix); continue; } @@ -429,11 +443,15 @@ void xfer_cfg() if(uifc.input(WIN_MID|WIN_SAV,0,17,"Internal Code Prefix" ,code_prefix,LEN_CODE,K_EDIT|K_UPPER) < 0) continue; - if(code_prefix[0] == 0 || code_ok(code_prefix)) { + if(stricmp(code_prefix, cfg.lib[i]->code_prefix) == 0) + break; + if(code_prefix_exists(code_prefix)) + uifc.msg(strDuplicateCodePrefix); + else if(code_prefix[0] == 0 || code_ok(code_prefix)) { SAFECOPY(cfg.lib[i]->code_prefix, code_prefix); } else { uifc.helpbuf = invalid_code; - uifc.msg("Invalid Code Prefix"); + uifc.msg(strInvalidCodePrefix); } break; } -- GitLab