diff options
| author | Wilmer van der Gaast <wilmer@gaast.net> | 2006-07-01 17:52:05 +0200 | 
|---|---|---|
| committer | Wilmer van der Gaast <wilmer@gaast.net> | 2006-07-01 17:52:05 +0200 | 
| commit | 5100caa16bb707d89f1873aca99b5f87abc1dd56 (patch) | |
| tree | cb07ef3e313f9d6f4f5feb2231176c5e9a2a7a2a /account.c | |
| parent | 0a3c243b6659dc10efb227e507f324c2711d6dcd (diff) | |
Added "account set" command.
Diffstat (limited to 'account.c')
| -rw-r--r-- | account.c | 60 | 
1 files changed, 60 insertions, 0 deletions
| @@ -27,9 +27,12 @@  #include "bitlbee.h"  #include "account.h" +char *set_eval_account( set_t *set, char *value ); +  account_t *account_add( irc_t *irc, struct prpl *prpl, char *user, char *pass )  {  	account_t *a; +	set_t *s;  	if( irc->accounts )  	{ @@ -47,9 +50,63 @@ account_t *account_add( irc_t *irc, struct prpl *prpl, char *user, char *pass )  	a->auto_connect = 1;  	a->irc = irc; +	s = set_add( &a->set, "auto_connect", NULL, set_eval_account, a ); +	s->flags |= ACC_SET_NOSAVE; +	 +	s = set_add( &a->set, "password", NULL, set_eval_account, a ); +	s->flags |= ACC_SET_NOSAVE; +	 +	s = set_add( &a->set, "server", NULL, set_eval_account, a ); +	s->flags |= ACC_SET_NOSAVE | ACC_SET_OFFLINE_ONLY; +	 +	s = set_add( &a->set, "username", NULL, set_eval_account, a ); +	s->flags |= ACC_SET_NOSAVE | ACC_SET_OFFLINE_ONLY; +	set_setstr( &a->set, "username", user ); +	  	return( a );  } +char *set_eval_account( set_t *set, char *value ) +{ +	account_t *acc = set->data; +	 +	/* Double-check: We refuse to edit on-line accounts. */ +	if( acc->gc ) +		return NULL; +	 +	if( strcmp( set->key, "username" ) == 0 ) +	{ +		g_free( acc->user ); +		acc->user = g_strdup( value ); +		return value; +	} +	else if( strcmp( set->key, "password" ) == 0 ) +	{ +		g_free( acc->pass ); +		acc->pass = g_strdup( value ); +		return NULL;	/* password shouldn't be visible in plaintext! */ +	} +	else if( strcmp( set->key, "server" ) == 0 ) +	{ +		g_free( acc->server ); +		if( *value ) +			acc->server = g_strdup( value ); +		else +			acc->server = NULL; +		return value; +	} +	else if( strcmp( set->key, "auto_connect" ) == 0 ) +	{ +		if( !is_bool( value ) ) +			return NULL; +		 +		acc->auto_connect = bool2int( value ); +		return value; +	} +	 +	return NULL; +} +  account_t *account_get( irc_t *irc, char *id )  {  	account_t *a, *ret = NULL; @@ -129,6 +186,9 @@ void account_del( irc_t *irc, account_t *acc )  				irc->accounts = a->next;  			} +			while( a->set ) +				set_del( &a->set, a->set->key ); +			  			g_free( a->user );  			g_free( a->pass );  			if( a->server ) g_free( a->server ); | 
