Changes in / [75a4b85:eda0270]


Ignore:
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • bitlbee.c

    r75a4b85 reda0270  
    3939{
    4040#ifdef IPV6
    41         struct sockaddr_in6 listen_addr;
    42 #else
     41        int use_ipv6 = 1;
     42        struct sockaddr_in6 listen_addr6;
     43#endif
    4344        struct sockaddr_in listen_addr;
    44 #endif
    4545        int i;
    4646        FILE *fp;
     
    4949        log_link( LOGLVL_WARNING, LOGOUTPUT_SYSLOG );
    5050       
    51         global.listen_socket = socket( AF_INETx, SOCK_STREAM, 0 );
     51#ifdef IPV6
     52        if( ( global.listen_socket = socket( AF_INET6, SOCK_STREAM, 0 ) ) == -1 )
     53        {
     54                use_ipv6 = 0;
     55#endif
     56                global.listen_socket = socket( AF_INET, SOCK_STREAM, 0 );
     57#ifdef IPV6
     58        }
     59#endif
    5260        if( global.listen_socket == -1 )
    5361        {
     
    6169       
    6270#ifdef IPV6
    63         listen_addr.sin6_family = AF_INETx;
    64         listen_addr.sin6_port = htons( global.conf->port );
    65         i = inet_pton( AF_INETx, ipv6_wrap( global.conf->iface ), &listen_addr.sin6_addr );
    66 #else
    67         listen_addr.sin_family = AF_INETx;
    68         listen_addr.sin_port = htons( global.conf->port );
    69         i = inet_pton( AF_INETx, global.conf->iface, &listen_addr.sin_addr );
     71        listen_addr6.sin6_family = AF_INET6;
     72        listen_addr6.sin6_port = htons( global.conf->port );
     73        if( ( i = inet_pton( AF_INET6, ipv6_wrap( global.conf->iface ), &listen_addr6.sin6_addr ) ) != 1 )
     74        {
     75                /* Forget about IPv6 in this function. */
     76                use_ipv6 = 0;
     77#endif
     78                listen_addr.sin_family = AF_INET;
     79                listen_addr.sin_port = htons( global.conf->port );
     80                if( strcmp( global.conf->iface, "::" ) == 0 )
     81                        i = inet_pton( AF_INET, "0.0.0.0", &listen_addr.sin_addr );
     82                else
     83                        i = inet_pton( AF_INET, global.conf->iface, &listen_addr.sin_addr );
     84#ifdef IPV6
     85        }
    7086#endif
    7187       
     
    7692        }
    7793       
    78         i = bind( global.listen_socket, (struct sockaddr *) &listen_addr, sizeof( listen_addr ) );
     94#ifdef IPV6
     95        if( !use_ipv6 || ( i = bind( global.listen_socket, (struct sockaddr *) &listen_addr6, sizeof( listen_addr6 ) ) ) == -1 )
     96#endif
     97                i = bind( global.listen_socket, (struct sockaddr *) &listen_addr, sizeof( listen_addr ) );
    7998        if( i == -1 )
    8099        {
  • irc.c

    r75a4b85 reda0270  
    4747        char buf[128];
    4848#ifdef IPV6
    49         struct sockaddr_in6 sock[1];
    50 #else
     49        struct sockaddr_in6 sock6[1];
     50        unsigned int i6;
     51#endif
    5152        struct sockaddr_in sock[1];
    52 #endif
    5353       
    5454        irc = g_new0( irc_t, 1 );
     
    7070       
    7171        i = sizeof( *sock );
     72#ifdef IPV6
     73        i6 = sizeof( *sock6 );
     74#endif
    7275       
    7376        if( global.conf->hostname )
    7477                irc->myhost = g_strdup( global.conf->hostname );
    7578#ifdef IPV6
    76         else if( getsockname( irc->fd, (struct sockaddr*) sock, &i ) == 0 && sock->sin6_family == AF_INETx )
    77         {
    78                 if( ( peer = gethostbyaddr( (char*) &sock->sin6_addr, sizeof( sock->sin6_addr ), AF_INETx ) ) )
     79        else if( getsockname( irc->fd, (struct sockaddr*) sock6, &i6 ) == 0 && sock6->sin6_family == AF_INET6 )
     80        {
     81                if( ( peer = gethostbyaddr( (char*) &sock6->sin6_addr, sizeof( sock6->sin6_addr ), AF_INET6 ) ) )
    7982                        irc->myhost = g_strdup( peer->h_name );
    80                 else if( inet_ntop( AF_INETx, &sock->sin6_addr, buf, sizeof( buf ) - 1 ) != NULL )
     83                else if( inet_ntop( AF_INET6, &sock6->sin6_addr, buf, sizeof( buf ) - 1 ) != NULL )
    8184                        irc->myhost = g_strdup( ipv6_unwrap( buf ) );
    8285        }
    83 #else
    84         else if( getsockname( irc->fd, (struct sockaddr*) sock, &i ) == 0 && sock->sin_family == AF_INETx )
    85         {
    86                 if( ( peer = gethostbyaddr( (char*) &sock->sin_addr, sizeof( sock->sin_addr ), AF_INETx ) ) )
     86#endif
     87        else if( getsockname( irc->fd, (struct sockaddr*) sock, &i ) == 0 && sock->sin_family == AF_INET )
     88        {
     89                if( ( peer = gethostbyaddr( (char*) &sock->sin_addr, sizeof( sock->sin_addr ), AF_INET ) ) )
    8790                        irc->myhost = g_strdup( peer->h_name );
    88                 else if( inet_ntop( AF_INETx, &sock->sin_addr, buf, sizeof( buf ) - 1 ) != NULL )
     91                else if( inet_ntop( AF_INET, &sock->sin_addr, buf, sizeof( buf ) - 1 ) != NULL )
    8992                        irc->myhost = g_strdup( buf );
    9093        }
    91 #endif
    9294       
    9395        i = sizeof( *sock );
    9496#ifdef IPV6
    95         if( getpeername( irc->fd, (struct sockaddr*) sock, &i ) == 0 && sock->sin6_family == AF_INETx )
    96         {
    97                 if( ( peer = gethostbyaddr( (char*) &sock->sin6_addr, sizeof( sock->sin6_addr ), AF_INETx ) ) )
     97        i6 = sizeof( *sock6 );
     98        if( getpeername( irc->fd, (struct sockaddr*) sock6, &i6 ) == 0 && sock6->sin6_family == AF_INET6 )
     99        {
     100                if( ( peer = gethostbyaddr( (char*) &sock6->sin6_addr, sizeof( sock6->sin6_addr ), AF_INET6 ) ) )
    98101                        irc->host = g_strdup( peer->h_name );
    99                 else if( inet_ntop( AF_INETx, &sock->sin6_addr, buf, sizeof( buf ) - 1 ) != NULL )
     102                else if( inet_ntop( AF_INET6, &sock6->sin6_addr, buf, sizeof( buf ) - 1 ) != NULL )
    100103                        irc->host = g_strdup( ipv6_unwrap( buf ) );
    101104        }
    102 #else
    103         if( getpeername( irc->fd, (struct sockaddr*) sock, &i ) == 0 && sock->sin_family == AF_INETx )
    104         {
    105                 if( ( peer = gethostbyaddr( (char*) &sock->sin_addr, sizeof( sock->sin_addr ), AF_INETx ) ) )
     105        else
     106#endif
     107        if( getpeername( irc->fd, (struct sockaddr*) sock, &i ) == 0 && sock->sin_family == AF_INET )
     108        {
     109                if( ( peer = gethostbyaddr( (char*) &sock->sin_addr, sizeof( sock->sin_addr ), AF_INET ) ) )
    106110                        irc->host = g_strdup( peer->h_name );
    107                 else if( inet_ntop( AF_INETx, &sock->sin_addr, buf, sizeof( buf ) - 1 ) != NULL )
     111                else if( inet_ntop( AF_INET, &sock->sin_addr, buf, sizeof( buf ) - 1 ) != NULL )
    108112                        irc->host = g_strdup( buf );
    109113        }
    110 #endif
    111114       
    112115        /* Rare, but possible. */
     
    621624        char namelist[385] = "";
    622625        struct conversation *c = NULL;
     626        char *ops = set_getstr( irc, "ops" );
    623627       
    624628        /* RFCs say there is no error reply allowed on NAMES, so when the
     
    637641                        if( u->gc && !u->away && set_getbool( &irc->set, "away_devoice" ) )
    638642                                strcat( namelist, "+" );
     643                        else if( ( strcmp( u->nick, irc->mynick ) == 0 && ( strcmp( ops, "root" ) == 0 || strcmp( ops, "both" ) == 0 ) ) ||
     644                                 ( strcmp( u->nick, irc->nick ) == 0 && ( strcmp( ops, "user" ) == 0 || strcmp( ops, "both" ) == 0 ) ) )
     645                                strcat( namelist, "@" );
    639646                       
    640647                        strcat( namelist, u->nick );
  • protocols/msn/msn.c

    r75a4b85 reda0270  
    105105                }
    106106               
     107                while( md->groupcount > 0 )
     108                        g_free( md->grouplist[--md->groupcount] );
    107109                g_free( md->grouplist );
    108110               
  • sock.h

    r75a4b85 reda0270  
    11#include <errno.h>
    22#include <fcntl.h>
    3 
    4 /* To cut down on the ifdef stuff a little bit in other places */
    5 #ifdef IPV6
    6 #define AF_INETx AF_INET6
    7 #else
    8 #define AF_INETx AF_INET
    9 #endif
    103
    114#ifndef _WIN32
Note: See TracChangeset for help on using the changeset viewer.