diff --git a/src/sbbs3/js_system.c b/src/sbbs3/js_system.c index 1e864c368f26c9ecc7e363da168dc83b52a1204b..7aa07ad8afa0ebc83c74b027834dbdc03214cda4 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 787bdc4d6cc4637ee7e29c6bcc25b4eb49a917a9..5356e15ce279bdab288e207ede66796818039082 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 2f7b779c1808125dfa3276821ebc289b683785cf..a25b2092d8549863e009dbe0ee3d594e1f630a3a 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 133362018e0c62fbd0eb98d3293fc14f9f51d685..308f2db7031ed023d76f1e376e09cc7b96053a2c 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