Changeset 8661caa


Ignore:
Timestamp:
2008-08-04T14:45:24Z (11 years ago)
Author:
ulim <a.sporto+bee@…>
Branches:
master
Children:
87f525e
Parents:
4ac647d (diff), 718e05f (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:

merged in upstream r410.

Only conflict was the correction of jabber normalization which I had already done.

Files:
4 added
37 edited

Legend:

Unmodified
Added
Removed
  • .bzrignore

    r4ac647d r8661caa  
    1717*.gcno
    1818*.o
     19coverage
     20bitlbee.info
     21bitlbee.exe
  • Makefile

    r4ac647d r8661caa  
    1010
    1111# Program variables
    12 objects = 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_OBJS) unix.o user.o dcc.o
    13 headers = account.h bitlbee.h commands.h conf.h config.h crypting.h help.h ipc.h irc.h log.h nick.h query.h set.h sock.h storage.h user.h dcc.h lib/events.h lib/http_client.h lib/ini.h lib/md5.h lib/misc.h lib/proxy.h lib/sha1.h lib/ssl_client.h lib/url.h protocols/nogaim.h protocols/ft.h
     12objects = account.o bitlbee.o crypting.o help.o ipc.o irc.o irc_commands.o nick.o query.o root_commands.o set.o storage.o $(STORAGE_OBJS) user.o dcc.o
     13headers = account.h bitlbee.h commands.h conf.h config.h crypting.h help.h ipc.h irc.h log.h nick.h query.h set.h sock.h storage.h user.h lib/events.h lib/http_client.h lib/ini.h lib/md5.h lib/misc.h lib/proxy.h lib/sha1.h lib/ssl_client.h lib/url.h protocols/nogaim.h protocols/ft.h
    1414subdirs = lib protocols
     15
     16ifeq ($(TARGET),i586-mingw32msvc)
     17objects += win32.o
     18LFLAGS+=-lws2_32
     19EFLAGS+=-lsecur32
     20OUTFILE=bitlbee.exe
     21else
     22objects += unix.o conf.o log.o
     23OUTFILE=bitlbee
     24endif
    1525
    1626# Expansion of variables
  • bitlbee.c

    r4ac647d r8661caa  
    118118       
    119119        if( global.conf->runmode == RUNMODE_FORKDAEMON )
    120                 ipc_master_load_state();
     120                ipc_master_load_state( getenv( "_BITLBEE_RESTART_STATE" ) );
    121121
    122122        if( global.conf->runmode == RUNMODE_DAEMON || global.conf->runmode == RUNMODE_FORKDAEMON )
    123123                ipc_master_listen_socket();
    124124       
     125#ifndef _WIN32
    125126        if( ( fp = fopen( global.conf->pidfile, "w" ) ) )
    126127        {
     
    132133                log_message( LOGLVL_WARNING, "Warning: Couldn't write PID to `%s'", global.conf->pidfile );
    133134        }
     135#endif
    134136       
    135137        return( 0 );
     
    140142        if( !irc_new( 0 ) )
    141143                return( 1 );
    142        
    143         log_link( LOGLVL_ERROR, LOGOUTPUT_IRC );
    144         log_link( LOGLVL_WARNING, LOGOUTPUT_IRC );
    145144       
    146145        return( 0 );
     
    254253        struct sockaddr_in conn_info;
    255254        int new_socket = accept( global.listen_socket, (struct sockaddr *) &conn_info, &size );
    256         pid_t client_pid = 0;
    257255       
    258256        if( new_socket == -1 )
     
    262260        }
    263261       
     262#ifndef _WIN32
    264263        if( global.conf->runmode == RUNMODE_FORKDAEMON )
    265264        {
     265                pid_t client_pid = 0;
    266266                int fds[2];
    267267               
     
    320320        }
    321321        else
     322#endif
    322323        {
    323324                log_message( LOGLVL_INFO, "Creating new connection with fd %d.", new_socket );
  • bitlbee.h

    r4ac647d r8661caa  
    2929#define _GNU_SOURCE /* Stupid GNU :-P */
    3030
     31/* Depend on Windows 2000 for now since we need getaddrinfo() */
     32#define _WIN32_WINNT 0x0501
     33
    3134#define PACKAGE "BitlBee"
    32 #define BITLBEE_VERSION "1.2"
     35#define BITLBEE_VERSION "1.2.1"
    3336#define VERSION BITLBEE_VERSION
    3437
     
    4851#include <stdio.h>
    4952#include <ctype.h>
     53#include <errno.h>
     54
    5055#ifndef _WIN32
    5156#include <syslog.h>
    52 #include <errno.h>
    5357#endif
    5458
     
    9498#undef g_main_quit
    9599#define g_main_quit             __PLEASE_USE_B_MAIN_QUIT__
    96 
    97 #ifndef F_OK
    98 #define F_OK 0
    99 #endif
    100100
    101101#ifndef G_GNUC_MALLOC
  • conf.c

    r4ac647d r8661caa  
    7979        }
    8080       
    81         while( argc > 0 && ( opt = getopt( argc, argv, "i:p:P:nvIDFc:d:hR:u:" ) ) >= 0 )
     81        while( argc > 0 && ( opt = getopt( argc, argv, "i:p:P:nvIDFc:d:hu:" ) ) >= 0 )
    8282        /*     ^^^^ Just to make sure we skip this step from the REHASH handler. */
    8383        {
     
    146146                                "  -h  Show this help page.\n" );
    147147                        return NULL;
    148                 }
    149                 else if( opt == 'R' )
    150                 {
    151                         /* We can't load the statefile yet (and should make very sure we do this
    152                            only once), so set the filename here and load the state information
    153                            when initializing ForkDaemon. (This option only makes sense in that
    154                            mode anyway!) */
    155                         ipc_master_set_statefile( optarg );
    156148                }
    157149                else if( opt == 'u' )
  • configure

    r4ac647d r8661caa  
    2020ipcsocket='/var/run/bitlbee.sock'
    2121pcdir='$prefix/lib/pkgconfig'
     22systemlibdirs="/lib /usr/lib /usr/local/lib"
    2223
    2324msn=1
     
    7475--ssl=...       SSL library to use (gnutls, nss, openssl, bogus, auto)
    7576                                                        $ssl
     77
     78--target=...    Cross compilation target                same as host
    7679EOF
    7780                exit;
     
    107110PCDIR=$pcdir
    108111
     112TARGET=$target
    109113ARCH=$arch
    110114CPU=$cpu
    111 OUTFILE=bitlbee
    112115
    113116DESTDIR=
     
    132135EOF
    133136
     137
     138
     139if [ -n "$target" ]; then
     140        PKG_CONFIG_LIBDIR=/usr/$target/lib/pkgconfig
     141        export PKG_CONFIG_LIBDIR
     142        PATH=/usr/$target/bin:$PATH
     143        CC=$target-cc
     144        LD=$target-ld
     145        systemlibdirs="/usr/$target/lib"
     146fi
     147
     148
    134149if [ "$debug" = "1" ]; then
    135150        [ -z "$CFLAGS" ] && CFLAGS=-g
     
    158173echo "CC=$CC" >> Makefile.settings;
    159174
    160 if [ -n "$LD" ]; then
    161         echo "LD=$LD" >> Makefile.settings;
    162 elif type ld > /dev/null 2> /dev/null; then
    163         echo "LD=ld" >> Makefile.settings;
    164 else
    165         echo 'Cannot find ld, aborting.'
    166         exit 1;
    167 fi
     175if [ -z "$LD" ]; then
     176        if type ld > /dev/null 2> /dev/null; then
     177                LD=ld
     178        else
     179                echo 'Cannot find ld, aborting.'
     180                exit 1;
     181        fi
     182fi
     183
     184echo "LD=$LD" >> Makefile.settings
    168185
    169186if [ -z "$PKG_CONFIG" ]; then
     
    213230detect_gnutls()
    214231{
    215         if libgnutls-config --version > /dev/null 2> /dev/null; then
     232        if $PKG_CONFIG --exists gnutls; then
     233                cat <<EOF>>Makefile.settings
     234EFLAGS+=`$PKG_CONFIG --libs gnutls`
     235CFLAGS+=`$PKG_CONFIG --cflags gnutls`
     236EOF
     237                ssl=gnutls
     238                ret=1
     239        elif libgnutls-config --version > /dev/null 2> /dev/null; then
    216240                cat <<EOF>>Makefile.settings
    217241EFLAGS+=`libgnutls-config --libs`
     
    267291elif [ "$ssl" = "nss" ]; then
    268292        detect_nss
     293elif [ "$ssl" = "sspi" ]; then
     294        echo
    269295elif [ "$ssl" = "openssl" ]; then
    270296        echo
     
    323349echo 'SSL_CLIENT=ssl_'$ssl'.o' >> Makefile.settings
    324350
    325 for i in /lib /usr/lib /usr/local/lib; do
     351for i in $systemlibdirs; do
    326352        if [ -f $i/libresolv.a ]; then
    327353                echo '#define HAVE_RESOLV_A' >> config.h
     
    375401
    376402if [ "$gcov" = "1" ]; then
    377         echo "CFLAGS+=-ftest-coverage -fprofile-arcs" >> Makefile.settings
    378         echo "EFLAGS+=-lgcov" >> Makefile.settings
     403        echo "CFLAGS+=--coverage" >> Makefile.settings
     404        echo "EFLAGS+=--coverage" >> Makefile.settings
    379405fi
    380406
     
    483509        echo 'Cygwin is not officially supported.'
    484510;;
     511Windows )
     512;;
    485513* )
    486514        echo 'We haven'\''t tested BitlBee on many platforms yet, yours is untested. YMMV.'
     
    489517esac
    490518
     519if [ -n "$target" ]; then
     520        echo "Cross-compiling for: $target"
     521fi
     522
    491523echo
    492524echo 'Configuration done:'
  • debian/bitlbee.init

    r4ac647d r8661caa  
    4444       
    4545        start-stop-daemon --start --quiet --pidfile $PIDFILE \
    46                 -c bitlbee: \
    4746                --exec $DAEMON -- -p $BITLBEE_PORT -P $PIDFILE $BITLBEE_OPTS
    4847}
  • debian/changelog

    r4ac647d r8661caa  
     1bitlbee (1.2-6) UNRELEASED; urgency=low
     2
     3  * Add Homepage and Vcs-Bzr fields.
     4
     5 -- Jelmer Vernooij <jelmer@samba.org>  Sun, 11 May 2008 14:18:16 +0200
     6
     7bitlbee (1.2-5) unstable; urgency=low
     8
     9  * Add myself to uploaders.
     10  * Bump standards version to 3.8.0.
     11  * Fix FSF address.
     12  * Avoid changing uid from init script. (Closes: #474589)
     13
     14 -- Jelmer Vernooij <jelmer@samba.org>  Mon, 16 Jun 2008 00:53:20 +0200
     15
    116bitlbee (1.2-4) unstable; urgency=low
    217
  • debian/control

    r4ac647d r8661caa  
    33Priority: optional
    44Maintainer: Wilmer van der Gaast <wilmer@gaast.net>
    5 Standards-Version: 3.5.9
     5Uploaders: Jelmer Vernooij <jelmer@samba.org>
     6Standards-Version: 3.8.0
    67Build-Depends: libglib2.0-dev (>= 2.4), libevent-dev, libgnutls-dev | libnss-dev (>= 1.6), debconf-2.0, po-debconf
     8Homepage: http://www.bitlbee.org/
     9Vcs-Bzr: http://code.bitlbee.org/bitlbee/
     10DM-Upload-Allowed: yes
    711
    812Package: bitlbee
  • debian/copyright

    r4ac647d r8661caa  
    2626  You should have received a copy of the GNU General Public License with
    2727  the Debian GNU/Linux distribution in file /usr/share/common-licenses/GPL;
    28   if not, write to the Free Software Foundation, Inc., 59 Temple Place,
    29   Suite 330, Boston, MA  02111-1307  USA
     28  if not, write to the Free Software Foundation, Inc., 51 Franklin St,
     29  Fifth Floor, Boston, MA 02110-1301, USA.
    3030============================================================================
    3131
     
    4040
    4141 Copyright (C) 2000  Free Software Foundation, Inc.
    42      59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     42        51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
    4343 Everyone is permitted to copy and distribute verbatim copies
    4444 of this license document, but changing it is not allowed.
  • debian/rules

    r4ac647d r8661caa  
    2222        [ "`whoami`" = "root" -a -d debian ]
    2323        rm -rf build-arch-stamp debian/bitlbee debian/*.substvars debian/files debian/bitlbee-dev
    24         -$(MAKE) distclean
     24        $(MAKE) distclean
    2525#       -$(MAKE) -C doc/ clean
    2626                               
  • doc/CHANGES

    r4ac647d r8661caa  
     1This ChangeLog mostly lists changes relevant to users. A full log can be
     2found in the bzr commit logs, for example you can try:
     3
     4http://bugs.bitlbee.org/bitlbee/timeline?daysback=90&changeset=on
     5
    16Version 1.2.1:
    27- Fixed proxy support.
     
    1015  password in your IRC client.
    1116- Compatible with all crazy kinds of line endings that clients can send.
    12 
    13 Finished ...
     17- Changed root nicknames are now saved.
     18- Added ClientInterface setting to bind() outgoing connections to a specific
     19  network interface.
     20- Support for receiving Jabber chatroom invitations.
     21- Relaxed port restriction of the Jabber module: added ports 80 and 443.
     22- Preserving case in Jabber resources of buddies, since these should
     23  officially be treated as case sensitive.
     24- Fully stripping spaces from AIM screennames, this didn't happen completely
     25  which severly breaks the IRC protocol.
     26- Removed all the yellow tape around daemon mode, it's pretty mature by now:
     27  testing.bitlbee.org serves all (~30) SSL users from one daemon mode
     28  process without any serious stability issues.
     29- Fixed GLib <2.6 compatibility issue.
     30- Misc. memory leak/crash fixes.
     31
     32Finished 24 Jun 2008
    1433
    1534Version 1.2:
  • ipc.c

    r4ac647d r8661caa  
    3333
    3434GSList *child_list = NULL;
    35 static char *statefile = NULL;
    3635
    3736static void ipc_master_cmd_client( irc_t *data, char **cmd )
     
    6362}
    6463
     64static void ipc_master_cmd_deaf( irc_t *data, char **cmd )
     65{
     66        if( global.conf->runmode == RUNMODE_DAEMON )
     67        {
     68                b_event_remove( global.listen_watch_source_id );
     69                close( global.listen_socket );
     70               
     71                global.listen_socket = global.listen_watch_source_id = -1;
     72       
     73                ipc_to_children_str( "OPERMSG :Closed listening socket, waiting "
     74                                     "for all users to disconnect." );
     75        }
     76        else
     77        {
     78                ipc_to_children_str( "OPERMSG :The DEAF command only works in "
     79                                     "normal daemon mode. Try DIE instead." );
     80        }
     81}
     82
    6583void ipc_master_cmd_rehash( irc_t *data, char **cmd )
    6684{
     
    98116        { "hello",      0, ipc_master_cmd_client,     0 },
    99117        { "die",        0, ipc_master_cmd_die,        0 },
     118        { "deaf",       0, ipc_master_cmd_deaf,       0 },
    100119        { "wallops",    1, NULL,                      IPC_CMD_TO_CHILDREN },
    101120        { "wall",       1, NULL,                      IPC_CMD_TO_CHILDREN },
     
    209228}
    210229
     230/* Return just one line. Returns NULL if something broke, an empty string
     231   on temporary "errors" (EAGAIN and friends). */
    211232static char *ipc_readline( int fd )
    212233{
    213         char *buf, *eol;
     234        char buf[513], *eol;
    214235        int size;
    215        
    216         buf = g_new0( char, 513 );
    217236       
    218237        /* Because this is internal communication, it should be pretty safe
     
    221240           sockets and limites message length, messages should always be
    222241           complete. Saves us quite a lot of code and buffering. */
    223         size = recv( fd, buf, 512, MSG_PEEK );
     242        size = recv( fd, buf, sizeof( buf ) - 1, MSG_PEEK );
    224243        if( size == 0 || ( size < 0 && !sockerr_again() ) )
    225244                return NULL;
     
    229248                buf[size] = 0;
    230249       
    231         eol = strstr( buf, "\r\n" );
    232         if( eol == NULL )
     250        if( ( eol = strstr( buf, "\r\n" ) ) == NULL )
    233251                return NULL;
    234252        else
    235253                size = eol - buf + 2;
    236        
    237         g_free( buf );
    238         buf = g_new0( char, size + 1 );
    239254       
    240255        if( recv( fd, buf, size, 0 ) != size )
    241256                return NULL;
    242257        else
    243                 buf[size-2] = 0;
    244        
    245         return buf;
     258                return g_strndup( buf, size - 2 );
    246259}
    247260
     
    254267                cmd = irc_parse_line( buf );
    255268                if( cmd )
     269                {
    256270                        ipc_command_exec( data, cmd, ipc_master_commands );
     271                        g_free( cmd );
     272                }
     273                g_free( buf );
    257274        }
    258275        else
     
    272289                cmd = irc_parse_line( buf );
    273290                if( cmd )
     291                {
    274292                        ipc_command_exec( data, cmd, ipc_child_commands );
     293                        g_free( cmd );
     294                }
     295                g_free( buf );
    275296        }
    276297        else
     
    439460}
    440461
     462#ifndef _WIN32
    441463char *ipc_master_save_state()
    442464{
     
    479501}
    480502
    481 void ipc_master_set_statefile( char *fn )
    482 {
    483         statefile = g_strdup( fn );
    484 }
    485 
    486503
    487504static gboolean new_ipc_client( gpointer data, gint serversock, b_input_condition cond )
     
    504521}
    505522
    506 #ifndef _WIN32
    507523int ipc_master_listen_socket()
    508524{
     
    541557}
    542558#else
     559int ipc_master_listen_socket()
     560{
    543561        /* FIXME: Open named pipe \\.\BITLBEE */
     562        return 0;
     563}
    544564#endif
    545565
    546 int ipc_master_load_state()
     566int ipc_master_load_state( char *statefile )
    547567{
    548568        struct bitlbee_child *child;
     
    552572        if( statefile == NULL )
    553573                return 0;
     574       
    554575        fp = fopen( statefile, "r" );
    555576        unlink( statefile );    /* Why do it later? :-) */
  • ipc.h

    r4ac647d r8661caa  
    5858
    5959char *ipc_master_save_state();
    60 void ipc_master_set_statefile( char *fn );
    61 int ipc_master_load_state();
     60int ipc_master_load_state( char *statefile );
    6261int ipc_master_listen_socket();
    6362
  • irc.c

    r4ac647d r8661caa  
    2626#define BITLBEE_CORE
    2727#include "bitlbee.h"
     28#include "sock.h"
    2829#include "crypting.h"
    2930#include "ipc.h"
     
    315316        g_free( irc );
    316317       
    317         if( global.conf->runmode == RUNMODE_INETD || global.conf->runmode == RUNMODE_FORKDAEMON )
     318        if( global.conf->runmode == RUNMODE_INETD ||
     319            global.conf->runmode == RUNMODE_FORKDAEMON ||
     320            ( global.conf->runmode == RUNMODE_DAEMON &&
     321              global.listen_socket == -1 &&
     322              irc_connection_list == NULL ) )
    318323                b_main_quit();
    319324}
  • irc_commands.c

    r4ac647d r8661caa  
    626626        { "completions", 0, irc_cmd_completions, IRC_CMD_LOGGED_IN },
    627627        { "die",         0, NULL,                IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER },
     628        { "deaf",        0, NULL,                IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER },
    628629        { "wallops",     1, NULL,                IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER },
    629630        { "wall",        1, NULL,                IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER },
  • lib/misc.c

    r4ac647d r8661caa  
    6060        strcpy(text, text2);
    6161        g_free(text2);
    62 }
    63 
    64 char *normalize(const char *s)
    65 {
    66         static char buf[BUF_LEN];
    67         char *t, *u;
    68         int x = 0;
    69 
    70         g_return_val_if_fail((s != NULL), NULL);
    71 
    72         u = t = g_strdup(s);
    73 
    74         strcpy(t, s);
    75         g_strdown(t);
    76 
    77         while (*t && (x < BUF_LEN - 1)) {
    78                 if (*t != ' ') {
    79                         buf[x] = *t;
    80                         x++;
    81                 }
    82                 t++;
    83         }
    84         buf[x] = '\0';
    85         g_free(u);
    86         return buf;
    8762}
    8863
     
    398373void random_bytes( unsigned char *buf, int count )
    399374{
     375#ifndef _WIN32
    400376        static int use_dev = -1;
    401377       
     
    447423       
    448424        if( !use_dev )
     425#endif
    449426        {
    450427                int i;
     
    607584        md5_byte_t pass_md5[16];
    608585        md5_state_t md5_state;
    609         int ret, i;
    610        
    611         if( base64_decode( hash, &pass_dec ) != 21 )
    612         {
    613                 ret = -1;
    614         }
    615         else
     586        int ret = -1, i;
     587       
     588        if( base64_decode( hash, &pass_dec ) == 21 )
    616589        {
    617590                md5_init( &md5_state );
  • lib/misc.h

    r4ac647d r8661caa  
    4141G_MODULE_EXPORT char *add_cr( char *text );
    4242G_MODULE_EXPORT char *strip_newlines(char *source);
    43 G_MODULE_EXPORT char *normalize( const char *s );
    4443
    4544G_MODULE_EXPORT time_t get_time( int year, int month, int day, int hour, int min, int sec );
  • lib/ssl_bogus.c

    r4ac647d r8661caa  
    6161        return GAIM_INPUT_READ;
    6262}
     63
     64int ssl_pending( void *conn )
     65{
     66        return 0;
     67}
  • nick.c

    r4ac647d r8661caa  
    4747       
    4848        store_handle = clean_handle( handle );
     49        store_nick[MAX_NICK_LENGTH] = 0;
    4950        strncpy( store_nick, nick, MAX_NICK_LENGTH );
    5051        nick_strip( store_nick );
  • protocols/jabber/jabber.c

    r4ac647d r8661caa  
    3333#include "jabber.h"
    3434#include "md5.h"
    35 #include "base64.h"
    3635
    3736GSList *jabber_connections;
    3837
     38/* First enty is the default */
     39static const int jabber_port_list[] = {
     40        5222,
     41        5223,
     42        5220,
     43        5221,
     44        5224,
     45        5225,
     46        5226,
     47        5227,
     48        5228,
     49        5229,
     50        80,
     51        443,
     52        0
     53};
     54
    3955static void jabber_init( account_t *acc )
    4056{
    4157        set_t *s;
    42        
    43         s = set_add( &acc->set, "port", JABBER_PORT_DEFAULT, set_eval_int, acc );
     58        char str[16];
     59       
     60        g_snprintf( str, sizeof( str ), "%d", jabber_port_list[0] );
     61        s = set_add( &acc->set, "port", str, set_eval_int, acc );
    4462        s->flags |= ACC_SET_OFFLINE_ONLY;
    4563       
     
    7492        struct ns_srv_reply *srv = NULL;
    7593        char *connect_to, *s;
     94        int i;
    7695       
    7796        /* For now this is needed in the _connected() handlers if using
     
    179198        imcb_log( ic, "Connecting" );
    180199       
    181         if( set_getint( &acc->set, "port" ) < JABBER_PORT_MIN ||
    182             set_getint( &acc->set, "port" ) > JABBER_PORT_MAX )
    183         {
    184                 imcb_log( ic, "Incorrect port number, must be in the %d-%d range",
    185                                JABBER_PORT_MIN, JABBER_PORT_MAX );
     200        for( i = 0; jabber_port_list[i] > 0; i ++ )
     201                if( set_getint( &acc->set, "port" ) == jabber_port_list[i] )
     202                        break;
     203
     204        if( jabber_port_list[i] == 0 )
     205        {
     206                imcb_log( ic, "Illegal port number" );
    186207                imc_logout( ic, FALSE );
    187208                return;
     
    221242}
    222243
     244/* This generates an unfinished md5_state_t variable. Every time we generate
     245   an ID, we finish the state by adding a sequence number and take the hash. */
    223246static void jabber_generate_id_hash( struct jabber_data *jd )
    224247{
    225         md5_state_t id_hash;
    226         md5_byte_t binbuf[16];
     248        md5_byte_t binbuf[4];
    227249        char *s;
    228250       
    229         md5_init( &id_hash );
    230         md5_append( &id_hash, (unsigned char *) jd->username, strlen( jd->username ) );
    231         md5_append( &id_hash, (unsigned char *) jd->server, strlen( jd->server ) );
     251        md5_init( &jd->cached_id_prefix );
     252        md5_append( &jd->cached_id_prefix, (unsigned char *) jd->username, strlen( jd->username ) );
     253        md5_append( &jd->cached_id_prefix, (unsigned char *) jd->server, strlen( jd->server ) );
    232254        s = set_getstr( &jd->ic->acc->set, "resource" );
    233         md5_append( &id_hash, (unsigned char *) s, strlen( s ) );
    234         random_bytes( binbuf, 16 );
    235         md5_append( &id_hash, binbuf, 16 );
    236         md5_finish( &id_hash, binbuf );
    237        
    238         s = base64_encode( binbuf, 9 );
    239         jd->cached_id_prefix = g_strdup_printf( "%s%s", JABBER_CACHED_ID, s );
    240         g_free( s );
     255        md5_append( &jd->cached_id_prefix, (unsigned char *) s, strlen( s ) );
     256        random_bytes( binbuf, 4 );
     257        md5_append( &jd->cached_id_prefix, binbuf, 4 );
    241258}
    242259
     
    281298        xt_free( jd->xt );
    282299       
    283         g_free( jd->cached_id_prefix );
    284300        g_free( jd->away_message );
    285301        g_free( jd->username );
  • protocols/jabber/jabber.h

    r4ac647d r8661caa  
    9494        char *away_message;
    9595       
    96         char *cached_id_prefix;
     96        md5_state_t cached_id_prefix;
    9797        GHashTable *node_cache;
    9898        GHashTable *buddies;
     
    177177
    178178#define JABBER_XMLCONSOLE_HANDLE "xmlconsole"
    179 
    180 #define JABBER_PORT_DEFAULT "5222"
    181 #define JABBER_PORT_MIN 5220
    182 #define JABBER_PORT_MAX 5229
    183179
    184180/* Prefixes to use for packet IDs (mainly for IQ packets ATM). Usually the
  • protocols/jabber/jabber_util.c

    r4ac647d r8661caa  
    2323
    2424#include "jabber.h"
     25#include "md5.h"
     26#include "base64.h"
    2527
    2628static unsigned int next_id = 1;
     
    138140        struct jabber_data *jd = ic->proto_data;
    139141        struct jabber_cache_entry *entry = g_new0( struct jabber_cache_entry, 1 );
    140         char *id;
    141        
    142         id = g_strdup_printf( "%s%05x", jd->cached_id_prefix, ( next_id++ ) & 0xfffff );
     142        md5_state_t id_hash;
     143        md5_byte_t id_sum[16];
     144        char *id, *asc_hash;
     145       
     146        next_id ++;
     147       
     148        id_hash = jd->cached_id_prefix;
     149        md5_append( &id_hash, (md5_byte_t*) &next_id, sizeof( next_id ) );
     150        md5_finish( &id_hash, id_sum );
     151        asc_hash = base64_encode( id_sum, 12 );
     152       
     153        id = g_strdup_printf( "%s%s", JABBER_CACHED_ID, asc_hash );
    143154        xt_add_attr( node, "id", id );
    144155        g_free( id );
     156        g_free( asc_hash );
    145157       
    146158        entry->node = node;
     
    188200       
    189201        if( ( s = xt_find_attr( node, "id" ) ) == NULL ||
    190             strncmp( s, jd->cached_id_prefix, strlen( jd->cached_id_prefix ) ) != 0 )
     202            strncmp( s, JABBER_CACHED_ID, strlen( JABBER_CACHED_ID ) ) != 0 )
    191203        {
    192204                /* Silently ignore it, without an ID (or a non-cache
     
    200212        if( entry == NULL )
    201213        {
     214                /*
     215                There's no longer an easy way to see if we generated this
     216                one or someone else, and there's a ten-minute timeout anyway,
     217                so meh.
     218               
    202219                imcb_log( ic, "Warning: Received %s-%s packet with unknown/expired ID %s!",
    203220                              node->name, xt_find_attr( node, "type" ) ? : "(no type)", s );
     221                */
    204222        }
    205223        else if( entry->func )
     
    294312        len = strlen( orig );
    295313        new = g_new( char, len + 1 );
    296         for( i = 0; i < len; i ++ )
    297         {
    298                 /* don't normalize the resource */
    299                 if( orig[i] == '/' )
    300                         break;
     314       
     315        /* So it turns out the /resource part is case sensitive. Yeah, and
     316           it's Unicode but feck Unicode. :-P So stop once we see a slash. */
     317        for( i = 0; i < len && orig[i] != '/' ; i ++ )
    301318                new[i] = tolower( orig[i] );
    302         }
    303         for( ; i < len; i ++ )
     319        for( ; orig[i]; i ++ )
    304320                new[i] = orig[i];
    305321       
     
    345361                {
    346362                        /* Check for dupes. */
    347                         if( g_strcasecmp( bi->resource, s + 1 ) == 0 )
     363                        if( strcmp( bi->resource, s + 1 ) == 0 )
    348364                        {
    349365                                *s = '/';
     
    398414        if( ( s = strchr( jid, '/' ) ) )
    399415        {
    400                 int none_found = 0;
     416                int bare_exists = 0;
    401417               
    402418                *s = 0;
     
    421437                        /* See if there's an exact match. */
    422438                        for( ; bud; bud = bud->next )
    423                                 if( g_strcasecmp( bud->resource, s + 1 ) == 0 )
     439                                if( strcmp( bud->resource, s + 1 ) == 0 )
    424440                                        break;
    425441                }
    426442                else
    427443                {
    428                         /* This hack is there to make sure that O_CREAT will
    429                            work if there's already another resouce present
    430                            for this JID, even if it's an unknown buddy. This
    431                            is done to handle conferences properly. */
    432                         none_found = 1;
    433                         /* TODO(wilmer): Find out what I was thinking when I
    434                            wrote this??? And then fix it. This makes me sad... */
    435                 }
    436                
    437                 if( bud == NULL && ( flags & GET_BUDDY_CREAT ) && ( imcb_find_buddy( ic, jid ) || !none_found ) )
     444                        /* This variable tells the if down here that the bare
     445                           JID already exists and we should feel free to add
     446                           more resources, if the caller asked for that. */
     447                        bare_exists = 1;
     448                }
     449               
     450                if( bud == NULL && ( flags & GET_BUDDY_CREAT ) &&
     451                    ( !bare_exists || imcb_find_buddy( ic, jid ) ) )
    438452                {
    439453                        *s = '/';
     
    460474                        /* We want an exact match, so in thise case there shouldn't be a /resource. */
    461475                        return NULL;
    462                 else if( ( bud->resource == NULL || bud->next == NULL ) )
     476                else if( bud->resource == NULL || bud->next == NULL )
    463477                        /* No need for selection if there's only one option. */
    464478                        return bud;
     
    536550                   matches), removing it is simple. (And the hash reference
    537551                   should be removed too!) */
    538                 if( bud->next == NULL && ( ( s == NULL || bud->resource == NULL ) || g_strcasecmp( bud->resource, s + 1 ) == 0 ) )
     552                if( bud->next == NULL &&
     553                    ( ( s == NULL && bud->resource == NULL ) ||
     554                      ( bud->resource && s && strcmp( bud->resource, s + 1 ) == 0 ) ) )
    539555                {
    540556                        g_hash_table_remove( jd->buddies, bud->bare_jid );
     
    559575                {
    560576                        for( bi = bud, prev = NULL; bi; bi = (prev=bi)->next )
    561                                 if( g_strcasecmp( bi->resource, s + 1 ) == 0 )
     577                                if( strcmp( bi->resource, s + 1 ) == 0 )
    562578                                        break;
    563579                       
  • protocols/jabber/message.c

    r4ac647d r8661caa  
    4949        {
    5050                GString *fullmsg = g_string_new( "" );
     51
     52                for( c = node->children; ( c = xt_find_node( c, "x" ) ); c = c->next )
     53                {
     54                        char *ns = xt_find_attr( c, "xmlns" ), *room;
     55                        struct xt_node *inv, *reason;
     56                       
     57                        if( strcmp( ns, XMLNS_MUC_USER ) == 0 &&
     58                            ( inv = xt_find_node( c->children, "invite" ) ) )
     59                        {
     60                                room = from;
     61                                from = xt_find_attr( inv, "from" ) ? : from;
     62
     63                                g_string_append_printf( fullmsg, "<< \002BitlBee\002 - Invitation to chatroom %s >>\n", room );
     64                                if( ( reason = xt_find_node( inv->children, "reason" ) ) && reason->text_len > 0 )
     65                                        g_string_append( fullmsg, reason->text );
     66                        }
     67                }
    5168               
    5269                if( ( s = strchr( from, '/' ) ) )
  • protocols/msn/ns.c

    r4ac647d r8661caa  
    278278                if( num_parts == 5 )
    279279                {
     280                        int i, groupcount;
     281                       
     282                        groupcount = atoi( cmd[4] );
     283                        if( groupcount > 0 )
     284                        {
     285                                /* valgrind says this is leaking memory, I'm guessing
     286                                   that this happens during server redirects. */
     287                                if( md->grouplist )
     288                                {
     289                                        for( i = 0; i < md->groupcount; i ++ )
     290                                                g_free( md->grouplist[i] );
     291                                        g_free( md->grouplist );
     292                                }
     293                               
     294                                md->groupcount = groupcount;
     295                                md->grouplist = g_new0( char *, md->groupcount );
     296                        }
     297                       
    280298                        md->buddycount = atoi( cmd[3] );
    281                         md->groupcount = atoi( cmd[4] );
    282                         if( md->groupcount > 0 )
    283                                 md->grouplist = g_new0( char *, md->groupcount );
    284                        
    285299                        if( !*cmd[3] || md->buddycount == 0 )
    286300                                msn_logged_in( ic );
     
    665679                                        imcb_log( ic, "INBOX contains %s new messages, plus %s messages in other folders.", inbox, folders );
    666680                                }
     681                               
     682                                g_free( inbox );
     683                                g_free( folders );
    667684                        }
    668685                        else if( g_strncasecmp( ct, "text/x-msmsgsemailnotification", 30 ) == 0 )
  • protocols/nogaim.h

    r4ac647d r8661caa  
    4545#include "md5.h"
    4646#include "ft.h"
    47 
    48 #define BUF_LEN MSG_LEN
    49 #define BUF_LONG ( BUF_LEN * 2 )
    50 #define MSG_LEN 2048
    51 #define BUF_LEN MSG_LEN
    5247
    5348#define BUDDY_ALIAS_MAXLEN 388   /* because MSN names can be 387 characters */
  • protocols/oscar/oscar.c

    r4ac647d r8661caa  
    6060
    6161#define OSCAR_GROUP "Friends"
     62
     63#define BUF_LEN 2048
     64#define BUF_LONG ( BUF_LEN * 2 )
    6265
    6366/* Don't know if support for UTF8 is really working. For now it's UTF16 here.
     
    240243};
    241244static int msgerrreasonlen = 25;
     245
     246/* Hurray, this function is NOT thread-safe \o/ */
     247static char *normalize(const char *s)
     248{
     249        static char buf[BUF_LEN];
     250        char *t, *u;
     251        int x = 0;
     252
     253        g_return_val_if_fail((s != NULL), NULL);
     254
     255        u = t = g_strdup(s);
     256
     257        strcpy(t, s);
     258        g_strdown(t);
     259
     260        while (*t && (x < BUF_LEN - 1)) {
     261                if (*t != ' ' && *t != '!') {
     262                        buf[x] = *t;
     263                        x++;
     264                }
     265                t++;
     266        }
     267        buf[x] = '\0';
     268        g_free(u);
     269        return buf;
     270}
    242271
    243272static gboolean oscar_callback(gpointer data, gint source,
     
    10021031        }
    10031032
    1004         tmp = g_strdup(normalize(ic->acc->user));
    1005         if (!strcmp(tmp, normalize(info->sn)))
     1033        if (!aim_sncmp(ic->acc->user, info->sn))
    10061034                g_snprintf(ic->displayname, sizeof(ic->displayname), "%s", info->sn);
    1007         g_free(tmp);
    1008 
    1009         imcb_buddy_status(ic, info->sn, flags, state_string, NULL);
    1010         /* imcb_buddy_times(ic, info->sn, signon, time_idle); */
     1035
     1036        tmp = normalize(info->sn);
     1037        imcb_buddy_status(ic, tmp, flags, state_string, NULL);
     1038        /* imcb_buddy_times(ic, tmp, signon, time_idle); */
     1039
    10111040
    10121041        return 1;
     
    10221051        va_end(ap);
    10231052
    1024         imcb_buddy_status(ic, info->sn, 0, NULL, NULL );
     1053        imcb_buddy_status(ic, normalize(info->sn), 0, NULL, NULL );
    10251054
    10261055        return 1;
     
    10781107       
    10791108        strip_linefeed(tmp);
    1080         imcb_buddy_msg(ic, userinfo->sn, tmp, flags, 0);
     1109        imcb_buddy_msg(ic, normalize(userinfo->sn), tmp, flags, 0);
    10811110        g_free(tmp);
    10821111       
     
    11771206                        message = g_strdup(args->msg);
    11781207                        strip_linefeed(message);
    1179                         imcb_buddy_msg(ic, uin, message, 0, 0);
     1208                        imcb_buddy_msg(ic, normalize(uin), message, 0, 0);
    11801209                        g_free(uin);
    11811210                        g_free(message);
     
    11961225
    11971226                        strip_linefeed(message);
    1198                         imcb_buddy_msg(ic, uin, message, 0, 0);
     1227                        imcb_buddy_msg(ic, normalize(uin), message, 0, 0);
    11991228                        g_free(uin);
    12001229                        g_free(m);
     
    14711500
    14721501        for (i = 0; i < count; i++)
    1473                 imcb_chat_add_buddy(c->cnv, info[i].sn);
     1502                imcb_chat_add_buddy(c->cnv, normalize(info[i].sn));
    14741503
    14751504        return 1;
     
    14941523
    14951524        for (i = 0; i < count; i++)
    1496                 imcb_chat_remove_buddy(c->cnv, info[i].sn, NULL);
     1525                imcb_chat_remove_buddy(c->cnv, normalize(info[i].sn), NULL);
    14971526
    14981527        return 1;
     
    15451574        tmp = g_malloc(BUF_LONG);
    15461575        g_snprintf(tmp, BUF_LONG, "%s", msg);
    1547         imcb_chat_msg(ccon->cnv, info->sn, tmp, 0, 0);
     1576        imcb_chat_msg(ccon->cnv, normalize(info->sn), tmp, 0, 0);
    15481577        g_free(tmp);
    15491578
     
    17581787                        g_snprintf(sender, sizeof(sender), "%u", msg->sender);
    17591788                        strip_linefeed(dialog_msg);
    1760                         imcb_buddy_msg(ic, sender, dialog_msg, 0, t);
     1789                        imcb_buddy_msg(ic, normalize(sender), dialog_msg, 0, t);
    17611790                        g_free(dialog_msg);
    17621791                } break;
     
    17791808
    17801809                        strip_linefeed(dialog_msg);
    1781                         imcb_buddy_msg(ic, sender, dialog_msg, 0, t);
     1810                        imcb_buddy_msg(ic, normalize(sender), dialog_msg, 0, t);
    17821811                        g_free(dialog_msg);
    17831812                        g_free(m);
     
    20172046        struct aim_ssi_item *curitem;
    20182047        int tmp;
     2048        char *nrm;
    20192049
    20202050        /* Add from server list to local list */
    20212051        tmp = 0;
    20222052        for (curitem=sess->ssi.items; curitem; curitem=curitem->next) {
     2053                nrm = curitem->name ? normalize(curitem->name) : NULL;
     2054               
    20232055                switch (curitem->type) {
    20242056                        case 0x0000: /* Buddy */
    2025                                 if ((curitem->name) && (!imcb_find_buddy(ic, curitem->name))) {
     2057                                if ((curitem->name) && (!imcb_find_buddy(ic, nrm))) {
    20262058                                        char *realname = NULL;
    20272059
     
    20292061                                                    realname = aim_gettlv_str(curitem->data, 0x0131, 1);
    20302062                                               
    2031                                         imcb_add_buddy(ic, curitem->name, NULL);
     2063                                        imcb_add_buddy(ic, nrm, NULL);
    20322064                                       
    20332065                                        if (realname) {
    2034                                                 imcb_buddy_nick_hint(ic, curitem->name, realname);
    2035                                                 imcb_rename_buddy(ic, curitem->name, realname);
     2066                                                imcb_buddy_nick_hint(ic, nrm, realname);
     2067                                                imcb_rename_buddy(ic, nrm, realname);
    20362068                                                g_free(realname);
    20372069                                        }
     
    20452077                                        if (!list) {
    20462078                                                char *name;
    2047                                                 name = g_strdup(normalize(curitem->name));
     2079                                                name = g_strdup(nrm);
    20482080                                                ic->permit = g_slist_append(ic->permit, name);
    20492081                                                tmp++;
     
    20582090                                        if (!list) {
    20592091                                                char *name;
    2060                                                 name = g_strdup(normalize(curitem->name));
     2092                                                name = g_strdup(nrm);
    20612093                                                ic->deny = g_slist_append(ic->deny, name);
    20622094                                                tmp++;
     
    21202152                        if( st == 0x00 )
    21212153                        {
    2122                                 imcb_add_buddy( sess->aux_data, list, NULL );
     2154                                imcb_add_buddy( sess->aux_data, normalize(list), NULL );
    21232155                        }
    21242156                        else if( st == 0x0E )
     
    24502482        if(type2 == 0x0002) {
    24512483                /* User is typing */
    2452                 imcb_buddy_typing(ic, sn, OPT_TYPING);
     2484                imcb_buddy_typing(ic, normalize(sn), OPT_TYPING);
    24532485        }
    24542486        else if (type2 == 0x0001) {
    24552487                /* User has typed something, but is not actively typing (stale) */
    2456                 imcb_buddy_typing(ic, sn, OPT_THINKING);
     2488                imcb_buddy_typing(ic, normalize(sn), OPT_THINKING);
    24572489        }
    24582490        else {
    24592491                /* User has stopped typing */
    2460                 imcb_buddy_typing(ic, sn, 0);
     2492                imcb_buddy_typing(ic, normalize(sn), 0);
    24612493        }
    24622494       
  • protocols/yahoo/libyahoo2.c

    r4ac647d r8661caa  
    6969#ifdef __MINGW32__
    7070# include <winsock2.h>
    71 # define write(a,b,c) send(a,b,c,0)
    72 # define read(a,b,c)  recv(a,b,c,0)
    7371#endif
    7472
     
    381379
    382380/* call repeatedly to get the next one */
    383 /*
    384381static struct yahoo_input_data * find_input_by_id(int id)
    385382{
     
    392389        return NULL;
    393390}
    394 */
    395391
    396392static struct yahoo_input_data * find_input_by_id_and_webcam_user(int id, const char * who)
     
    797793{
    798794        struct yahoo_data *yd = find_conn_by_id(id);
     795       
    799796        if(!yd)
    800797                return;
     
    31663163
    31673164        LOG(("write callback: id=%d fd=%d data=%p", id, fd, data));
    3168         if(!yid || !yid->txqueues)
     3165        if(!yid || !yid->txqueues || !find_conn_by_id(id))
    31693166                return -2;
    31703167       
     
    38423839        }
    38433840
    3844        
    3845 /*      do {
     3841        do {
    38463842                yahoo_input_close(yid);
    3847         } while((yid = find_input_by_id(id)));*/
    3848        
     3843        } while((yid = find_input_by_id(id)));
    38493844}
    38503845
  • protocols/yahoo/yahoo.c

    r4ac647d r8661caa  
    163163        g_slist_free( yd->buddygroups );
    164164       
    165         if( yd->logged_in )
    166                 yahoo_logoff( yd->y2_id );
    167         else
    168                 yahoo_close( yd->y2_id );
     165        yahoo_logoff( yd->y2_id );
    169166       
    170167        g_free( yd );
     
    454451        struct byahoo_write_ready_data *d = data;
    455452       
    456         if( !byahoo_get_ic_by_id( d->id ) )
    457                 /* WTF doesn't libyahoo clean this up? */
    458                 return FALSE;
    459        
    460453        yahoo_write_ready( d->id, d->fd, d->data );
    461454       
     
    672665       
    673666        imcb_error( ic, "%s", err );
    674        
    675         if( fatal )
    676                 imc_logout( ic, TRUE );
    677667}
    678668
  • protocols/yahoo/yahoo_httplib.c

    r4ac647d r8661caa  
    5151#ifdef __MINGW32__
    5252# include <winsock2.h>
    53 # define write(a,b,c) send(a,b,c,0)
    54 # define read(a,b,c)  recv(a,b,c,0)
    5553# define snprintf _snprintf
    5654#endif
  • sock.h

    r4ac647d r8661caa  
    1616#else
    1717# include <winsock2.h>
    18 # ifndef _MSC_VER
    19 #  include <ws2tcpip.h>
    20 # endif
     18# include <ws2tcpip.h>
    2119# if !defined(BITLBEE_CORE) && defined(_MSC_VER)
    2220#   pragma comment(lib,"bitlbee.lib")
    2321# endif
    2422# include <io.h>
    25 # define read(a,b,c) recv(a,b,c,0)
    26 # define write(a,b,c) send(a,b,c,0)
    27 # define umask _umask
    28 # define mode_t int
    2923# define sock_make_nonblocking(fd) { int non_block = 1; ioctlsocket(fd, FIONBIO, &non_block); }
    3024# define sock_make_blocking(fd) { int non_block = 0; ioctlsocket(fd, FIONBIO, &non_block); }
  • storage_text.c

    r4ac647d r8661caa  
    2727#include "bitlbee.h"
    2828#include "crypting.h"
     29#ifdef _WIN32
     30# define umask _umask
     31# define mode_t int
     32#endif
     33
     34#ifndef F_OK
     35#define F_OK 0
     36#endif
    2937
    3038static void text_init (void)
  • storage_xml.c

    r4ac647d r8661caa  
    2929#include "arc.h"
    3030#include "md5.h"
     31#include <glib/gstdio.h>
     32
     33#if !GLIB_CHECK_VERSION(2,8,0)
     34/* GLib < 2.8.0 doesn't have g_access, so just use the system access(). */
     35#define g_access access
     36#endif
    3137
    3238typedef enum
     
    243249static void xml_init( void )
    244250{
    245         if( access( global.conf->configdir, F_OK ) != 0 )
     251        if( g_access( global.conf->configdir, F_OK ) != 0 )
    246252                log_message( LOGLVL_WARNING, "The configuration directory `%s' does not exist. Configuration won't be saved.", global.conf->configdir );
    247         else if( access( global.conf->configdir, R_OK ) != 0 || access( global.conf->configdir, W_OK ) != 0 )
     253        else if( g_access( global.conf->configdir, F_OK ) != 0 ||
     254                 g_access( global.conf->configdir, W_OK ) != 0 )
    248255                log_message( LOGLVL_WARNING, "Permission problem: Can't read/write from/to `%s'.", global.conf->configdir );
    249256}
     
    372379        g_free( path2 );
    373380       
    374         if( !overwrite && access( path, F_OK ) != -1 )
     381        if( !overwrite && g_access( path, F_OK ) == 0 )
    375382                return STORAGE_ALREADY_EXISTS;
    376383       
     
    480487static storage_status_t xml_remove( const char *nick, const char *password )
    481488{
    482         char s[512];
     489        char s[512], *lc;
    483490        storage_status_t status;
    484491
     
    487494                return status;
    488495
    489         g_snprintf( s, 511, "%s%s%s", global.conf->configdir, nick, ".xml" );
     496        lc = g_strdup( nick );
     497        nick_lc( lc );
     498        g_snprintf( s, 511, "%s%s%s", global.conf->configdir, lc, ".xml" );
     499        g_free( lc );
     500       
    490501        if( unlink( s ) == -1 )
    491502                return STORAGE_OTHER_ERROR;
  • tests/Makefile

    r4ac647d r8661caa  
    1313main_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 check_jabber_sasl.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 check_jabber_util.o
    1616
    1717check: $(test_objs) $(addprefix ../, $(main_objs)) ../protocols/protocols.o ../lib/lib.o
  • tests/check.c

    r4ac647d r8661caa  
    6969Suite *jabber_sasl_suite(void);
    7070
     71/* From check_jabber_sasl.c */
     72Suite *jabber_util_suite(void);
     73
    7174int main (int argc, char **argv)
    7275{
     
    115118        srunner_add_suite(sr, set_suite());
    116119        srunner_add_suite(sr, jabber_sasl_suite());
     120        srunner_add_suite(sr, jabber_util_suite());
    117121        if (no_fork)
    118122                srunner_set_fork_status(sr, CK_NOFORK);
  • tests/check_jabber_sasl.c

    r4ac647d r8661caa  
    55#include <string.h>
    66#include <stdio.h>
    7 #include "arc.h"
    87
    98char *sasl_get_part( char *data, char *field );
  • unix.c

    r4ac647d r8661caa  
    4040static void sighandler( int signal );
    4141
    42 int main( int argc, char *argv[], char **envp )
     42int main( int argc, char *argv[] )
    4343{
    4444        int i = 0;
     
    6060        if( global.conf->runmode == RUNMODE_INETD )
    6161        {
     62                log_link( LOGLVL_ERROR, LOGOUTPUT_IRC );
     63                log_link( LOGLVL_WARNING, LOGOUTPUT_IRC );
     64       
    6265                i = bitlbee_inetd_init();
    6366                log_message( LOGLVL_INFO, "Bitlbee %s starting in inetd mode.", BITLBEE_VERSION );
     
    6669        else if( global.conf->runmode == RUNMODE_DAEMON )
    6770        {
     71                log_link( LOGLVL_ERROR, LOGOUTPUT_SYSLOG );
     72                log_link( LOGLVL_WARNING, LOGOUTPUT_SYSLOG );
     73
    6874                i = bitlbee_daemon_init();
    6975                log_message( LOGLVL_INFO, "Bitlbee %s starting in daemon mode.", BITLBEE_VERSION );
     
    135141        {
    136142                char *fn = ipc_master_save_state();
    137                 char **args;
    138                 int n, i;
    139143               
    140144                chdir( old_cwd );
    141145               
    142                 n = 0;
    143                 args = g_new0( char *, argc + 3 );
    144                 args[n++] = argv[0];
    145                 if( fn )
    146                 {
    147                         args[n++] = "-R";
    148                         args[n++] = fn;
    149                 }
    150                 for( i = 1; argv[i] && i < argc; i ++ )
    151                 {
    152                         if( strcmp( argv[i], "-R" ) == 0 )
    153                                 i += 2;
    154                        
    155                         args[n++] = argv[i];
    156                 }
     146                setenv( "_BITLBEE_RESTART_STATE", fn, 1 );
     147                g_free( fn );
    157148               
    158149                close( global.listen_socket );
    159150               
    160                 execve( args[0], args, envp );
     151                if( execv( argv[0], argv ) == -1 )
     152                        /* Apparently the execve() failed, so let's just
     153                           jump back into our own/current main(). */
     154                        /* Need more cleanup code to make this work. */
     155                        return 1; /* main( argc, argv ); */
    161156        }
    162157       
     
    219214        return( (double) time->tv_sec + (double) time->tv_usec / 1000000 );
    220215}
     216
     217
Note: See TracChangeset for help on using the changeset viewer.