diff options
| author | Jelmer Vernooij <jelmer@samba.org> | 2005-12-08 14:41:53 +0100 | 
|---|---|---|
| committer | Jelmer Vernooij <jelmer@samba.org> | 2005-12-08 14:41:53 +0100 | 
| commit | 1ee6c18cfb5eb03f33a5938b37e357dd3fd2c164 (patch) | |
| tree | 6b6806ac2c13634c7a7c5419e95a0c8bd1fe6884 /bitlbee.c | |
| parent | d636233a518fbe46264230866d4b8ea463f1474e (diff) | |
Add abstraction layer for storage
Diffstat (limited to 'bitlbee.c')
| -rw-r--r-- | bitlbee.c | 219 | 
1 files changed, 0 insertions, 219 deletions
| @@ -26,7 +26,6 @@  #define BITLBEE_CORE  #include "bitlbee.h"  #include "commands.h" -#include "crypting.h"  #include "protocols/nogaim.h"  #include "help.h"  #include <signal.h> @@ -243,224 +242,6 @@ gboolean bitlbee_io_current_client_write( GIOChannel *source, GIOCondition condi  	}  } -int bitlbee_load( irc_t *irc, char* password ) -{ -	char s[512]; -	char *line; -	int proto; -	char nick[MAX_NICK_LENGTH+1]; -	FILE *fp; -	user_t *ru = user_find( irc, ROOT_NICK ); -	 -	if( irc->status == USTATUS_IDENTIFIED ) -		return( 1 ); -	 -	g_snprintf( s, 511, "%s%s%s", global.conf->configdir, irc->nick, ".accounts" ); -   	fp = fopen( s, "r" ); -   	if( !fp ) return( 0 ); -	 -	fscanf( fp, "%32[^\n]s", s ); -	if( setpass( irc, password, s ) < 0 ) -	{ -		fclose( fp ); -		return( -1 ); -	} -	 -	/* Do this now. If the user runs with AuthMode = Registered, the -	   account command will not work otherwise. */ -	irc->status = USTATUS_IDENTIFIED; -	 -	while( fscanf( fp, "%511[^\n]s", s ) > 0 ) -	{ -		fgetc( fp ); -		line = deobfucrypt( irc, s ); -		root_command_string( irc, ru, line, 0 ); -		g_free( line ); -	} -	fclose( fp ); -	 -	g_snprintf( s, 511, "%s%s%s", global.conf->configdir, irc->nick, ".nicks" ); -	fp = fopen( s, "r" ); -	if( !fp ) return( 0 ); -	while( fscanf( fp, "%s %d %s", s, &proto, nick ) > 0 ) -	{ -		http_decode( s ); -		nick_set( irc, s, proto, nick ); -	} -	fclose( fp ); -	 -	if( set_getint( irc, "auto_connect" ) ) -	{ -		strcpy( s, "account on" );	/* Can't do this directly because r_c_s alters the string */ -		root_command_string( irc, ru, s, 0 ); -	} -	 -	return( 1 ); -} - -int bitlbee_save( irc_t *irc ) -{ -	char s[512]; -	char path[512], new_path[512]; -	char *line; -	nick_t *n; -	set_t *set; -	mode_t ou = umask( 0077 ); -	account_t *a; -	FILE *fp; -	char *hash; -	 -	/*\ -	 *  [SH] Nothing should be saved if no password is set, because the -	 *  password is not set if it was wrong, or if one is not identified -	 *  yet. This means that a malicious user could easily overwrite -	 *  files owned by someone else: -	 *  a Bad Thing, methinks -	\*/ - -	/* [WVG] No? Really? */ - -	/*\ -	 *  [SH] Okay, okay, it wasn't really Wilmer who said that, it was -	 *  me. I just thought it was funny. -	\*/ -	 -	hash = hashpass( irc ); -	if( hash == NULL ) -	{ -		irc_usermsg( irc, "Please register yourself if you want to save your settings." ); -		return( 0 ); -	} -	 -	g_snprintf( path, 511, "%s%s%s", global.conf->configdir, irc->nick, ".nicks~" ); -	fp = fopen( path, "w" ); -	if( !fp ) return( 0 ); -	for( n = irc->nicks; n; n = n->next ) -	{ -		strcpy( s, n->handle ); -		s[169] = 0; /* Prevent any overflow (169 ~ 512 / 3) */ -		http_encode( s ); -		g_snprintf( s + strlen( s ), 510 - strlen( s ), " %d %s", n->proto, n->nick ); -		if( fprintf( fp, "%s\n", s ) != strlen( s ) + 1 ) -		{ -			irc_usermsg( irc, "fprintf() wrote too little. Disk full?" ); -			fclose( fp ); -			return( 0 ); -		} -	} -	if( fclose( fp ) != 0 ) -	{ -		irc_usermsg( irc, "fclose() reported an error. Disk full?" ); -		return( 0 ); -	} -   -	g_snprintf( new_path, 512, "%s%s%s", global.conf->configdir, irc->nick, ".nicks" ); -	if( unlink( new_path ) != 0 ) -	{ -		if( errno != ENOENT ) -		{ -			irc_usermsg( irc, "Error while removing old .nicks file" ); -			return( 0 ); -		} -	} -	if( rename( path, new_path ) != 0 ) -	{ -		irc_usermsg( irc, "Error while renaming new .nicks file" ); -		return( 0 ); -	} -	 -	g_snprintf( path, 511, "%s%s%s", global.conf->configdir, irc->nick, ".accounts~" ); -	fp = fopen( path, "w" ); -	if( !fp ) return( 0 ); -	if( fprintf( fp, "%s", hash ) != strlen( hash ) ) -	{ -		irc_usermsg( irc, "fprintf() wrote too little. Disk full?" ); -		fclose( fp ); -		return( 0 ); -	} -	g_free( hash ); - -	for( a = irc->accounts; a; a = a->next ) -	{ -		if( a->protocol == PROTO_OSCAR || a->protocol == PROTO_ICQ || a->protocol == PROTO_TOC ) -			g_snprintf( s, sizeof( s ), "account add oscar \"%s\" \"%s\" %s", a->user, a->pass, a->server ); -		else -			g_snprintf( s, sizeof( s ), "account add %s \"%s\" \"%s\" \"%s\"", -			            proto_name[a->protocol], a->user, a->pass, a->server ? a->server : "" ); -		 -		line = obfucrypt( irc, s ); -		if( *line ) -		{ -			if( fprintf( fp, "%s\n", line ) != strlen( line ) + 1 ) -			{ -				irc_usermsg( irc, "fprintf() wrote too little. Disk full?" ); -				fclose( fp ); -				return( 0 ); -			} -		} -		g_free( line ); -	} -	 -	for( set = irc->set; set; set = set->next ) -	{ -		if( set->value && set->def ) -		{ -			g_snprintf( s, sizeof( s ), "set %s \"%s\"", set->key, set->value ); -			line = obfucrypt( irc, s ); -			if( *line ) -			{ -				if( fprintf( fp, "%s\n", line ) != strlen( line ) + 1 ) -				{ -					irc_usermsg( irc, "fprintf() wrote too little. Disk full?" ); -					fclose( fp ); -					return( 0 ); -				} -			} -			g_free( line ); -		} -	} -	 -	if( strcmp( irc->mynick, ROOT_NICK ) != 0 ) -	{ -		g_snprintf( s, sizeof( s ), "rename %s %s", ROOT_NICK, irc->mynick ); -		line = obfucrypt( irc, s ); -		if( *line ) -		{ -			if( fprintf( fp, "%s\n", line ) != strlen( line ) + 1 ) -			{ -				irc_usermsg( irc, "fprintf() wrote too little. Disk full?" ); -				fclose( fp ); -				return( 0 ); -			} -		} -		g_free( line ); -	} -	if( fclose( fp ) != 0 ) -	{ -		irc_usermsg( irc, "fclose() reported an error. Disk full?" ); -		return( 0 ); -	} -	 - 	g_snprintf( new_path, 512, "%s%s%s", global.conf->configdir, irc->nick, ".accounts" ); - 	if( unlink( new_path ) != 0 ) -	{ -		if( errno != ENOENT ) -		{ -			irc_usermsg( irc, "Error while removing old .accounts file" ); -			return( 0 ); -		} -	} -	if( rename( path, new_path ) != 0 ) -	{ -		irc_usermsg( irc, "Error while renaming new .accounts file" ); -		return( 0 ); -	} -	 -	umask( ou ); -	 -	return( 1 ); -} -  void bitlbee_shutdown( gpointer data )  {  	/* Try to save data for all active connections (if desired). */ | 
