diff options
author | Wilmer van der Gaast <wilmer@gaast.net> | 2009-12-07 21:54:19 +0000 |
---|---|---|
committer | Wilmer van der Gaast <wilmer@gaast.net> | 2009-12-07 21:54:19 +0000 |
commit | 2288705af462b4aca2d56f228bff269eab8d8b5f (patch) | |
tree | cbdf792579f11297773583cc822548867fdfc19c /irc.c | |
parent | aac40178a6669e20855b7f5d3cc6a82cba10042e (diff) | |
parent | 36cf9fda6a5cc4bcbfe98319b48af636fa142590 (diff) |
Merging head.
Diffstat (limited to 'irc.c')
-rw-r--r-- | irc.c | 74 |
1 files changed, 41 insertions, 33 deletions
@@ -34,13 +34,19 @@ static gboolean irc_userping( gpointer _irc, int fd, b_input_condition cond ); GSList *irc_connection_list = NULL; -static char *passchange( set_t *set, char *value ) +static char *set_eval_password( set_t *set, char *value ) { irc_t *irc = set->data; - irc_setpass( irc, value ); - irc_usermsg( irc, "Password successfully changed" ); - return NULL; + if( irc->status & USTATUS_IDENTIFIED && value ) + { + irc_setpass( irc, value ); + return NULL; + } + else + { + return SET_INVALID; + } } static char *set_eval_charset( set_t *set, char *value ) @@ -77,6 +83,7 @@ irc_t *irc_new( int fd ) irc_t *irc; struct sockaddr_storage sock; socklen_t socklen = sizeof( sock ); + set_t *s; irc = g_new0( irc_t, 1 ); @@ -136,28 +143,29 @@ irc_t *irc_new( int fd ) irc_connection_list = g_slist_append( irc_connection_list, irc ); - set_add( &irc->set, "away_devoice", "true", set_eval_away_devoice, irc ); - set_add( &irc->set, "auto_connect", "true", set_eval_bool, irc ); - set_add( &irc->set, "auto_reconnect", "false", set_eval_bool, irc ); - set_add( &irc->set, "auto_reconnect_delay", "5*3<900", set_eval_account_reconnect_delay, irc ); - set_add( &irc->set, "buddy_sendbuffer", "false", set_eval_bool, irc ); - set_add( &irc->set, "buddy_sendbuffer_delay", "200", set_eval_int, irc ); - set_add( &irc->set, "charset", "utf-8", set_eval_charset, irc ); - set_add( &irc->set, "debug", "false", set_eval_bool, irc ); - set_add( &irc->set, "default_target", "root", NULL, irc ); - set_add( &irc->set, "display_namechanges", "false", set_eval_bool, irc ); - set_add( &irc->set, "handle_unknown", "root", NULL, irc ); - set_add( &irc->set, "lcnicks", "true", set_eval_bool, irc ); - set_add( &irc->set, "ops", "both", set_eval_ops, irc ); - set_add( &irc->set, "password", NULL, passchange, irc ); - set_add( &irc->set, "private", "true", set_eval_bool, irc ); - set_add( &irc->set, "query_order", "lifo", NULL, irc ); - set_add( &irc->set, "root_nick", irc->mynick, set_eval_root_nick, irc ); - set_add( &irc->set, "save_on_quit", "true", set_eval_bool, irc ); - set_add( &irc->set, "simulate_netsplit", "true", set_eval_bool, irc ); - set_add( &irc->set, "strip_html", "true", NULL, irc ); - set_add( &irc->set, "to_char", ": ", set_eval_to_char, irc ); - set_add( &irc->set, "typing_notice", "false", set_eval_bool, irc ); + s = set_add( &irc->set, "away_devoice", "true", set_eval_away_devoice, irc ); + s = set_add( &irc->set, "auto_connect", "true", set_eval_bool, irc ); + s = set_add( &irc->set, "auto_reconnect", "false", set_eval_bool, irc ); + s = set_add( &irc->set, "auto_reconnect_delay", "5*3<900", set_eval_account_reconnect_delay, irc ); + s = set_add( &irc->set, "buddy_sendbuffer", "false", set_eval_bool, irc ); + s = set_add( &irc->set, "buddy_sendbuffer_delay", "200", set_eval_int, irc ); + s = set_add( &irc->set, "charset", "utf-8", set_eval_charset, irc ); + s = set_add( &irc->set, "debug", "false", set_eval_bool, irc ); + s = set_add( &irc->set, "default_target", "root", NULL, irc ); + s = set_add( &irc->set, "display_namechanges", "false", set_eval_bool, irc ); + s = set_add( &irc->set, "handle_unknown", "root", NULL, irc ); + s = set_add( &irc->set, "lcnicks", "true", set_eval_bool, irc ); + s = set_add( &irc->set, "ops", "both", set_eval_ops, irc ); + s = set_add( &irc->set, "password", NULL, set_eval_password, irc ); + s->flags |= SET_NULL_OK; + s = set_add( &irc->set, "private", "true", set_eval_bool, irc ); + s = set_add( &irc->set, "query_order", "lifo", NULL, irc ); + s = set_add( &irc->set, "root_nick", irc->mynick, set_eval_root_nick, irc ); + s = set_add( &irc->set, "save_on_quit", "true", set_eval_bool, irc ); + s = set_add( &irc->set, "simulate_netsplit", "true", set_eval_bool, irc ); + s = set_add( &irc->set, "strip_html", "true", NULL, irc ); + s = set_add( &irc->set, "to_char", ": ", set_eval_to_char, irc ); + s = set_add( &irc->set, "typing_notice", "false", set_eval_bool, irc ); conf_loaddefaults( irc ); @@ -231,7 +239,7 @@ void irc_free( irc_t * irc ) log_message( LOGLVL_INFO, "Destroying connection with fd %d", irc->fd ); if( irc->status & USTATUS_IDENTIFIED && set_getbool( &irc->set, "save_on_quit" ) ) - if( storage_save( irc, TRUE ) != STORAGE_OK ) + if( storage_save( irc, NULL, TRUE ) != STORAGE_OK ) irc_usermsg( irc, "Error while saving settings!" ); irc_connection_list = g_slist_remove( irc_connection_list, irc ); @@ -399,10 +407,8 @@ void irc_process( irc_t *irc ) lines[i] = conv; } - if( lines[i] ) + if( lines[i] && ( cmd = irc_parse_line( lines[i] ) ) ) { - if( ( cmd = irc_parse_line( lines[i] ) ) == NULL ) - continue; irc_exec( irc, cmd ); g_free( cmd ); } @@ -477,7 +483,7 @@ char **irc_parse_line( char *line ) /* Move the line pointer to the start of the command, skipping spaces and the optional prefix. */ if( line[0] == ':' ) { - for( i = 0; line[i] != ' '; i ++ ); + for( i = 0; line[i] && line[i] != ' '; i ++ ); line = line + i; } for( i = 0; line[i] == ' '; i ++ ); @@ -773,7 +779,9 @@ void irc_login( irc_t *irc ) irc_reply( irc, 2, ":Host %s is running BitlBee " BITLBEE_VERSION " " ARCH "/" CPU ".", irc->myhost ); irc_reply( irc, 3, ":%s", IRCD_INFO ); irc_reply( irc, 4, "%s %s %s %s", irc->myhost, BITLBEE_VERSION, UMODES UMODES_PRIV, CMODES ); - irc_reply( irc, 5, "PREFIX=(ov)@+ CHANTYPES=#& CHANMODES=,,,%s NICKLEN=%d NETWORK=BitlBee CASEMAPPING=rfc1459 MAXTARGETS=1 WATCH=128 :are supported by this server", CMODES, MAX_NICK_LENGTH - 1 ); + irc_reply( irc, 5, "PREFIX=(ov)@+ CHANTYPES=%s CHANMODES=,,,%s NICKLEN=%d NETWORK=BitlBee " + "CASEMAPPING=rfc1459 MAXTARGETS=1 WATCH=128 :are supported by this server", + CTYPES, CMODES, MAX_NICK_LENGTH - 1 ); irc_motd( irc ); irc->umode[0] = '\0'; irc_umode_set( irc, "+" UMODE, 1 ); @@ -1014,7 +1022,7 @@ int irc_send( irc_t *irc, char *nick, char *s, int flags ) struct groupchat *c = NULL; user_t *u = NULL; - if( *nick == '#' || *nick == '&' ) + if( strchr( CTYPES, *nick ) ) { if( !( c = irc_chat_by_channel( irc, nick ) ) ) { |