Changeset 60e4df3 for lib


Ignore:
Timestamp:
2010-03-17T23:23:27Z (10 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
c1a3c27
Parents:
e8c8d00
Message:

Small cleanup. The max_packet_size variable doesn't seem to be read
anywhere, and reworked string handling in ft_listen() a little bit.

Location:
lib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • lib/ftutil.c

    re8c8d00 r60e4df3  
    2828#include "lib/ftutil.h"
    2929
    30 /* Some ifdefs for ulibc and apparently also BSD (Thanks to Whoopie) */
    31 #ifndef HOST_NAME_MAX
    32 #include <sys/param.h>
    33 #ifdef MAXHOSTNAMELEN
    34 #define HOST_NAME_MAX MAXHOSTNAMELEN
    35 #else
    36 #define HOST_NAME_MAX 255
    37 #endif
    38 #endif
    39 
    4030#define ASSERTSOCKOP(op, msg) \
    4131        if( (op) == -1 ) {\
    42                 sprintf( errmsg , msg ": %s", strerror( errno ) ); \
     32                g_snprintf( errmsg, sizeof( errmsg ), msg ": %s", strerror( errno ) ); \
    4333                return -1; }
    4434
     
    4636 * Creates a listening socket and returns it in saddr_ptr.
    4737 */
    48 int ft_listen( struct sockaddr_storage *saddr_ptr, char *hostp, char *port, int for_bitlbee_client, char **errptr )
     38int ft_listen( struct sockaddr_storage *saddr_ptr, char *host, char *port, int for_bitlbee_client, char **errptr )
    4939{
    50         int fd,gret,saddrlen;
     40        int fd, gret, saddrlen;
    5141        struct addrinfo hints, *rp;
    5242        socklen_t ssize = sizeof( struct sockaddr_storage );
    5343        struct sockaddr_storage saddrs, *saddr = &saddrs;
    5444        static char errmsg[1024];
    55         char host[ HOST_NAME_MAX + 1 ];
    5645        char *ftlisten = global.conf->ft_listen;
    5746
    58         *errptr = errmsg;
     47        if( errptr )
     48                *errptr = errmsg;
    5949
    60         sprintf( port, "0" );
     50        strcpy( port, "0" );
    6151
    6252        /* Format is <IP-A>[:<Port-A>];<IP-B>[:<Port-B>] where
     
    6454         * and B is for connections with IM peers.
    6555         */
    66         if( ftlisten ) {
     56        if( ftlisten )
     57        {
    6758                char *scolon = strchr( ftlisten, ';' );
    6859                char *colon;
    6960
    70                 if( scolon ) {
    71                         if( for_bitlbee_client ) {
     61                if( scolon )
     62                {
     63                        if( for_bitlbee_client )
     64                        {
    7265                                *scolon = '\0';
    73                                 sprintf( host, ftlisten );
     66                                strncpy( host, ftlisten, HOST_NAME_MAX );
    7467                                *scolon = ';';
    75                         } else {
    76                                 sprintf( host, scolon + 1 );
    7768                        }
    78                 } else {
    79                         sprintf( host, ftlisten );
     69                        else
     70                        {
     71                                strncpy( host, scolon + 1, HOST_NAME_MAX );
     72                        }
     73                }
     74                else
     75                {
     76                        strncpy( host, ftlisten, HOST_NAME_MAX );
    8077                }
    8178
    82                 if( ( colon = strchr( host, ':' ) ) ) {
     79                if( ( colon = strchr( host, ':' ) ) )
     80                {
    8381                        *colon = '\0';
    84                         sprintf( port, colon + 1 );
     82                        strncpy( port, colon + 1, 5 );
    8583                }
    86         } else {
     84        }
     85        else
     86        {
    8787                ASSERTSOCKOP( gethostname( host, HOST_NAME_MAX + 1 ), "gethostname()" );
    8888        }
     
    9292        hints.ai_flags = AI_NUMERICSERV;
    9393
    94         if ( ( gret = getaddrinfo( host, port, &hints, &rp ) ) != 0 ) {
     94        if ( ( gret = getaddrinfo( host, port, &hints, &rp ) ) != 0 )
     95        {
    9596                sprintf( errmsg, "getaddrinfo() failed: %s", gai_strerror( gret ) );
    9697                return -1;
     
    104105
    105106        ASSERTSOCKOP( fd = socket( saddr->ss_family, SOCK_STREAM, 0 ), "Opening socket" );
    106 
    107107        ASSERTSOCKOP( bind( fd, ( struct sockaddr *)saddr, saddrlen ), "Binding socket" );
    108        
    109108        ASSERTSOCKOP( listen( fd, 1 ), "Making socket listen" );
    110109
    111110        if ( !inet_ntop( saddr->ss_family, saddr->ss_family == AF_INET ?
    112                         ( void * )&( ( struct sockaddr_in * ) saddr )->sin_addr.s_addr : ( void * )&( ( struct sockaddr_in6 * ) saddr )->sin6_addr.s6_addr
    113                         , host, INET6_ADDRSTRLEN ) ) {
    114                 sprintf( errmsg, "inet_ntop failed on listening socket" );
     111                        ( void * )&( ( struct sockaddr_in * ) saddr )->sin_addr.s_addr :
     112                        ( void * )&( ( struct sockaddr_in6 * ) saddr )->sin6_addr.s6_addr,
     113                        host, HOST_NAME_MAX ) )
     114        {
     115                strcpy( errmsg, "inet_ntop failed on listening socket" );
    115116                return -1;
    116117        }
     
    119120
    120121        if( saddr->ss_family == AF_INET )
    121                 sprintf( port, "%d", ntohs( ( ( struct sockaddr_in *) saddr )->sin_port ) );
     122                g_snprintf( port, 6, "%d", ntohs( ( (struct sockaddr_in *) saddr )->sin_port ) );
    122123        else
    123                 sprintf( port, "%d", ntohs( ( ( struct sockaddr_in6 *) saddr )->sin6_port ) );
     124                g_snprintf( port, 6, "%d", ntohs( ( (struct sockaddr_in6 *) saddr )->sin6_port ) );
    124125
    125126        if( saddr_ptr )
    126127                memcpy( saddr_ptr, saddr, saddrlen );
    127128
    128         strcpy( hostp, host );
    129 
     129        /* I hate static-length strings.. */
     130        host[HOST_NAME_MAX] = '\0';
     131        port[5] = '\0';
     132       
    130133        return fd;
    131134}
  • lib/ftutil.h

    re8c8d00 r60e4df3  
    2626#endif
    2727
     28/* Some ifdefs for ulibc and apparently also BSD (Thanks to Whoopie) */
     29#ifndef HOST_NAME_MAX
     30#include <sys/param.h>
     31#ifdef MAXHOSTNAMELEN
     32#define HOST_NAME_MAX MAXHOSTNAMELEN
     33#else
     34#define HOST_NAME_MAX 255
     35#endif
     36#endif
     37
     38/* This function should be used with care. host should be AT LEAST a
     39   char[HOST_NAME_MAX+1] and port AT LEAST a char[6]. */
    2840int ft_listen( struct sockaddr_storage *saddr_ptr, char *host, char *port, int for_bitlbee_client, char **errptr );
Note: See TracChangeset for help on using the changeset viewer.