aboutsummaryrefslogtreecommitdiffstats
path: root/nick.c
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2007-12-10 22:57:13 +0000
committerWilmer van der Gaast <wilmer@gaast.net>2007-12-10 22:57:13 +0000
commit0f47613a39ad1b5d22d187e63c80c2f70702c217 (patch)
treea5b727229eb0c1bd8d9663ec979c9ca1e1e18466 /nick.c
parent71dc8543dc4eeafabbe28bae52ec1d05ce9f5fea (diff)
Don't allow nicks that start with a number.
Diffstat (limited to 'nick.c')
-rw-r--r--nick.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/nick.c b/nick.c
index 88c3faea..4b05f4a7 100644
--- a/nick.c
+++ b/nick.c
@@ -153,10 +153,10 @@ void nick_del( account_t *acc, const char *handle )
/* Character maps, _lc_[x] == _uc_[x] (but uppercase), according to the RFC's.
With one difference, we allow dashes. */
-static char *nick_lc_chars = "0123456789abcdefghijklmnopqrstuvwxyz{}^-_|";
-static char *nick_uc_chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ[]~-_\\";
+static char *nick_lc_chars = "0123456789abcdefghijklmnopqrstuvwxyz{}^`-_|";
+static char *nick_uc_chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ[]~`-_\\";
-void nick_strip( char * nick )
+void nick_strip( char *nick )
{
int i, j;
@@ -169,6 +169,15 @@ void nick_strip( char * nick )
j++;
}
}
+ if( isdigit( nick[0] ) )
+ {
+ char *orig;
+
+ orig = g_strdup( nick );
+ g_snprintf( nick, MAX_NICK_LENGTH, "_%s", orig );
+ g_free( orig );
+ j ++;
+ }
while( j <= MAX_NICK_LENGTH )
nick[j++] = '\0';
}
@@ -177,8 +186,8 @@ int nick_ok( const char *nick )
{
const char *s;
- /* Empty/long nicks are not allowed */
- if( !*nick || strlen( nick ) > MAX_NICK_LENGTH )
+ /* Empty/long nicks are not allowed, nor numbers at [0] */
+ if( !*nick || isdigit( nick[0] ) || strlen( nick ) > MAX_NICK_LENGTH )
return( 0 );
for( s = nick; *s; s ++ )