aboutsummaryrefslogtreecommitdiffstats
path: root/storage_text.c
diff options
context:
space:
mode:
Diffstat (limited to 'storage_text.c')
-rw-r--r--storage_text.c178
1 files changed, 2 insertions, 176 deletions
diff --git a/storage_text.c b/storage_text.c
index 06d278aa..ac197685 100644
--- a/storage_text.c
+++ b/storage_text.c
@@ -112,186 +112,13 @@ static storage_status_t text_load ( const char *my_nick, const char* password, i
continue;
http_decode( s );
- nick_set( irc, s, prpl, nick );
+ // FIXME!!!! nick_set( irc, s, prpl, nick );
}
fclose( fp );
return STORAGE_OK;
}
-static storage_status_t text_save( irc_t *irc, int overwrite )
-{
- 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;
-
- if (!overwrite) {
- g_snprintf( path, 511, "%s%s%s", global.conf->configdir, irc->nick, ".accounts" );
- if (access( path, F_OK ) != -1)
- return STORAGE_ALREADY_EXISTS;
-
- g_snprintf( path, 511, "%s%s%s", global.conf->configdir, irc->nick, ".nicks" );
- if (access( path, F_OK ) != -1)
- return STORAGE_ALREADY_EXISTS;
- }
-
- /*\
- * [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->password );
- if( hash == NULL )
- {
- irc_usermsg( irc, "Please register yourself if you want to save your settings." );
- return STORAGE_OTHER_ERROR;
- }
-
- g_snprintf( path, 511, "%s%s%s", global.conf->configdir, irc->nick, ".nicks~" );
- fp = fopen( path, "w" );
- if( !fp ) return STORAGE_OTHER_ERROR;
- 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", find_protocol_id(n->proto->name), n->nick );
- if( fprintf( fp, "%s\n", s ) != strlen( s ) + 1 )
- {
- irc_usermsg( irc, "fprintf() wrote too little. Disk full?" );
- fclose( fp );
- return STORAGE_OTHER_ERROR;
- }
- }
- if( fclose( fp ) != 0 )
- {
- irc_usermsg( irc, "fclose() reported an error. Disk full?" );
- return STORAGE_OTHER_ERROR;
- }
-
- 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 STORAGE_OTHER_ERROR;
- }
- }
- if( rename( path, new_path ) != 0 )
- {
- irc_usermsg( irc, "Error while renaming new .nicks file" );
- return STORAGE_OTHER_ERROR;
- }
-
- g_snprintf( path, 511, "%s%s%s", global.conf->configdir, irc->nick, ".accounts~" );
- fp = fopen( path, "w" );
- if( !fp ) return STORAGE_OTHER_ERROR;
- if( fprintf( fp, "%s", hash ) != strlen( hash ) )
- {
- irc_usermsg( irc, "fprintf() wrote too little. Disk full?" );
- fclose( fp );
- return STORAGE_OTHER_ERROR;
- }
- g_free( hash );
-
- for( a = irc->accounts; a; a = a->next )
- {
- if( !strcmp(a->prpl->name, "oscar") )
- 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\"",
- a->prpl->name, a->user, a->pass, a->server ? a->server : "" );
-
- line = obfucrypt( s, irc->password );
- if( *line )
- {
- if( fprintf( fp, "%s\n", line ) != strlen( line ) + 1 )
- {
- irc_usermsg( irc, "fprintf() wrote too little. Disk full?" );
- fclose( fp );
- return STORAGE_OTHER_ERROR;
- }
- }
- 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( s, irc->password );
- if( *line )
- {
- if( fprintf( fp, "%s\n", line ) != strlen( line ) + 1 )
- {
- irc_usermsg( irc, "fprintf() wrote too little. Disk full?" );
- fclose( fp );
- return STORAGE_OTHER_ERROR;
- }
- }
- g_free( line );
- }
- }
-
- if( strcmp( irc->mynick, ROOT_NICK ) != 0 )
- {
- g_snprintf( s, sizeof( s ), "rename %s %s", ROOT_NICK, irc->mynick );
- line = obfucrypt( s, irc->password );
- if( *line )
- {
- if( fprintf( fp, "%s\n", line ) != strlen( line ) + 1 )
- {
- irc_usermsg( irc, "fprintf() wrote too little. Disk full?" );
- fclose( fp );
- return STORAGE_OTHER_ERROR;
- }
- }
- g_free( line );
- }
- if( fclose( fp ) != 0 )
- {
- irc_usermsg( irc, "fclose() reported an error. Disk full?" );
- return STORAGE_OTHER_ERROR;
- }
-
- 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 STORAGE_OTHER_ERROR;
- }
- }
- if( rename( path, new_path ) != 0 )
- {
- irc_usermsg( irc, "Error while renaming new .accounts file" );
- return STORAGE_OTHER_ERROR;
- }
-
- umask( ou );
-
- return STORAGE_OK;
-}
-
static storage_status_t text_check_pass( const char *nick, const char *password )
{
char s[512];
@@ -336,6 +163,5 @@ storage_t storage_text = {
.init = text_init,
.check_pass = text_check_pass,
.remove = text_remove,
- .load = text_load,
- .save = text_save
+ .load = text_load
};