Changes in / [0a4f6f4:b99296f]


Ignore:
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • bitlbee.h

    r0a4f6f4 rb99296f  
    3333
    3434#define PACKAGE "BitlBee"
    35 #define BITLBEE_VERSION "1.2.2"
     35#define BITLBEE_VERSION "1.2.3"
    3636#define VERSION BITLBEE_VERSION
    3737
  • doc/CHANGES

    r0a4f6f4 rb99296f  
    33
    44http://bugs.bitlbee.org/bitlbee/timeline?daysback=90&changeset=on
     5
     6Version 1.2.3:
     7- Fixed one more flaw similar to the previous hijacking bug, caused by incon-
     8  sistent handling of the USTATUS_IDENTIFIED state. All code touching these
     9  variables was reviewed and should be correct now.
     10
     11Finished 7 Sep 2008
    512
    613Version 1.2.2:
  • doc/user-guide/Makefile

    r0a4f6f4 rb99296f  
    1313
    1414%.html: %.db.xml
    15         xsltproc --output $@ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $<
     15        xsltproc --output $@ http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl $<
    1616
    1717%.pdf: %.db.xml
  • doc/user-guide/help.xml

    r0a4f6f4 rb99296f  
    1 <?xml version="1.0" encoding="iso-8859-1"?>
     1<?xml version="1.0" encoding="utf-8"?>
    22<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
    33
  • doc/user-guide/user-guide.xml

    r0a4f6f4 rb99296f  
    1 <?xml version="1.0" encoding="iso-8859-1"?>
     1<?xml version="1.0" encoding="utf-8"?>
    22<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
    33
  • irc.c

    r0a4f6f4 rb99296f  
    3838        irc_t *irc = set->data;
    3939       
    40         if( irc->status & USTATUS_IDENTIFIED )
     40        if( irc->status & USTATUS_IDENTIFIED && value )
    4141        {
    4242                irc_setpass( irc, value );
     
    239239       
    240240        if( irc->status & USTATUS_IDENTIFIED && set_getbool( &irc->set, "save_on_quit" ) )
    241                 if( storage_save( irc, TRUE ) != STORAGE_OK )
     241                if( storage_save( irc, NULL, TRUE ) != STORAGE_OK )
    242242                        irc_usermsg( irc, "Error while saving settings!" );
    243243       
  • root_commands.c

    r0a4f6f4 rb99296f  
    131131static void cmd_identify( irc_t *irc, char **cmd )
    132132{
    133         storage_status_t status = storage_load( irc->nick, cmd[1], irc );
     133        storage_status_t status = storage_load( irc, cmd[1] );
    134134        char *account_on[] = { "account", "on", NULL };
    135135       
     
    143143        case STORAGE_OK:
    144144                irc_usermsg( irc, "Password accepted, settings and accounts loaded" );
     145                irc_setpass( irc, cmd[1] );
     146                irc->status |= USTATUS_IDENTIFIED;
    145147                irc_umode_set( irc, "+R", 1 );
    146148                if( set_getbool( &irc->set, "auto_connect" ) )
     
    162164        }
    163165
    164         irc_setpass( irc, cmd[1] );
    165         switch( storage_save( irc, FALSE )) {
     166        switch( storage_save( irc, cmd[1], FALSE ) ) {
    166167                case STORAGE_ALREADY_EXISTS:
    167168                        irc_usermsg( irc, "Nick is already registered" );
     
    170171                case STORAGE_OK:
    171172                        irc_usermsg( irc, "Account successfully created" );
     173                        irc_setpass( irc, cmd[1] );
    172174                        irc->status |= USTATUS_IDENTIFIED;
    173175                        irc_umode_set( irc, "+R", 1 );
     
    887889static void cmd_save( irc_t *irc, char **cmd )
    888890{
    889         if( storage_save( irc, TRUE ) == STORAGE_OK )
     891        if( ( irc->status & USTATUS_IDENTIFIED ) == 0 )
     892                irc_usermsg( irc, "Please create an account first" );
     893        else if( storage_save( irc, NULL, TRUE ) == STORAGE_OK )
    890894                irc_usermsg( irc, "Configuration saved" );
    891895        else
  • storage.c

    r0a4f6f4 rb99296f  
    103103}
    104104
    105 storage_status_t storage_load (const char *nick, const char *password, irc_t * irc)
    106 {
    107         GList *gl;
     105storage_status_t storage_load (irc_t * irc, const char *password)
     106{
     107        GList *gl;
     108       
     109        if (irc && irc->status & USTATUS_IDENTIFIED)
     110                return STORAGE_OTHER_ERROR;
    108111       
    109112        /* Loop until we don't get NO_SUCH_USER */
     
    112115                storage_status_t status;
    113116
    114                 status = st->load(nick, password, irc);
    115                 if (status == STORAGE_OK) {
    116                         irc_setpass(irc, password);
     117                status = st->load(irc, password);
     118                if (status == STORAGE_OK)
    117119                        return status;
    118                 }
    119120               
    120121                if (status != STORAGE_NO_SUCH_USER)
     
    125126}
    126127
    127 storage_status_t storage_save (irc_t *irc, int overwrite)
    128 {
    129         return ((storage_t *)global.storage->data)->save(irc, overwrite);
     128storage_status_t storage_save (irc_t *irc, char *password, int overwrite)
     129{
     130        storage_status_t st;
     131       
     132        if (password != NULL) {
     133                /* Should only use this in the "register" command. */
     134                if (irc->password || overwrite)
     135                        return STORAGE_OTHER_ERROR;
     136               
     137                irc_setpass(irc, password);
     138        } else if ((irc->status & USTATUS_IDENTIFIED) == 0) {
     139                return STORAGE_NO_SUCH_USER;
     140        }
     141       
     142        st = ((storage_t *)global.storage->data)->save(irc, overwrite);
     143       
     144        if (password != NULL) {
     145                irc_setpass(irc, NULL);
     146        }
     147       
     148        return st;
    130149}
    131150
     
    143162
    144163                status = st->remove(nick, password);
    145                 if (status != STORAGE_NO_SUCH_USER &&
    146                         status != STORAGE_OK)
     164                if (status != STORAGE_NO_SUCH_USER && status != STORAGE_OK)
    147165                        ret = status;
    148166        }
     
    150168        return ret;
    151169}
     170
     171#if 0
     172Not using this yet. Test thoroughly before adding UI hooks to this function.
    152173
    153174storage_status_t storage_rename (const char *onick, const char *nnick, const char *password)
     
    189210        return STORAGE_OK;
    190211}
     212#endif
  • storage.h

    r0a4f6f4 rb99296f  
    4545        storage_status_t (*check_pass) (const char *nick, const char *password);
    4646
    47         storage_status_t (*load) (const char *nick, const char *password, irc_t * irc);
     47        storage_status_t (*load) (irc_t *irc, const char *password);
    4848        storage_status_t (*save) (irc_t *irc, int overwrite);
    4949        storage_status_t (*remove) (const char *nick, const char *password);
     
    5555storage_status_t storage_check_pass (const char *nick, const char *password);
    5656
    57 storage_status_t storage_load (const char *nick, const char *password, irc_t * irc);
    58 storage_status_t storage_save (irc_t *irc, int overwrite);
     57storage_status_t storage_load (irc_t * irc, const char *password);
     58storage_status_t storage_save (irc_t *irc, char *password, int overwrite);
    5959storage_status_t storage_remove (const char *nick, const char *password);
    6060
    61 storage_status_t storage_rename (const char *onick, const char *nnick, const char *password);
     61/* storage_status_t storage_rename (const char *onick, const char *nnick, const char *password); */
    6262
    6363void register_storage_backend(storage_t *);
  • storage_text.c

    r0a4f6f4 rb99296f  
    4444}
    4545
    46 static storage_status_t text_load ( const char *my_nick, const char* password, irc_t *irc )
     46static storage_status_t text_load( irc_t *irc, const char* password )
    4747{
    4848        char s[512];
     
    5454        account_t *acc, *acc_lookup[9];
    5555       
    56         if( irc->status & USTATUS_IDENTIFIED )
    57                 return( 1 );
    58        
    59         g_snprintf( s, 511, "%s%s%s", global.conf->configdir, my_nick, ".accounts" );
     56        g_snprintf( s, 511, "%s%s%s", global.conf->configdir, irc->nick, ".accounts" );
    6057        fp = fopen( s, "r" );
    6158        if( !fp ) return STORAGE_NO_SUCH_USER;
     
    6865                return STORAGE_INVALID_PASSWORD;
    6966        }
    70        
    71         /* Do this now. If the user runs with AuthMode = Registered, the
    72            account command will not work otherwise. */
    73         irc->status |= USTATUS_IDENTIFIED;
    7467       
    7568        while( fscanf( fp, "%511[^\n]s", s ) > 0 )
     
    10194        }
    10295       
    103         g_snprintf( s, 511, "%s%s%s", global.conf->configdir, my_nick, ".nicks" );
     96        g_snprintf( s, 511, "%s%s%s", global.conf->configdir, irc->nick, ".nicks" );
    10497        fp = fopen( s, "r" );
    10598        if( !fp ) return STORAGE_NO_SUCH_USER;
  • storage_xml.c

    r0a4f6f4 rb99296f  
    2929#include "arc.h"
    3030#include "md5.h"
    31 #include <glib/gstdio.h>
    3231
    3332#if GLIB_CHECK_VERSION(2,8,0)
     
    259258}
    260259
    261 static storage_status_t xml_load_real( const char *my_nick, const char *password, irc_t *irc, xml_pass_st action )
     260static storage_status_t xml_load_real( irc_t *irc, const char *my_nick, const char *password, xml_pass_st action )
    262261{
    263262        GMarkupParseContext *ctx;
     
    266265        GError *gerr = NULL;
    267266        int fd, st;
    268        
    269         if( irc && irc->status & USTATUS_IDENTIFIED )
    270                 return( 1 );
    271267       
    272268        xd = g_new0( struct xml_parsedata, 1 );
     
    321317                return STORAGE_OK;
    322318       
    323         irc->status |= USTATUS_IDENTIFIED;
    324        
    325319        return STORAGE_OK;
    326320}
    327321
    328 static storage_status_t xml_load( const char *my_nick, const char *password, irc_t *irc )
    329 {
    330         return xml_load_real( my_nick, password, irc, XML_PASS_UNKNOWN );
     322static storage_status_t xml_load( irc_t *irc, const char *password )
     323{
     324        return xml_load_real( irc, irc->nick, password, XML_PASS_UNKNOWN );
    331325}
    332326
     
    335329        /* This is a little bit risky because we have to pass NULL for the
    336330           irc_t argument. This *should* be fine, if I didn't miss anything... */
    337         return xml_load_real( my_nick, password, NULL, XML_PASS_CHECK_ONLY );
     331        return xml_load_real( NULL, my_nick, password, XML_PASS_CHECK_ONLY );
    338332}
    339333
     
    370364        md5_byte_t pass_md5[21];
    371365        md5_state_t md5_state;
    372        
    373         if( irc->password == NULL )
    374         {
    375                 irc_usermsg( irc, "Please register yourself if you want to save your settings." );
    376                 return STORAGE_OTHER_ERROR;
    377         }
    378366       
    379367        path2 = g_strdup( irc->nick );
Note: See TracChangeset for help on using the changeset viewer.