diff options
Diffstat (limited to 'root_commands.c')
| -rw-r--r-- | root_commands.c | 30 | 
1 files changed, 19 insertions, 11 deletions
| diff --git a/root_commands.c b/root_commands.c index 470b2536..127570e6 100644 --- a/root_commands.c +++ b/root_commands.c @@ -322,6 +322,7 @@ static int cmd_account_set_checkflags( irc_t *irc, set_t *s )  static void cmd_account( irc_t *irc, char **cmd )  {  	account_t *a; +	int len;  	if( global.conf->authmode == AUTHMODE_REGISTERED && !( irc->status & USTATUS_IDENTIFIED ) )  	{ @@ -329,7 +330,9 @@ static void cmd_account( irc_t *irc, char **cmd )  		return;  	} -	if( g_strcasecmp( cmd[1], "add" ) == 0 ) +	len = strlen( cmd[1] ); +	 +	if( len >= 1 && g_strncasecmp( cmd[1], "add", len ) == 0 )  	{  		struct prpl *prpl; @@ -355,7 +358,7 @@ static void cmd_account( irc_t *irc, char **cmd )  		return;  	} -	else if( g_strcasecmp( cmd[1], "list" ) == 0 ) +	else if( len >= 1 && g_strncasecmp( cmd[1], "list", len ) == 0 )  	{  		int i = 0; @@ -387,7 +390,7 @@ static void cmd_account( irc_t *irc, char **cmd )  	{  		/* Try the following two only if cmd[2] == NULL */  	} -	else if( g_strcasecmp( cmd[1], "on" ) == 0 ) +	else if( len >= 2 && g_strncasecmp( cmd[1], "on", len ) == 0 )  	{  		if ( irc->b->accounts )  		{ @@ -404,7 +407,7 @@ static void cmd_account( irc_t *irc, char **cmd )  		return;  	} -	else if( g_strcasecmp( cmd[1], "off" ) == 0 ) +	else if( len >= 2 && g_strncasecmp( cmd[1], "off", len ) == 0 )  	{  		irc_usermsg( irc, "Deactivating all active (re)connections..." ); @@ -420,6 +423,7 @@ static void cmd_account( irc_t *irc, char **cmd )  	}  	MIN_ARGS( 2 ); +	len = strlen( cmd[2] );  	/* At least right now, don't accept on/off/set/del as account IDs even  	   if they're a proper match, since people not familiar with the new @@ -436,7 +440,7 @@ static void cmd_account( irc_t *irc, char **cmd )  		return;  	} -	if( g_strcasecmp( cmd[2], "del" ) == 0 ) +	if( len >= 1 && g_strncasecmp( cmd[2], "del", len ) == 0 )  	{  		if( a->ic )  		{ @@ -448,14 +452,14 @@ static void cmd_account( irc_t *irc, char **cmd )  			irc_usermsg( irc, "Account deleted" );  		}  	} -	else if( g_strcasecmp( cmd[2], "on" ) == 0 ) +	else if( len >= 2 && g_strncasecmp( cmd[2], "on", len ) == 0 )  	{  		if( a->ic )  			irc_usermsg( irc, "Account already online" );  		else  			account_on( irc->b, a );  	} -	else if( g_strcasecmp( cmd[2], "off" ) == 0 ) +	else if( len >= 2 && g_strncasecmp( cmd[2], "off", len ) == 0 )  	{  		if( a->ic )  		{ @@ -471,7 +475,7 @@ static void cmd_account( irc_t *irc, char **cmd )  			irc_usermsg( irc, "Account already offline" );  		}  	} -	else if( g_strcasecmp( cmd[2], "set" ) == 0 ) +	else if( len >= 1 && g_strncasecmp( cmd[2], "set", len ) == 0 )  	{  		cmd_set_real( irc, cmd + 2, &a->set, cmd_account_set_checkflags );  	} @@ -484,8 +488,11 @@ static void cmd_account( irc_t *irc, char **cmd )  static void cmd_channel( irc_t *irc, char **cmd )  {  	irc_channel_t *ic; +	int len; +	 +	len = strlen( cmd[1] ); -	if( g_strcasecmp( cmd[1], "list" ) == 0 ) +	if( len >= 1 && g_strncasecmp( cmd[1], "list", len ) == 0 )  	{  		GSList *l;  		int i = 0; @@ -509,6 +516,7 @@ static void cmd_channel( irc_t *irc, char **cmd )  	}  	MIN_ARGS( 2 ); +	len = strlen( cmd[2] );  	if( ( ic = irc_channel_get( irc, cmd[1] ) ) == NULL )  	{ @@ -516,11 +524,11 @@ static void cmd_channel( irc_t *irc, char **cmd )  		return;  	} -	if( g_strcasecmp( cmd[2], "set" ) == 0 ) +	if( len >= 1 && g_strncasecmp( cmd[2], "set", len ) == 0 )  	{  		cmd_set_real( irc, cmd + 2, &ic->set, NULL );  	} -	else if( g_strcasecmp( cmd[2], "del" ) == 0 ) +	else if( len >= 1 && g_strncasecmp( cmd[2], "del", len ) == 0 )  	{  		if( !( ic->flags & IRC_CHANNEL_JOINED ) &&  		    ic != ic->irc->default_channel ) | 
