Changes in / [d4810df:ced1e17]


Ignore:
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • bitlbee.h

    rd4810df rced1e17  
    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

    rd4810df rced1e17  
    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

    rd4810df rced1e17  
    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

    rd4810df rced1e17  
    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

    rd4810df rced1e17  
    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

    rd4810df rced1e17  
    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

    rd4810df rced1e17  
    140140static void cmd_identify( irc_t *irc, char **cmd )
    141141{
    142         storage_status_t status = storage_load( irc->nick, cmd[1], irc );
     142        storage_status_t status = storage_load( irc, cmd[1] );
    143143        char *account_on[] = { "account", "on", NULL };
    144144       
     
    152152        case STORAGE_OK:
    153153                irc_usermsg( irc, "Password accepted, settings and accounts loaded" );
     154                irc_setpass( irc, cmd[1] );
     155                irc->status |= USTATUS_IDENTIFIED;
    154156                irc_umode_set( irc, "+R", 1 );
    155157                if( set_getbool( &irc->set, "auto_connect" ) )
     
    171173        }
    172174
    173         irc_setpass( irc, cmd[1] );
    174         switch( storage_save( irc, FALSE )) {
     175        switch( storage_save( irc, cmd[1], FALSE ) ) {
    175176                case STORAGE_ALREADY_EXISTS:
    176177                        irc_usermsg( irc, "Nick is already registered" );
     
    179180                case STORAGE_OK:
    180181                        irc_usermsg( irc, "Account successfully created" );
     182                        irc_setpass( irc, cmd[1] );
    181183                        irc->status |= USTATUS_IDENTIFIED;
    182184                        irc_umode_set( irc, "+R", 1 );
     
    872874static void cmd_save( irc_t *irc, char **cmd )
    873875{
    874         if( storage_save( irc, TRUE ) == STORAGE_OK )
     876        if( ( irc->status & USTATUS_IDENTIFIED ) == 0 )
     877                irc_usermsg( irc, "Please create an account first" );
     878        else if( storage_save( irc, NULL, TRUE ) == STORAGE_OK )
    875879                irc_usermsg( irc, "Configuration saved" );
    876880        else
  • storage.c

    rd4810df rced1e17  
    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

    rd4810df rced1e17  
    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

    rd4810df rced1e17  
    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

    rd4810df rced1e17  
    288288}
    289289
    290 static storage_status_t xml_load_real( const char *my_nick, const char *password, irc_t *irc, xml_pass_st action )
     290static storage_status_t xml_load_real( irc_t *irc, const char *my_nick, const char *password, xml_pass_st action )
    291291{
    292292        GMarkupParseContext *ctx;
     
    295295        GError *gerr = NULL;
    296296        int fd, st;
    297        
    298         if( irc && irc->status & USTATUS_IDENTIFIED )
    299                 return( 1 );
    300297       
    301298        xd = g_new0( struct xml_parsedata, 1 );
     
    350347                return STORAGE_OK;
    351348       
    352         irc->status |= USTATUS_IDENTIFIED;
    353        
    354349        return STORAGE_OK;
    355350}
    356351
    357 static storage_status_t xml_load( const char *my_nick, const char *password, irc_t *irc )
    358 {
    359         return xml_load_real( my_nick, password, irc, XML_PASS_UNKNOWN );
     352static storage_status_t xml_load( irc_t *irc, const char *password )
     353{
     354        return xml_load_real( irc, irc->nick, password, XML_PASS_UNKNOWN );
    360355}
    361356
     
    364359        /* This is a little bit risky because we have to pass NULL for the
    365360           irc_t argument. This *should* be fine, if I didn't miss anything... */
    366         return xml_load_real( my_nick, password, NULL, XML_PASS_CHECK_ONLY );
     361        return xml_load_real( NULL, my_nick, password, XML_PASS_CHECK_ONLY );
    367362}
    368363
     
    399394        md5_byte_t pass_md5[21];
    400395        md5_state_t md5_state;
    401        
    402         if( irc->password == NULL )
    403         {
    404                 irc_usermsg( irc, "Please register yourself if you want to save your settings." );
    405                 return STORAGE_OTHER_ERROR;
    406         }
    407396       
    408397        path2 = g_strdup( irc->nick );
Note: See TracChangeset for help on using the changeset viewer.