From 4e11a66b0d4a24677897aaaaa04c13a9ade83b93 Mon Sep 17 00:00:00 2001 From: cyan <> Date: Wed, 24 Oct 2007 07:41:46 +0000 Subject: [PATCH] * Move checking of username/realname validity to its own function. * Create a new JS method under the system object, system.check_name(), which utilizes this new function to check username/realname validity. --- src/sbbs3/js_system.c | 18 ++++++++++++++++++ src/sbbs3/newuser.cpp | 14 ++++---------- src/sbbs3/userdat.c | 20 ++++++++++++++++++++ src/sbbs3/userdat.h | 2 ++ 4 files changed, 44 insertions(+), 10 deletions(-) diff --git a/src/sbbs3/js_system.c b/src/sbbs3/js_system.c index 1e864c368f..7aa07ad8af 100644 --- a/src/sbbs3/js_system.c +++ b/src/sbbs3/js_system.c @@ -1335,7 +1335,21 @@ js_chksyspass(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval return(JS_TRUE); } +static JSBool +js_chkname(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + char* str; + scfg_t* cfg; + + str = JS_GetStringBytes(JS_ValueToString(cx, argv[0])); + + if((cfg=(scfg_t*)JS_GetPrivate(cx,obj))==NULL) + return(JS_FALSE); + *rval = BOOLEAN_TO_JSVAL(check_name(cfg,str)); + + return(JS_TRUE); +} static jsSyncMethodSpec js_system_functions[] = { {"username", js_username, 1, JSTYPE_STRING, JSDOCSTR("number") @@ -1429,6 +1443,10 @@ static jsSyncMethodSpec js_system_functions[] = { ,JSDOCSTR("compares the supplied <i>password</i> against the system password and return's <i>true</i> if it matches") ,311 }, + {"check_name", js_chkname, 1, JSTYPE_BOOLEAN, JSDOCSTR("name/alias") + ,JSDOCSTR("check the provided name/alias string, returns <i>true</i> if it is valid") + ,315 + }, {0} }; diff --git a/src/sbbs3/newuser.cpp b/src/sbbs3/newuser.cpp index 787bdc4d6c..5356e15ce2 100644 --- a/src/sbbs3/newuser.cpp +++ b/src/sbbs3/newuser.cpp @@ -201,17 +201,12 @@ BOOL sbbs_t::newuser() bputs(text[EnterYourRealName]); getstr(useron.alias,LEN_ALIAS,kmode); truncsp(useron.alias); - if(useron.alias[0]<=' ' || !isalpha(useron.alias[0]) - || alias(&cfg,useron.alias,tmp)!=useron.alias - || !stricmp(useron.alias,cfg.sys_id) - || strchr(useron.alias,0xff) - || matchuser(&cfg,useron.alias,TRUE /* sysop_alias */) - || trashcan(useron.alias,"name") + if (!check_name(&cfg,useron.alias) || (!(cfg.uq&UQ_ALIASES) && !strchr(useron.alias,' '))) { bputs(text[YouCantUseThatName]); if(!yesno(text[ContinueQ])) return(FALSE); - continue; + continue; } break; } @@ -219,9 +214,8 @@ BOOL sbbs_t::newuser() if(cfg.uq&UQ_ALIASES && cfg.uq&UQ_REALNAME) { while(online) { bputs(text[EnterYourRealName]); - if(!getstr(useron.name,LEN_NAME,kmode) - || trashcan(useron.name,"name") - || strchr(useron.name,0xff) + getstr(useron.name,LEN_NAME,kmode); + if (!check_name(&cfg,useron.name) || !strchr(useron.name,' ') || (cfg.uq&UQ_DUPREAL && userdatdupe(useron.number,U_NAME,LEN_NAME diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index 2f7b779c18..a25b2092d8 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -2570,3 +2570,23 @@ time_t DLLCALL gettimeleft(scfg_t* cfg, user_t* user, time_t starttime) return(timeleft); } + +/*************************************************************************/ +/* Check a supplied name/alias and see if it's valid by our standards. */ +/*************************************************************************/ +BOOL DLLCALL check_name(scfg_t* cfg, char* name) +{ + char tmp[512]; + + if ( name[0] <= ' ' + || !isalpha(name[0]) + || !stricmp(name,cfg->sys_id) + || strchr(name,0xff) + || matchuser(cfg,name,TRUE /* sysop_alias */) + || trashcan(cfg,name,"name") + || alias(cfg,name,tmp)!=name + ) + return FALSE; + return TRUE; +} + diff --git a/src/sbbs3/userdat.h b/src/sbbs3/userdat.h index 133362018e..308f2db703 100644 --- a/src/sbbs3/userdat.h +++ b/src/sbbs3/userdat.h @@ -120,6 +120,8 @@ DLLEXPORT BOOL DLLCALL user_adjust_minutes(scfg_t* cfg, user_t* user, long amoun DLLEXPORT time_t DLLCALL gettimeleft(scfg_t* cfg, user_t* user, time_t starttime); +DLLEXPORT BOOL DLLCALL check_name(scfg_t* cfg, char* name); + #ifdef __cplusplus } #endif -- GitLab