From 3d5c05bab4290345daf3134bd3c01d83d555e329 Mon Sep 17 00:00:00 2001 From: Christopher Schwarz Date: Thu, 8 Oct 2009 16:42:16 +0000 Subject: * (Bug 3274) Disallow names that are difficult to ban (thanks msk) - Disallow numbers at the start of a name - All names must contain at least one letter - When matching name strings, ignore all non-alphanumeric characters --- src/game/g_admin.c | 20 ++++++++++++++++++++ src/game/g_cmds.c | 12 +++++------- 2 files changed, 25 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/game/g_admin.c b/src/game/g_admin.c index e0b3be96..3bee21af 100644 --- a/src/game/g_admin.c +++ b/src/game/g_admin.c @@ -263,12 +263,32 @@ qboolean G_admin_name_check( gentity_t *ent, char *name, char *err, int len ) gclient_t *client; char testName[ MAX_NAME_LENGTH ] = {""}; char name2[ MAX_NAME_LENGTH ] = {""}; + int alphaCount = 0; G_SanitiseString( name, name2, sizeof( name2 ) ); if( !strcmp( name2, "unnamedplayer" ) ) return qtrue; + G_DecolorString( name, testName, sizeof( testName ) ); + if( isdigit( testName[ 0 ] ) ) + { + Q_strncpyz( err, "Names cannot begin with numbers", len ); + return qfalse; + } + + for( i = 0; testName[ i ]; i++) + { + if( isalpha( testName[ i ] ) ) + alphaCount++; + } + + if( alphaCount == 0 ) + { + Q_strncpyz( err, "Names must contain letters", len ); + return qfalse; + } + for( i = 0; i < level.maxclients; i++ ) { client = &level.clients[ i ]; diff --git a/src/game/g_cmds.c b/src/game/g_cmds.c index afa7b5eb..9d77e0c9 100644 --- a/src/game/g_cmds.c +++ b/src/game/g_cmds.c @@ -27,7 +27,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ================== G_SanitiseString -Remove case and control characters from a string +Remove color codes and non-alphanumeric characters from a string ================== */ void G_SanitiseString( char *in, char *out, int len ) @@ -61,14 +61,12 @@ void G_SanitiseString( char *in, char *out, int len ) continue; } - if( *in < 32 ) + if( isalnum( *in ) ) { - in++; - continue; + *out++ = tolower( *in ); + len--; } - - *out++ = tolower( *in++ ); - len--; + in++; } out -= spaces; *out = 0; -- cgit