diff options
Diffstat (limited to 'protocols')
| -rw-r--r-- | protocols/jabber/iq.c | 2 | ||||
| -rw-r--r-- | protocols/jabber/jabber.h | 1 | ||||
| -rw-r--r-- | protocols/jabber/jabber_util.c | 22 | 
3 files changed, 24 insertions, 1 deletions
| diff --git a/protocols/jabber/iq.c b/protocols/jabber/iq.c index 31b92049..61417bcc 100644 --- a/protocols/jabber/iq.c +++ b/protocols/jabber/iq.c @@ -351,7 +351,7 @@ xt_status jabber_pkt_bind_sess( struct im_connection *ic, struct xt_node *node,  		{  			/* Server is crap, but this is no disaster. */  		} -		else if( strncmp( jd->me, c->text, strlen( jd->me ) ) != 0 ) +		else if( jabber_compare_jid( jd->me, c->text ) == 0 )  		{  			s = strchr( c->text, '/' );  			if( s ) diff --git a/protocols/jabber/jabber.h b/protocols/jabber/jabber.h index 006da9a3..21769a3b 100644 --- a/protocols/jabber/jabber.h +++ b/protocols/jabber/jabber.h @@ -288,6 +288,7 @@ xt_status jabber_cache_handle_packet( struct im_connection *ic, struct xt_node *  const struct jabber_away_state *jabber_away_state_by_code( char *code );  const struct jabber_away_state *jabber_away_state_by_name( char *name );  void jabber_buddy_ask( struct im_connection *ic, char *handle ); +int jabber_compare_jid( const char *jid1, const char *jid2 );  char *jabber_normalize( const char *orig );  typedef enum diff --git a/protocols/jabber/jabber_util.c b/protocols/jabber/jabber_util.c index 67aa378a..f850e9d6 100644 --- a/protocols/jabber/jabber_util.c +++ b/protocols/jabber/jabber_util.c @@ -307,6 +307,28 @@ void jabber_buddy_ask( struct im_connection *ic, char *handle )  	g_free( buf );  } +/* Compares two Jabber IDs to check for match. */ +int jabber_compare_jid( const char *jid1, const char *jid2 ) +{ +	int i; +	 +	for( i = 0; ; i ++ ) +	{ +		if( jid1[i] == '\0' || jid1[i] == '/' || jid2[i] == '\0' || jid2[i] == '/' ) +		{ +			if( ( jid1[i] == '\0' || jid1[i] == '/' ) && ( jid2[i] == '\0' || jid2[i] == '/' ) ) +				break; +			return FALSE; +		} +		if( tolower( jid1[i] ) != tolower( jid2[i] ) ) +		{ +			return FALSE; +		} +	} +	 +	return TRUE; +} +  /* Returns a new string. Don't leak it! */  char *jabber_normalize( const char *orig )  { | 
