From fb43daf5a9764fa661a28dcf2ede988af7d8fd33 Mon Sep 17 00:00:00 2001 From: Rob Swindell <rob@synchro.net> Date: Sat, 16 Apr 2022 00:51:49 -0700 Subject: [PATCH] Implement duplicate new-user email address checking (optional) If a sysop wants to prevent new users from using an email address of an existing user, they can set SCFG->System->New User Values->Question Toggles->Force Unique E-mail/NetMail to "Yes". This partially addresses issue #127, at least for the terminal server. --- exec/load/sbbsdefs.js | 1 + src/sbbs3/newuser.cpp | 7 +++++-- src/sbbs3/sbbsdefs.h | 2 +- src/sbbs3/scfg/scfgsys.c | 30 ++++++++++++++++++------------ src/sbbs3/text.h | 2 +- src/sbbs3/text_defaults.c | 3 ++- 6 files changed, 28 insertions(+), 17 deletions(-) diff --git a/exec/load/sbbsdefs.js b/exec/load/sbbsdefs.js index 35f139f9a1..647de21927 100644 --- a/exec/load/sbbsdefs.js +++ b/exec/load/sbbsdefs.js @@ -231,6 +231,7 @@ var UQ_NOCOMMAS =(1<<17); /* Do not require commas in location */ var UQ_NONETMAIL =(1<<18); /* Don't ask for e-mail/netmail address */ var UQ_NOUPRLWR =(1<<19); /* Don't force upper/lower case strings */ var UQ_COLORTERM =(1<<20); /* Ask if new user has color terminal */ +var UQ_DUPNETMAIL =(1<<21); /* Don't allow duplicate netmail address */ /********************************************/ /********************************************/ diff --git a/src/sbbs3/newuser.cpp b/src/sbbs3/newuser.cpp index 9b4c60ecbd..75483bc5aa 100644 --- a/src/sbbs3/newuser.cpp +++ b/src/sbbs3/newuser.cpp @@ -322,8 +322,11 @@ BOOL sbbs_t::newuser() if(!online) return(FALSE); while(!(cfg.uq&UQ_NONETMAIL) && online && text[EnterNetMailAddress][0]) { bputs(text[EnterNetMailAddress]); - if(getstr(useron.netmail,LEN_NETMAIL,K_EDIT|K_AUTODEL|K_LINE|K_TRIM) - && !trashcan(useron.netmail,"email")) + if(getstr(useron.netmail,LEN_NETMAIL,K_EDIT|K_AUTODEL|K_LINE|K_TRIM) < 1 + || trashcan(useron.netmail,"email") + || ((cfg.uq & UQ_DUPNETMAIL) && userdatdupe(useron.number, U_NETMAIL, LEN_NETMAIL, useron.netmail))) + bputs(text[YouCantUseThatNetmail]); + else break; } useron.misc&=~NETMAIL; diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h index 0dbc53725d..3b122f064e 100644 --- a/src/sbbs3/sbbsdefs.h +++ b/src/sbbs3/sbbsdefs.h @@ -127,7 +127,7 @@ #define UQ_NONETMAIL (1L<<18) /* Don't ask for e-mail/netmail address */ #define UQ_NOUPRLWR (1L<<19) /* Don't force upper/lower case strings */ #define UQ_COLORTERM (1L<<20) /* Ask if new user has color terminal */ - +#define UQ_DUPNETMAIL (1L<<21) /* Don't allow duplicate e-mail address */ /* Different bits in sys_misc */ #define SM_CLOSED (1L<<0) /* System is clsoed to New Users */ diff --git a/src/sbbs3/scfg/scfgsys.c b/src/sbbs3/scfg/scfgsys.c index 5f60a9b1fa..b8de4dde61 100644 --- a/src/sbbs3/scfg/scfgsys.c +++ b/src/sbbs3/scfg/scfgsys.c @@ -1251,6 +1251,9 @@ void sys_cfg(void) sprintf(opt[i++],"%-27.27s %-3.3s" ,"E-mail/NetMail Address" ,cfg.uq&UQ_NONETMAIL ? "No":"Yes"); + sprintf(opt[i++],"%-27.27s %-3.3s" + ,"Force Unique E-mail/NetMail Address" + ,cfg.uq&UQ_DUPNETMAIL ? "Yes":"No"); sprintf(opt[i++],"%-27.27s %-3.3s" ,"Sex (Gender)" ,cfg.uq&UQ_SEX ? "Yes":"No"); @@ -1313,42 +1316,45 @@ void sys_cfg(void) cfg.uq^=UQ_NONETMAIL; break; case 7: - cfg.uq^=UQ_SEX; + cfg.uq^=UQ_DUPNETMAIL; break; case 8: - cfg.uq^=UQ_BIRTH; + cfg.uq^=UQ_SEX; break; case 9: - cfg.uq^=UQ_ADDRESS; + cfg.uq^=UQ_BIRTH; break; case 10: - cfg.uq^=UQ_LOCATION; + cfg.uq^=UQ_ADDRESS; break; case 11: - cfg.uq^=UQ_NOCOMMAS; + cfg.uq^=UQ_LOCATION; break; case 12: - cfg.uq^=UQ_PHONE; + cfg.uq^=UQ_NOCOMMAS; break; case 13: - cfg.uq^=UQ_NOEXASC; + cfg.uq^=UQ_PHONE; break; case 14: - cfg.uq^=UQ_XEDIT; + cfg.uq^=UQ_NOEXASC; break; case 15: - cfg.uq^=UQ_CMDSHELL; + cfg.uq^=UQ_XEDIT; break; case 16: - cfg.uq^=UQ_NODEF; + cfg.uq^=UQ_CMDSHELL; break; case 17: + cfg.uq^=UQ_NODEF; + break; + case 18: cfg.uq^=UQ_COLORTERM; break; - } + } } break; - } + } } break; case 11: /* Advanced Options */ diff --git a/src/sbbs3/text.h b/src/sbbs3/text.h index 7b331e4673..99c770c633 100644 --- a/src/sbbs3/text.h +++ b/src/sbbs3/text.h @@ -397,7 +397,7 @@ enum { ,WhichXtrnProg ,UserRunningXtrn ,RemoveNodeLockQ - ,MinimumModemSpeed + ,YouCantUseThatNetmail ,NoNodeAccess ,NodeLocked ,UnknownUser diff --git a/src/sbbs3/text_defaults.c b/src/sbbs3/text_defaults.c index 8f83a7aabc..1ee8817e51 100644 --- a/src/sbbs3/text_defaults.c +++ b/src/sbbs3/text_defaults.c @@ -641,7 +641,8 @@ const char * const text_defaults[TOTAL_TEXT]={ "\x6e\x6f\x64\x65\x20\x25\x64\x2e\x0d\x0a\x0d\x0a\x54\x72\x79\x20\x61\x67\x61\x69\x6e\x20\x6c\x61\x74\x65\x72\x2e\x0d\x0a\x0d\x0a" "" // 385 UserRunningXtrn ,"\x52\x65\x6d\x6f\x76\x65\x20\x6e\x6f\x64\x65\x20\x6c\x6f\x63\x6b" // 386 RemoveNodeLockQ - ,"\x55\x4e\x55\x53\x45\x44\x33\x38\x37" // 387 MinimumModemSpeed + ,"\x01\x6e\x59\x6f\x75\x20\x63\x61\x6e\x27\x74\x20\x75\x73\x65\x20\x74\x68\x61\x74\x20\x6d\x61\x69\x6c\x20\x61\x64\x64\x72\x65\x73" + "\x73\x20\x28\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x20\x6f\x72\x20\x69\x6e\x76\x61\x6c\x69\x64\x29\x2e\x0d\x0a" // 387 YouCantUseThatNetmail ,"\x59\x6f\x75\x20\x64\x6f\x20\x6e\x6f\x74\x20\x68\x61\x76\x65\x20\x73\x75\x66\x66\x69\x63\x69\x65\x6e\x74\x20\x61\x63\x63\x65\x73" "\x73\x20\x66\x6f\x72\x20\x74\x68\x69\x73\x20\x6e\x6f\x64\x65\x2e" // 388 NoNodeAccess ,"\x01\x6e\x01\x72\x01\x68\x0d\x0a\x53\x6f\x72\x72\x79\x2c\x20\x74\x68\x69\x73\x20\x6e\x6f\x64\x65\x20\x69\x73\x20\x74\x65\x6d\x70" -- GitLab