Changeset 4eb4c0f


Ignore:
Timestamp:
2008-02-16T17:15:31Z (12 years ago)
Author:
Sven Moritz Hallberg <sm@…>
Branches:
master
Children:
fd9fa52
Parents:
8961950 (diff), ca60550 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merge in upstream changes

Files:
2 added
32 edited

Legend:

Unmodified
Added
Removed
  • Makefile

    r8961950 r4eb4c0f  
    5050        $(MAKE) -C tests
    5151
    52 lcov:
    5352gcov: check
    5453        gcov *.c
  • bitlbee.c

    r8961950 r4eb4c0f  
    4848        hints.ai_family = PF_UNSPEC;
    4949        hints.ai_socktype = SOCK_STREAM;
    50         hints.ai_flags = AI_ADDRCONFIG | AI_PASSIVE;
     50        hints.ai_flags = AI_PASSIVE
     51#ifdef AI_ADDRCONFIG
     52                       | AI_ADDRCONFIG
     53#endif
     54        ;
    5155
    5256        i = getaddrinfo( global.conf->iface, global.conf->port, &hints, &addrinfo_bind );
  • bitlbee.h

    r8961950 r4eb4c0f  
    9999#endif
    100100
     101#ifndef G_GNUC_MALLOC
     102/* Doesn't exist in GLib <=2.4 while everything else in BitlBee should
     103   work with it, so let's fake this one. */
     104#define G_GNUC_MALLOC
     105#endif
     106
    101107#define _( x ) x
    102108
     
    115121#define HELP_FILE VARDIR "help.txt"
    116122#define CONF_FILE_DEF ETCDIR "bitlbee.conf"
    117 
    118 extern char *CONF_FILE;
    119123
    120124#include "irc.h"
     
    140144        gint listen_watch_source_id;
    141145        help_t *help;
     146        char *conf_file;
    142147        conf_t *conf;
    143148        GList *storage; /* The first backend in the list will be used for saving */
  • conf.c

    r8961950 r4eb4c0f  
    3636#include "proxy.h"
    3737
    38 char *CONF_FILE;
    39 
    4038static int conf_loadini( conf_t *conf, char *file );
    4139
     
    4341{
    4442        conf_t *conf;
    45         int opt, i;
     43        int opt, i, config_missing = 0;
    4644       
    4745        conf = g_new0( conf_t, 1 );
     
    6765        proxytype = 0;
    6866       
    69         i = conf_loadini( conf, CONF_FILE );
     67        i = conf_loadini( conf, global.conf_file );
    7068        if( i == 0 )
    7169        {
    72                 fprintf( stderr, "Error: Syntax error in configuration file `%s'.\n", CONF_FILE );
    73                 return( NULL );
     70                fprintf( stderr, "Error: Syntax error in configuration file `%s'.\n", global.conf_file );
     71                return NULL;
    7472        }
    7573        else if( i == -1 )
    7674        {
    77                 fprintf( stderr, "Warning: Unable to read configuration file `%s'.\n", CONF_FILE );
     75                config_missing ++;
     76                /* Whine after parsing the options if there was no -c pointing
     77                   at a *valid* configuration file. */
    7878        }
    7979       
     
    107107                else if( opt == 'c' )
    108108                {
    109                         if( strcmp( CONF_FILE, optarg ) != 0 )
    110                         {
    111                                 g_free( CONF_FILE );
    112                                 CONF_FILE = g_strdup( optarg );
     109                        if( strcmp( global.conf_file, optarg ) != 0 )
     110                        {
     111                                g_free( global.conf_file );
     112                                global.conf_file = g_strdup( optarg );
    113113                                g_free( conf );
    114114                                /* Re-evaluate arguments. Don't use this option twice,
     
    116116                                   works with all libcs BTW.. */
    117117                                optind = 1;
    118                                 return( conf_load( argc, argv ) );
     118                                return conf_load( argc, argv );
    119119                        }
    120120                }
     
    144144                                "  -d  Specify alternative user configuration directory\n"
    145145                                "  -h  Show this help page.\n" );
    146                         return( NULL );
     146                        return NULL;
    147147                }
    148148                else if( opt == 'R' )
     
    170170        }
    171171       
    172         return( conf );
     172        if( config_missing )
     173                fprintf( stderr, "Warning: Unable to read configuration file `%s'.\n", global.conf_file );
     174       
     175        return conf;
    173176}
    174177
     
    179182       
    180183        ini = ini_open( file );
    181         if( ini == NULL ) return( -1 );
     184        if( ini == NULL ) return -1;
    182185        while( ini_read( ini ) )
    183186        {
     
    262265                                {
    263266                                        fprintf( stderr, "Invalid %s value: %s\n", ini->key, ini->value );
    264                                         return( 0 );
     267                                        return 0;
    265268                                }
    266269                                conf->ping_interval = i;
     
    271274                                {
    272275                                        fprintf( stderr, "Invalid %s value: %s\n", ini->key, ini->value );
    273                                         return( 0 );
     276                                        return 0;
    274277                                }
    275278                                conf->ping_timeout = i;
     
    283286                                        fprintf( stderr, "Invalid %s value: %s\n", ini->key, ini->value );
    284287                                        g_free( url );
    285                                         return( 0 );
     288                                        return 0;
    286289                                }
    287290                               
     
    307310                        {
    308311                                fprintf( stderr, "Error: Unknown setting `%s` in configuration file.\n", ini->key );
    309                                 return( 0 );
     312                                return 0;
    310313                                /* For now just ignore unknown keys... */
    311314                        }
     
    315318                        fprintf( stderr, "Error: Unknown section [%s] in configuration file. "
    316319                                         "BitlBee configuration must be put in a [settings] section!\n", ini->section );
    317                         return( 0 );
     320                        return 0;
    318321                }
    319322        }
    320323        ini_close( ini );
    321324       
    322         return( 1 );
     325        return 1;
    323326}
    324327
     
    327330        ini_t *ini;
    328331       
    329         ini = ini_open( CONF_FILE );
     332        ini = ini_open( global.conf_file );
    330333        if( ini == NULL ) return;
    331334        while( ini_read( ini ) )
  • crypting.c

    r8961950 r4eb4c0f  
    2929   the programs will be built. */
    3030
    31 #include <string.h>
    32 #include <stdio.h>
    33 #include <stdlib.h>
    34 #include <glib.h>
     31#include <bitlbee.h>
    3532#include "md5.h"
    3633#include "crypting.h"
  • help.c

    r8961950 r4eb4c0f  
    7171                {
    7272                        /* FIXME: Clean up */
    73 //                      help_close( *help );
    74                         *help = NULL;
     73                        help_free( help );
    7574                        g_free( s );
    76                         return( NULL );
     75                        return NULL;
    7776                }
    7877                i = strchr( s, '\n' ) - s;
    7978               
    80                 if( h->string )
     79                if( h->title )
    8180                {
    8281                        h = h->next = g_new0( help_t, 1 );
    8382                }
    84                 h->string = g_new ( char, i );
     83                h->title = g_new ( char, i );
    8584               
    86                 strncpy( h->string, s + 1, i - 1 );
    87                 h->string[i-1] = 0;
     85                strncpy( h->title, s + 1, i - 1 );
     86                h->title[i-1] = 0;
    8887                h->fd = (*help)->fd;
    8988                h->offset.file_offset = lseek( h->fd, 0, SEEK_CUR ) - buflen + i + 1;
     
    103102}
    104103
    105 char *help_get( help_t **help, char *string )
     104void help_free( help_t **help )
     105{
     106        help_t *h, *oh;
     107        int last_fd = -1; /* Weak de-dupe */
     108       
     109        if( help == NULL || *help == NULL )
     110                return;
     111       
     112        h = *help;
     113        while( h )
     114        {
     115                if( h->fd != last_fd )
     116                {
     117                        close( h->fd );
     118                        last_fd = h->fd;
     119                }
     120                g_free( h->title );
     121                h = (oh=h)->next;
     122                g_free( oh );
     123        }
     124       
     125        *help = NULL;
     126}
     127
     128char *help_get( help_t **help, char *title )
    106129{
    107130        time_t mtime;
     
    111134        for( h = *help; h; h = h->next )
    112135        {
    113                 if( h->string != NULL &&
    114                         g_strcasecmp( h->string, string ) == 0 )
     136                if( h->title != NULL && g_strcasecmp( h->title, title ) == 0 )
    115137                        break;
    116138        }
     
    119141                char *s = g_new( char, h->length + 1 );
    120142               
    121                 if( fstat( h->fd, stat ) != 0 )
    122                 {
    123                         g_free( h );
    124                         *help = NULL;
    125                         return NULL;
    126                 }
    127                 mtime = stat->st_mtime;
    128                
    129                 if( mtime > h->mtime )
    130                         return NULL;
    131                
    132143                s[h->length] = 0;
    133144                if( h->fd >= 0 )
    134145                {
     146                        if( fstat( h->fd, stat ) != 0 )
     147                        {
     148                                g_free( s );
     149                                return NULL;
     150                        }
     151                        mtime = stat->st_mtime;
     152               
     153                        if( mtime > h->mtime )
     154                        {
     155                                g_free( s );
     156                                return NULL;
     157                        }
     158                       
    135159                        lseek( h->fd, h->offset.file_offset, SEEK_SET );
    136160                        read( h->fd, s, h->length );
  • help.h

    r8961950 r4eb4c0f  
    3737        int fd;
    3838        time_t mtime;
    39         char *string;
     39        char *title;
    4040        help_off_t offset;
    4141        int length;
     
    4444
    4545G_GNUC_MALLOC help_t *help_init( help_t **help, const char *helpfile );
    46 char *help_get( help_t **help, char *string );
     46void help_free( help_t **help );
     47char *help_get( help_t **help, char *title );
    4748
    4849#endif
  • irc.c

    r8961950 r4eb4c0f  
    7777
    7878                if( getnameinfo( (struct sockaddr *) &sock, socklen, buf,
    79                                  NI_MAXHOST, NULL, -1, 0 ) == 0 )
     79                                 NI_MAXHOST, NULL, 0, 0 ) == 0 )
    8080                {
    8181                        irc->myhost = g_strdup( ipv6_unwrap( buf ) );
     
    8888
    8989                if( getnameinfo( (struct sockaddr *)&sock, socklen, buf,
    90                                  NI_MAXHOST, NULL, -1, 0 ) == 0 )
     90                                 NI_MAXHOST, NULL, 0, 0 ) == 0 )
    9191                {
    9292                        irc->host = g_strdup( ipv6_unwrap( buf ) );
     
    199199        account_t *account;
    200200        user_t *user, *usertmp;
    201         help_t *helpnode, *helpnodetmp;
    202201       
    203202        log_message( LOGLVL_INFO, "Destroying connection with fd %d", irc->fd );
     
    275274        g_hash_table_foreach_remove(irc->watches, irc_free_hashkey, NULL);
    276275        g_hash_table_destroy(irc->watches);
    277        
    278         if (irc->help != NULL) {
    279                 helpnode = irc->help;
    280                 while (helpnode != NULL) {
    281                         g_free(helpnode->string);
    282                        
    283                         helpnodetmp = helpnode;
    284                         helpnode = helpnode->next;
    285                         g_free(helpnodetmp);
    286                 }
    287         }
    288276       
    289277        otr_free(irc->otr);
  • irc.h

    r8961950 r4eb4c0f  
    9191        GHashTable *watches;
    9292        struct __NICK *nicks;
    93         struct help *help;
    9493        struct set *set;
    9594
  • irc_commands.c

    r8961950 r4eb4c0f  
    556556       
    557557        for( h = global.help; h; h = h->next )
    558                 irc_privmsg( irc, u, "NOTICE", irc->nick, "COMPLETIONS help ", h->string );
     558                irc_privmsg( irc, u, "NOTICE", irc->nick, "COMPLETIONS help ", h->title );
    559559       
    560560        for( s = irc->set; s; s = s->next )
     
    571571                ipc_to_master( cmd );
    572572       
    573         irc_reply( irc, 382, "%s :Rehashing", CONF_FILE );
     573        irc_reply( irc, 382, "%s :Rehashing", global.conf_file );
    574574}
    575575
  • lib/Makefile

    r8961950 r4eb4c0f  
    1818all: lib.o
    1919check: all
    20 lcov:
     20lcov: check
    2121gcov:
    2222        gcov *.c
  • protocols/Makefile

    r8961950 r4eb4c0f  
    2727all: protocols.o
    2828check: all
    29 lcov:
     29lcov: check
    3030gcov:
    3131        gcov *.c
  • protocols/jabber/Makefile

    r8961950 r4eb4c0f  
    1818all: jabber_mod.o
    1919check: all
    20 lcov:
     20lcov: check
    2121gcov:
    2222        gcov *.c
  • protocols/jabber/conference.c

    r8961950 r4eb4c0f  
    3737        xt_add_attr( node, "xmlns", XMLNS_MUC );
    3838        node = jabber_make_packet( "presence", NULL, roomjid, node );
     39        if( password )
     40                xt_add_child( node, xt_new_node( "password", password, NULL ) );
    3941        jabber_cache_add( ic, node, jabber_chat_join_failed );
    4042       
     
    122124        struct jabber_chat *jc = c->data;
    123125        struct xt_node *node;
     126       
     127        jc->flags |= JCFLAG_MESSAGE_SENT;
    124128       
    125129        node = xt_new_node( "body", message, NULL );
     
    295299        struct xt_node *subject = xt_find_node( node->children, "subject" );
    296300        struct xt_node *body = xt_find_node( node->children, "body" );
    297         struct groupchat *chat = NULL;
     301        struct groupchat *chat = bud ? jabber_chat_by_jid( ic, bud->bare_jid ) : NULL;
     302        struct jabber_chat *jc = chat ? chat->data : NULL;
    298303        char *s;
    299304       
    300         if( bud == NULL )
     305        if( bud == NULL || ( jc && ~jc->flags & JCFLAG_MESSAGE_SENT && bud == jc->me ) )
    301306        {
    302307                char *nick;
     
    346351                return;
    347352        }
    348         else if( ( chat = jabber_chat_by_jid( ic, bud->bare_jid ) ) == NULL )
     353        else if( chat == NULL )
    349354        {
    350355                /* How could this happen?? We could do kill( self, 11 )
  • protocols/jabber/iq.c

    r8961950 r4eb4c0f  
    9292                else if( strcmp( s, XMLNS_DISCOVER ) == 0 )
    9393                {
    94                         const char *features[] = { XMLNS_VERSION,
     94                        const char *features[] = { XMLNS_DISCOVER,
     95                                                   XMLNS_VERSION,
    9596                                                   XMLNS_TIME,
    9697                                                   XMLNS_CHATSTATES,
  • protocols/jabber/jabber.h

    r8961950 r4eb4c0f  
    4949typedef enum
    5050{
    51         JBFLAG_PROBED_XEP85 = 1,        /* Set this when we sent our probe packet to make
     51        JBFLAG_PROBED_XEP85 = 1,        /* Set this when we sent our probe packet to make
    5252                                           sure it gets sent only once. */
    53         JBFLAG_DOES_XEP85 = 2,          /* Set this when the resource seems to support
     53        JBFLAG_DOES_XEP85 = 2,          /* Set this when the resource seems to support
    5454                                           XEP85 (typing notification shite). */
    55         JBFLAG_IS_CHATROOM = 4,         /* It's convenient to use this JID thingy for
     55        JBFLAG_IS_CHATROOM = 4,         /* It's convenient to use this JID thingy for
    5656                                           groupchat state info too. */
    57         JBFLAG_IS_ANONYMOUS = 8,        /* For anonymous chatrooms, when we don't have
     57        JBFLAG_IS_ANONYMOUS = 8,        /* For anonymous chatrooms, when we don't have
    5858                                           have a real JID. */
    5959} jabber_buddy_flags_t;
     60
     61typedef enum
     62{
     63        JCFLAG_MESSAGE_SENT = 1,        /* Set this after sending the first message, so
     64                                           we can detect echoes/backlogs. */
     65} jabber_chat_flags_t;
    6066
    6167struct jabber_data
     
    95101struct jabber_cache_entry
    96102{
     103        time_t saved_at;
    97104        struct xt_node *node;
    98105        jabber_cache_event func;
     
    140147#define JABBER_PACKET_ID "BeeP"
    141148#define JABBER_CACHED_ID "BeeC"
     149
     150/* The number of seconds to keep cached packets before garbage collecting
     151   them. This gc is done on every keepalive (every minute). */
     152#define JABBER_CACHE_MAX_AGE 600
    142153
    143154/* RFC 392[01] stuff */
     
    161172#define XMLNS_MUC          "http://jabber.org/protocol/muc"     /* XEP-0045 */
    162173#define XMLNS_MUC_USER     "http://jabber.org/protocol/muc#user"/* XEP-0045 */
     174#define XMLNS_CAPS         "http://jabber.org/protocol/caps"    /* XEP-0115 */
    163175
    164176/* iq.c */
  • protocols/jabber/jabber_util.c

    r8961950 r4eb4c0f  
    142142        entry->node = node;
    143143        entry->func = func;
     144        entry->saved_at = time( NULL );
    144145        g_hash_table_insert( jd->node_cache, xt_find_attr( node, "id" ), entry );
    145146}
     
    163164{
    164165        struct jabber_data *jd = ic->proto_data;
    165        
    166         g_hash_table_foreach_remove( jd->node_cache, jabber_cache_clean_entry, NULL );
    167 }
    168 
    169 gboolean jabber_cache_clean_entry( gpointer key, gpointer entry_, gpointer nullpointer )
     166        time_t threshold = time( NULL ) - JABBER_CACHE_MAX_AGE;
     167       
     168        g_hash_table_foreach_remove( jd->node_cache, jabber_cache_clean_entry, &threshold );
     169}
     170
     171gboolean jabber_cache_clean_entry( gpointer key, gpointer entry_, gpointer threshold_ )
    170172{
    171173        struct jabber_cache_entry *entry = entry_;
    172         struct xt_node *node = entry->node;
    173        
    174         if( node->flags & XT_SEEN )
    175                 return TRUE;
    176         else
    177         {
    178                 node->flags |= XT_SEEN;
    179                 return FALSE;
    180         }
     174        time_t *threshold = threshold_;
     175       
     176        return entry->saved_at < *threshold;
    181177}
    182178
  • protocols/jabber/presence.c

    r8961950 r4eb4c0f  
    2929        char *from = xt_find_attr( node, "from" );
    3030        char *type = xt_find_attr( node, "type" );      /* NULL should mean the person is online. */
    31         struct xt_node *c;
     31        struct xt_node *c, *cap;
    3232        struct jabber_buddy *bud, *send_presence = NULL;
    3333        int is_chat = 0;
     
    7676                else
    7777                        bud->priority = 0;
     78               
     79                if( bud && ( cap = xt_find_node( node->children, "c" ) ) &&
     80                    ( s = xt_find_attr( cap, "xmlns" ) ) && strcmp( s, XMLNS_CAPS ) == 0 )
     81                {
     82                        /* This <presence> stanza includes an XEP-0115
     83                           capabilities part. Not too interesting, but we can
     84                           see if it has an ext= attribute. */
     85                        s = xt_find_attr( cap, "ext" );
     86                        if( s && ( strstr( s, "cstates" ) || strstr( s, "chatstate" ) ) )
     87                                bud->flags |= JBFLAG_DOES_XEP85;
     88                       
     89                        /* This field can contain more information like xhtml
     90                           support, but we don't support that ourselves.
     91                           Officially the ext= tag was deprecated, but enough
     92                           clients do send it.
     93                           
     94                           (I'm aware that this is not the right way to use
     95                           this field.) See for an explanation of ext=:
     96                           http://www.xmpp.org/extensions/attic/xep-0115-1.3.html*/
     97                }
    7898               
    7999                if( is_chat )
     
    186206{
    187207        struct jabber_data *jd = ic->proto_data;
    188         struct xt_node *node;
     208        struct xt_node *node, *cap;
    189209        char *show = jd->away_state->code;
    190210        char *status = jd->away_message;
     
    199219                xt_add_child( node, xt_new_node( "status", status, NULL ) );
    200220       
     221        /* This makes the packet slightly bigger, but clients interested in
     222           capabilities can now cache the discovery info. This reduces the
     223           usual post-login iq-flood. See XEP-0115. At least libpurple and
     224           Trillian seem to do this right. */
     225        cap = xt_new_node( "c", NULL, NULL );
     226        xt_add_attr( cap, "xmlns", XMLNS_CAPS );
     227        xt_add_attr( cap, "node", "http://bitlbee.org/xmpp/caps" );
     228        xt_add_attr( cap, "ver", BITLBEE_VERSION ); /* The XEP wants this hashed, but nobody's doing that. */
     229        xt_add_child( node, cap );
     230       
    201231        st = jabber_write_packet( ic, node );
    202232       
  • protocols/jabber/sasl.c

    r8961950 r4eb4c0f  
    2121*                                                                           *
    2222\***************************************************************************/
     23
     24#include <ctype.h>
    2325
    2426#include "jabber.h"
     
    107109}
    108110
    109 static char *sasl_get_part( char *data, char *field )
     111/* Non-static function, but not mentioned in jabber.h because it's for internal
     112   use, just that the unittest should be able to reach it... */
     113char *sasl_get_part( char *data, char *field )
    110114{
    111115        int i, len;
    112116       
    113117        len = strlen( field );
     118       
     119        while( isspace( *data ) || *data == ',' )
     120                data ++;
    114121       
    115122        if( g_strncasecmp( data, field, len ) == 0 && data[len] == '=' )
     
    129136                        }
    130137                       
    131                         /* If we got a comma, we got a new field. Check it. */
    132                         if( data[i] == ',' &&
    133                             g_strncasecmp( data + i + 1, field, len ) == 0 &&
    134                             data[i+len+1] == '=' )
     138                        /* If we got a comma, we got a new field. Check it,
     139                           find the next key after it. */
     140                        if( data[i] == ',' )
    135141                        {
    136                                 i += len + 2;
    137                                 break;
     142                                while( isspace( data[i] ) || data[i] == ',' )
     143                                        i ++;
     144                               
     145                                if( g_strncasecmp( data + i, field, len ) == 0 &&
     146                                    data[i+len] == '=' )
     147                                {
     148                                        i += len + 1;
     149                                        break;
     150                                }
    138151                        }
    139152                }
  • protocols/msn/Makefile

    r8961950 r4eb4c0f  
    1818all: msn_mod.o
    1919check: all
    20 lcov:
     20lcov: check
    2121gcov:
    2222        gcov *.c
  • protocols/msn/ns.c

    r8961950 r4eb4c0f  
    584584        else
    585585        {
    586                 debug( "Received unknown command from main server: %s", cmd[0] );
     586                /* debug( "Received unknown command from main server: %s", cmd[0] ); */
    587587        }
    588588       
  • protocols/msn/sb.c

    r8961950 r4eb4c0f  
    594594        else
    595595        {
    596                 debug( "Received unknown command from switchboard server: %s", cmd[0] );
     596                /* debug( "Received unknown command from switchboard server: %s", cmd[0] ); */
    597597        }
    598598       
  • protocols/oscar/Makefile

    r8961950 r4eb4c0f  
    1818all: oscar_mod.o
    1919check: all
    20 lcov:
     20lcov: check
    2121gcov:
    2222        gcov *.c
  • protocols/oscar/oscar.c

    r8961950 r4eb4c0f  
    10661066                g_snprintf(tmp, BUF_LONG, "%s", args->msg);
    10671067        } else {
    1068                 int i;
     1068                aim_mpmsg_section_t *part;
    10691069               
    10701070                *tmp = 0;
    1071                 for (i = 0; i < args->mpmsg.numparts; i ++) {
    1072                         g_strlcat(tmp, (char*) args->mpmsg.parts[i].data, BUF_LONG);
    1073                         g_strlcat(tmp, "\n", BUF_LONG);
     1071                for (part = args->mpmsg.parts; part; part = part->next) {
     1072                        if (part->data) {
     1073                                g_strlcat(tmp, (char*) part->data, BUF_LONG);
     1074                                g_strlcat(tmp, "\n", BUF_LONG);
     1075                        }
    10741076                }
    10751077        }
  • protocols/yahoo/Makefile

    r8961950 r4eb4c0f  
    1818all: yahoo_mod.o
    1919check: all
    20 lcov:
     20lcov: check
    2121gcov:
    2222        gcov *.c
  • root_commands.c

    r8961950 r4eb4c0f  
    454454        {
    455455                add_on_server = 0;
    456                 cmd ++;         /* So evil... :-D */
     456                cmd ++;
    457457        }
    458458       
     
    486486        }
    487487       
    488         /* By making this optional, you can talk to people without having to
    489            add them to your *real* (server-side) contact list. */
    490488        if( add_on_server )
    491489                a->ic->acc->prpl->add_buddy( a->ic, cmd[2], NULL );
    492        
    493         /* add_buddy( a->ic, NULL, cmd[2], cmd[2] ); */
     490        else
     491                /* Yeah, officially this is a call-*back*... So if we just
     492                   called add_buddy, we'll wait for the IM server to respond
     493                   before we do this. */
     494                imcb_add_buddy( a->ic, cmd[2], NULL );
    494495       
    495496        irc_usermsg( irc, "Adding `%s' to your contact list", cmd[2]  );
  • storage_text.c

    r8961950 r4eb4c0f  
    3030static void text_init (void)
    3131{
    32         if( access( global.conf->configdir, F_OK ) != 0 )
    33                 log_message( LOGLVL_WARNING, "The configuration directory %s does not exist. Configuration won't be saved.", global.conf->configdir );
    34         else if( access( global.conf->configdir, R_OK ) != 0 || access( global.conf->configdir, W_OK ) != 0 )
    35                 log_message( LOGLVL_WARNING, "Permission problem: Can't read/write from/to %s.", global.conf->configdir );
     32        /* Don't complain about the configuration directory anymore, leave it
     33           up to the XML storage module, which uses the same directory for it
     34           anyway. Nobody should be using just the text plugin anymore since
     35           it's read only! */
    3636}
    3737
  • storage_xml.c

    r8961950 r4eb4c0f  
    263263{
    264264        if( access( global.conf->configdir, F_OK ) != 0 )
    265                 log_message( LOGLVL_WARNING, "The configuration directory %s does not exist. Configuration won't be saved.", global.conf->configdir );
     265                log_message( LOGLVL_WARNING, "The configuration directory `%s' does not exist. Configuration won't be saved.", global.conf->configdir );
    266266        else if( access( global.conf->configdir, R_OK ) != 0 || access( global.conf->configdir, W_OK ) != 0 )
    267                 log_message( LOGLVL_WARNING, "Permission problem: Can't read/write from/to %s.", global.conf->configdir );
     267                log_message( LOGLVL_WARNING, "Permission problem: Can't read/write from/to `%s'.", global.conf->configdir );
    268268}
    269269
  • tests/Makefile

    r8961950 r4eb4c0f  
    1111distclean: clean
    1212
    13 main_objs = account.o bitlbee.o conf.o crypting.o help.o ipc.o irc.o irc_commands.o log.o nick.o query.o root_commands.o set.o storage.o storage_xml.o storage_text.o user.o 
     13main_objs = account.o bitlbee.o conf.o crypting.o help.o ipc.o irc.o irc_commands.o log.o nick.o query.o root_commands.o set.o storage.o storage_xml.o storage_text.o user.o
    1414
    15 test_objs = check.o check_util.o check_nick.o check_md5.o check_arc.o check_irc.o check_help.o check_user.o check_crypting.o check_set.o
     15test_objs = check.o check_util.o check_nick.o check_md5.o check_arc.o check_irc.o check_help.o check_user.o check_crypting.o check_set.o check_jabber_sasl.o
    1616
    1717check: $(test_objs) $(addprefix ../, $(main_objs)) ../protocols/protocols.o ../lib/lib.o
  • tests/check.c

    r8961950 r4eb4c0f  
    6666Suite *set_suite(void);
    6767
     68/* From check_jabber_sasl.c */
     69Suite *jabber_sasl_suite(void);
     70
    6871int main (int argc, char **argv)
    6972{
     
    111114        srunner_add_suite(sr, crypting_suite());
    112115        srunner_add_suite(sr, set_suite());
     116        srunner_add_suite(sr, jabber_sasl_suite());
    113117        if (no_fork)
    114118                srunner_set_fork_status(sr, CK_NOFORK);
  • tests/check_arc.c

    r8961950 r4eb4c0f  
    6262                        0x73, 0x6d, 0xb3, 0x0a, 0x6f, 0x0a, 0x2b, 0x43, 0x57, 0xe9, 0x3e, 0x63
    6363                }, 24, "OSCAR is creepy..."
    64         }
     64        },
     65        { "", 0, NULL }
    6566};
    6667
     
    6970        int i;
    7071       
    71         for( i = 0; clear_tests[i]; i++ )
     72        for( i = 0; decrypt_tests[i].len; i++ )
    7273        {
    7374                tcase_fn_start (decrypt_tests[i].decrypted, __FILE__, __LINE__);
  • unix.c

    r8961950 r4eb4c0f  
    4848       
    4949        log_init();
    50         CONF_FILE = g_strdup( CONF_FILE_DEF );
     50        global.conf_file = g_strdup( CONF_FILE_DEF );
    5151        global.conf = conf_load( argc, argv );
    5252        if( global.conf == NULL )
     
    126126        if( !getuid() || !geteuid() )
    127127                log_message( LOGLVL_WARNING, "BitlBee is running with root privileges. Why?" );
    128         if( help_init( &(global.help), global.helpfile ) == NULL )
     128        if( help_init( &global.help, global.helpfile ) == NULL )
    129129                log_message( LOGLVL_WARNING, "Error opening helpfile %s.", HELP_FILE );
    130130       
    131131        b_main_run();
     132       
     133        /* Mainly good for restarting, to make sure we close the help.txt fd. */
     134        help_free( &global.help );
    132135       
    133136        if( global.restart )
Note: See TracChangeset for help on using the changeset viewer.