diff options
| -rw-r--r-- | irc_commands.c | 11 | ||||
| -rw-r--r-- | irc_user.c | 4 | ||||
| -rw-r--r-- | root_commands.c | 4 | 
3 files changed, 12 insertions, 7 deletions
| diff --git a/irc_commands.c b/irc_commands.c index 197a7e6e..0573601d 100644 --- a/irc_commands.c +++ b/irc_commands.c @@ -71,16 +71,18 @@ static void irc_cmd_user( irc_t *irc, char **cmd )  static void irc_cmd_nick( irc_t *irc, char **cmd )  { -	if( irc_user_by_name( irc, cmd[1] ) ) +	irc_user_t *iu; +	 +	if( ( iu = irc_user_by_name( irc, cmd[1] ) ) && iu != irc->user )  	{ -		irc_send_num( irc, 433, ":This nick is already in use" ); +		irc_send_num( irc, 433, "%s :This nick is already in use", cmd[1] );  	}  	else if( !nick_ok( cmd[1] ) )  	{  		/* [SH] Invalid characters. */ -		irc_send_num( irc, 432, ":This nick contains invalid characters" ); +		irc_send_num( irc, 432, "%s :This nick contains invalid characters", cmd[1] );  	} -	else if( irc->user->nick ) +	else if( irc->status & USTATUS_LOGGED_IN )  	{  		if( irc->status & USTATUS_IDENTIFIED )  		{ @@ -97,6 +99,7 @@ static void irc_cmd_nick( irc_t *irc, char **cmd )  	}  	else  	{ +		g_free( irc->user->nick );  		irc->user->nick = g_strdup( cmd[1] );  		irc_check_login( irc ); @@ -119,11 +119,13 @@ irc_user_t *irc_user_by_name( irc_t *irc, const char *nick )  int irc_user_set_nick( irc_user_t *iu, const char *new )  {  	irc_t *irc = iu->irc; +	irc_user_t *new_iu;  	char key[strlen(new)+1];  	GSList *cl;  	strcpy( key, new ); -	if( iu == NULL || !nick_lc( key ) || irc_user_by_name( irc, new ) ) +	if( iu == NULL || !nick_lc( key ) || +	    ( ( new_iu = irc_user_by_name( irc, new ) ) && new_iu != iu ) )  		return 0;  	for( cl = irc->channels; cl; cl = cl->next ) diff --git a/root_commands.c b/root_commands.c index 62fe1e79..5c5ead7b 100644 --- a/root_commands.c +++ b/root_commands.c @@ -661,7 +661,7 @@ static void cmd_info( irc_t *irc, char **cmd )  static void cmd_rename( irc_t *irc, char **cmd )  { -	irc_user_t *iu; +	irc_user_t *iu, *old;  	iu = irc_user_by_name( irc, cmd[1] ); @@ -677,7 +677,7 @@ static void cmd_rename( irc_t *irc, char **cmd )  	{  		irc_usermsg( irc, "Nick `%s' is invalid", cmd[2] );  	} -	else if( irc_user_by_name( irc, cmd[2] ) ) +	else if( ( old = irc_user_by_name( irc, cmd[2] ) ) && old != iu )  	{  		irc_usermsg( irc, "Nick `%s' already exists", cmd[2] );  	} | 
