From 764c7d1009feda7db971ea7ac6bcb2a4acef0efc Mon Sep 17 00:00:00 2001 From: Sven Moritz Hallberg Date: Sun, 3 Feb 2008 22:30:03 +0100 Subject: OTR support, first checkin --- root_commands.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'root_commands.c') diff --git a/root_commands.c b/root_commands.c index 26a42a25..61bb5da9 100644 --- a/root_commands.c +++ b/root_commands.c @@ -28,6 +28,7 @@ #include "crypting.h" #include "bitlbee.h" #include "help.h" +#include "otr.h" #include @@ -84,19 +85,27 @@ void root_command( irc_t *irc, char *cmd[] ) if( !cmd[0] ) return; + if(!g_mutex_trylock(irc->otr_mutex)) { + irc_usermsg(irc, "keygen in progress, bitlbee comatose - please wait"); + return; + } + for( i = 0; commands[i].command; i++ ) if( g_strcasecmp( commands[i].command, cmd[0] ) == 0 ) { if( !cmd[commands[i].required_parameters] ) { irc_usermsg( irc, "Not enough parameters given (need %d)", commands[i].required_parameters ); + g_mutex_unlock(irc->otr_mutex); return; } commands[i].execute( irc, cmd ); + g_mutex_unlock(irc->otr_mutex); return; } irc_usermsg( irc, "Unknown command: %s. Please use \x02help commands\x02 to get a list of available commands.", cmd[0] ); + g_mutex_unlock(irc->otr_mutex); } static void cmd_help( irc_t *irc, char **cmd ) @@ -240,6 +249,8 @@ static void cmd_account( irc_t *irc, char **cmd ) } irc_usermsg( irc, "Account successfully added" ); + + otr_check_for_key(a); } else if( g_strcasecmp( cmd[1], "del" ) == 0 ) { @@ -990,5 +1001,6 @@ const command_t commands[] = { { "nick", 1, cmd_nick, 0 }, { "qlist", 0, cmd_qlist, 0 }, { "join_chat", 2, cmd_join_chat, 0 }, + { "otr", 1, cmd_otr, 0 }, { NULL } }; -- cgit v1.2.3 From 5bf5edfde81640c1d918a2a1a1bd8bcd450805e1 Mon Sep 17 00:00:00 2001 From: Sven Moritz Hallberg Date: Sun, 10 Feb 2008 22:54:28 +0100 Subject: log out all accounts when going into keygen --- root_commands.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'root_commands.c') diff --git a/root_commands.c b/root_commands.c index 61bb5da9..7352b638 100644 --- a/root_commands.c +++ b/root_commands.c @@ -135,7 +135,7 @@ static void cmd_help( irc_t *irc, char **cmd ) } } -static void cmd_account( irc_t *irc, char **cmd ); +void cmd_account( irc_t *irc, char **cmd ); static void cmd_identify( irc_t *irc, char **cmd ) { @@ -212,7 +212,7 @@ static void cmd_drop( irc_t *irc, char **cmd ) } } -static void cmd_account( irc_t *irc, char **cmd ) +void cmd_account( irc_t *irc, char **cmd ) { account_t *a; -- cgit v1.2.3 From c59530844d25ae814141cf56f0fa810968e8df55 Mon Sep 17 00:00:00 2001 From: Sven Moritz Hallberg Date: Mon, 11 Feb 2008 22:20:35 +0100 Subject: - use a recursive otr_mutex - implement 'otr forget fingerprint' and 'otr forget context' commands --- root_commands.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'root_commands.c') diff --git a/root_commands.c b/root_commands.c index 7352b638..03b579a1 100644 --- a/root_commands.c +++ b/root_commands.c @@ -85,7 +85,7 @@ void root_command( irc_t *irc, char *cmd[] ) if( !cmd[0] ) return; - if(!g_mutex_trylock(irc->otr_mutex)) { + if(!g_static_rec_mutex_trylock(&irc->otr_mutex)) { irc_usermsg(irc, "keygen in progress, bitlbee comatose - please wait"); return; } @@ -96,16 +96,16 @@ void root_command( irc_t *irc, char *cmd[] ) if( !cmd[commands[i].required_parameters] ) { irc_usermsg( irc, "Not enough parameters given (need %d)", commands[i].required_parameters ); - g_mutex_unlock(irc->otr_mutex); + g_static_rec_mutex_unlock(&irc->otr_mutex); return; } commands[i].execute( irc, cmd ); - g_mutex_unlock(irc->otr_mutex); + g_static_rec_mutex_unlock(&irc->otr_mutex); return; } irc_usermsg( irc, "Unknown command: %s. Please use \x02help commands\x02 to get a list of available commands.", cmd[0] ); - g_mutex_unlock(irc->otr_mutex); + g_static_rec_mutex_unlock(&irc->otr_mutex); } static void cmd_help( irc_t *irc, char **cmd ) -- cgit v1.2.3 From f3597a161cd13e076db626fed3d833cac0d62d6c Mon Sep 17 00:00:00 2001 From: Sven Moritz Hallberg Date: Thu, 14 Feb 2008 22:01:21 +0100 Subject: revert keygen behaviour to old (lax) behavior --- root_commands.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'root_commands.c') diff --git a/root_commands.c b/root_commands.c index 03b579a1..04c62fea 100644 --- a/root_commands.c +++ b/root_commands.c @@ -135,7 +135,7 @@ static void cmd_help( irc_t *irc, char **cmd ) } } -void cmd_account( irc_t *irc, char **cmd ); +static void cmd_account( irc_t *irc, char **cmd ); static void cmd_identify( irc_t *irc, char **cmd ) { @@ -212,7 +212,7 @@ static void cmd_drop( irc_t *irc, char **cmd ) } } -void cmd_account( irc_t *irc, char **cmd ) +static void cmd_account( irc_t *irc, char **cmd ) { account_t *a; -- cgit v1.2.3 From 522a00f1b1163cedf15a86329c0097601eb7940b Mon Sep 17 00:00:00 2001 From: Sven Moritz Hallberg Date: Fri, 15 Feb 2008 10:27:26 +0100 Subject: remove thread-based keygen replace it with a process-based stub --- root_commands.c | 8 -------- 1 file changed, 8 deletions(-) (limited to 'root_commands.c') diff --git a/root_commands.c b/root_commands.c index 04c62fea..9b492048 100644 --- a/root_commands.c +++ b/root_commands.c @@ -85,27 +85,19 @@ void root_command( irc_t *irc, char *cmd[] ) if( !cmd[0] ) return; - if(!g_static_rec_mutex_trylock(&irc->otr_mutex)) { - irc_usermsg(irc, "keygen in progress, bitlbee comatose - please wait"); - return; - } - for( i = 0; commands[i].command; i++ ) if( g_strcasecmp( commands[i].command, cmd[0] ) == 0 ) { if( !cmd[commands[i].required_parameters] ) { irc_usermsg( irc, "Not enough parameters given (need %d)", commands[i].required_parameters ); - g_static_rec_mutex_unlock(&irc->otr_mutex); return; } commands[i].execute( irc, cmd ); - g_static_rec_mutex_unlock(&irc->otr_mutex); return; } irc_usermsg( irc, "Unknown command: %s. Please use \x02help commands\x02 to get a list of available commands.", cmd[0] ); - g_static_rec_mutex_unlock(&irc->otr_mutex); } static void cmd_help( irc_t *irc, char **cmd ) -- cgit v1.2.3 From 3064ea42452e7e069bce9fc132ceb8ae4d7d11b4 Mon Sep 17 00:00:00 2001 From: Sven Moritz Hallberg Date: Sat, 16 Feb 2008 16:20:58 +0100 Subject: rework keygen messages and add some notices --- root_commands.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'root_commands.c') diff --git a/root_commands.c b/root_commands.c index 9b492048..d47a8b1d 100644 --- a/root_commands.c +++ b/root_commands.c @@ -242,7 +242,9 @@ static void cmd_account( irc_t *irc, char **cmd ) irc_usermsg( irc, "Account successfully added" ); - otr_check_for_key(a); + if(otr_check_for_key(a)) { + irc_usermsg(irc, "otr: you will be notified when it completes"); + } } else if( g_strcasecmp( cmd[1], "del" ) == 0 ) { -- cgit v1.2.3 From 823de9d44f262ea2364ac8ec6a1e18e0f7dab658 Mon Sep 17 00:00:00 2001 From: Sven Moritz Hallberg Date: Thu, 12 Mar 2009 20:10:06 +0100 Subject: commit updates by ashish shukla --- root_commands.c | 91 +++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 62 insertions(+), 29 deletions(-) (limited to 'root_commands.c') diff --git a/root_commands.c b/root_commands.c index 2f00eca8..ffa163bb 100644 --- a/root_commands.c +++ b/root_commands.c @@ -131,7 +131,7 @@ static void cmd_account( irc_t *irc, char **cmd ); static void cmd_identify( irc_t *irc, char **cmd ) { - storage_status_t status = storage_load( irc->nick, cmd[1], irc ); + storage_status_t status = storage_load( irc, cmd[1] ); char *account_on[] = { "account", "on", NULL }; switch (status) { @@ -143,6 +143,8 @@ static void cmd_identify( irc_t *irc, char **cmd ) break; case STORAGE_OK: irc_usermsg( irc, "Password accepted, settings and accounts loaded" ); + irc_setpass( irc, cmd[1] ); + irc->status |= USTATUS_IDENTIFIED; irc_umode_set( irc, "+R", 1 ); if( set_getbool( &irc->set, "auto_connect" ) ) cmd_account( irc, account_on ); @@ -162,14 +164,14 @@ static void cmd_register( irc_t *irc, char **cmd ) return; } - irc_setpass( irc, cmd[1] ); - switch( storage_save( irc, FALSE )) { + switch( storage_save( irc, cmd[1], FALSE ) ) { case STORAGE_ALREADY_EXISTS: irc_usermsg( irc, "Nick is already registered" ); break; case STORAGE_OK: irc_usermsg( irc, "Account successfully created" ); + irc_setpass( irc, cmd[1] ); irc->status |= USTATUS_IDENTIFIED; irc_umode_set( irc, "+R", 1 ); break; @@ -238,6 +240,16 @@ void cmd_account_del_no( void *data ) g_free( data ); } +static void cmd_showset( irc_t *irc, set_t **head, char *key ) +{ + char *val; + + if( ( val = set_getstr( head, key ) ) ) + irc_usermsg( irc, "%s = `%s'", key, val ); + else + irc_usermsg( irc, "%s is empty", key ); +} + static void cmd_account( irc_t *irc, char **cmd ) { account_t *a; @@ -449,6 +461,7 @@ static void cmd_account( irc_t *irc, char **cmd ) if( cmd[3] && set_name ) { set_t *s = set_find( &a->set, set_name ); + int st; if( a->ic && s && s->flags & ACC_SET_OFFLINE_ONLY ) { @@ -464,27 +477,32 @@ static void cmd_account( irc_t *irc, char **cmd ) } if( g_strncasecmp( cmd[2], "-del", 4 ) == 0 ) - set_reset( &a->set, set_name ); + st = set_reset( &a->set, set_name ); + else + st = set_setstr( &a->set, set_name, cmd[3] ); + + if( set_getstr( &a->set, set_name ) == NULL ) + { + if( st ) + irc_usermsg( irc, "Setting changed successfully" ); + else + irc_usermsg( irc, "Failed to change setting" ); + } else - set_setstr( &a->set, set_name, cmd[3] ); + { + cmd_showset( irc, &a->set, set_name ); + } } - if( set_name ) /* else 'forgotten' on purpose.. Must show new value after changing */ + else if( set_name ) { - char *s = set_getstr( &a->set, set_name ); - if( s ) - irc_usermsg( irc, "%s = `%s'", set_name, s ); - else - irc_usermsg( irc, "%s is empty", set_name ); + cmd_showset( irc, &a->set, set_name ); } else { set_t *s = a->set; while( s ) { - if( s->value || s->def ) - irc_usermsg( irc, "%s = `%s'", s->key, s->value ? s->value : s->def ); - else - irc_usermsg( irc, "%s is empty", s->key ); + cmd_showset( irc, &s, s->key ); s = s->next; } } @@ -614,6 +632,8 @@ static void cmd_rename( irc_t *irc, char **cmd ) g_free( irc->mynick ); irc->mynick = g_strdup( cmd[2] ); + /* If we're called internally (user did "set root_nick"), + let's not go O(INF). :-) */ if( strcmp( cmd[0], "set_rename" ) != 0 ) set_setstr( &irc->set, "root_nick", cmd[2] ); } @@ -637,7 +657,7 @@ char *set_eval_root_nick( set_t *set, char *new_nick ) cmd_rename( irc, cmd ); } - return strcmp( irc->mynick, new_nick ) == 0 ? new_nick : NULL; + return strcmp( irc->mynick, new_nick ) == 0 ? new_nick : SET_INVALID; } static void cmd_remove( irc_t *irc, char **cmd ) @@ -825,23 +845,37 @@ static void cmd_set( irc_t *irc, char **cmd ) if( cmd[1] && cmd[2] ) { + int st; + if( g_strncasecmp( cmd[1], "-del", 4 ) == 0 ) { - set_reset( &irc->set, cmd[2] ); + st = set_reset( &irc->set, cmd[2] ); set_name = cmd[2]; } else { - set_setstr( &irc->set, cmd[1], cmd[2] ); + st = set_setstr( &irc->set, cmd[1], cmd[2] ); + } + + /* Normally we just show the variable's new/unchanged + value as feedback to the user, but this has always + caused confusion when changing the password. Give + other feedback instead: */ + if( set_getstr( &irc->set, set_name ) == NULL ) + { + if( st ) + irc_usermsg( irc, "Setting changed successfully" ); + else + irc_usermsg( irc, "Failed to change setting" ); + } + else + { + cmd_showset( irc, &irc->set, set_name ); } } - if( set_name ) /* else 'forgotten' on purpose.. Must show new value after changing */ + else if( set_name ) { - char *s = set_getstr( &irc->set, set_name ); - if( s ) - irc_usermsg( irc, "%s = `%s'", set_name, s ); - else - irc_usermsg( irc, "%s is empty", set_name ); + cmd_showset( irc, &irc->set, set_name ); if( strchr( set_name, '/' ) ) irc_usermsg( irc, "Warning: / found in setting name, you're probably looking for the `account set' command." ); @@ -851,10 +885,7 @@ static void cmd_set( irc_t *irc, char **cmd ) set_t *s = irc->set; while( s ) { - if( s->value || s->def ) - irc_usermsg( irc, "%s = `%s'", s->key, s->value ? s->value : s->def ); - else - irc_usermsg( irc, "%s is empty", s->key ); + cmd_showset( irc, &s, s->key ); s = s->next; } } @@ -862,7 +893,9 @@ static void cmd_set( irc_t *irc, char **cmd ) static void cmd_save( irc_t *irc, char **cmd ) { - if( storage_save( irc, TRUE ) == STORAGE_OK ) + if( ( irc->status & USTATUS_IDENTIFIED ) == 0 ) + irc_usermsg( irc, "Please create an account first" ); + else if( storage_save( irc, NULL, TRUE ) == STORAGE_OK ) irc_usermsg( irc, "Configuration saved" ); else irc_usermsg( irc, "Configuration could not be saved!" ); -- cgit v1.2.3