]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/conn.c
Fix format arg: ListenAddress was printed instead of Bind address.
[ngircd-alex.git] / src / ngircd / conn.c
index 07c8078374af0512ce69211b13fb363b9646dcf5..6042db2f3f3a9e644b5ae4f3548ea803e57edcc5 100644 (file)
@@ -17,7 +17,7 @@
 #include "portab.h"
 #include "io.h"
 
-static char UNUSED id[] = "$Id: conn.c,v 1.215 2007/11/23 16:26:04 fw Exp $";
+static char UNUSED id[] = "$Id: conn.c,v 1.220 2007/12/13 01:30:16 fw Exp $";
 
 #include "imp.h"
 #include <assert.h>
@@ -41,12 +41,6 @@ static char UNUSED id[] = "$Id: conn.c,v 1.215 2007/11/23 16:26:04 fw Exp $";
 # include <netinet/ip.h>
 #endif
 
-#ifdef HAVE_ARPA_INET_H
-# include <arpa/inet.h>
-#else
-# define PF_INET AF_INET
-#endif
-
 #ifdef HAVE_STDINT_H
 # include <stdint.h>                   /* e.g. for Mac OS X */
 #endif
@@ -92,7 +86,7 @@ static void Check_Connections PARAMS(( void ));
 static void Check_Servers PARAMS(( void ));
 static void Init_Conn_Struct PARAMS(( CONN_ID Idx ));
 static bool Init_Socket PARAMS(( int Sock ));
-static void New_Server PARAMS(( int Server ));
+static void New_Server PARAMS(( int Server, struct in_addr *dest));
 static void Simple_Message PARAMS(( int Sock, const char *Msg ));
 static int Count_Connections PARAMS(( struct sockaddr_in addr ));
 static int NewListener PARAMS(( const UINT16 Port ));
@@ -1373,39 +1367,21 @@ Check_Servers( void )
 
 
 static void
-New_Server( int Server )
+New_Server( int Server , struct in_addr *dest)
 {
        /* Establish new server link */
        struct sockaddr_in local_addr;
        struct sockaddr_in new_addr;
-       struct in_addr inaddr;
        int res, new_sock;
        CLIENT *c;
 
        assert( Server > NONE );
 
-       Log( LOG_INFO, "Establishing connection to \"%s\", %s, port %d ... ", Conf_Server[Server].host,
-                                                       Conf_Server[Server].ip, Conf_Server[Server].port );
-
-#ifdef HAVE_INET_ATON
-       if( inet_aton( Conf_Server[Server].ip, &inaddr ) == 0 )
-#else
-       memset( &inaddr, 0, sizeof( inaddr ));
-       inaddr.s_addr = inet_addr( Conf_Server[Server].ip );
-       if( inaddr.s_addr == (unsigned)-1 )
-#endif
-       {
-               Log( LOG_ERR, "Can't connect to \"%s\": can't convert ip address %s!",
-                               Conf_Server[Server].host, Conf_Server[Server].ip );
-               return;
-       }
-
        memset(&new_addr, 0, sizeof( new_addr ));
        new_addr.sin_family = AF_INET;
-       new_addr.sin_addr = inaddr;
+       new_addr.sin_addr = *dest;
        new_addr.sin_port = htons( Conf_Server[Server].port );
 
-
        new_sock = socket( PF_INET, SOCK_STREAM, 0 );
        if ( new_sock < 0 ) {
                Log( LOG_CRIT, "Can't create socket: %s!", strerror( errno ));
@@ -1418,7 +1394,7 @@ New_Server( int Server )
        InitSinaddr(&local_addr, 0);
        local_addr.sin_addr = Conf_Server[Server].bind_addr;
        if (bind(new_sock, (struct sockaddr *)&local_addr, (socklen_t)sizeof(local_addr)))
-               Log(LOG_WARNING, "Can't bind socket to %s!", Conf_ListenAddress, strerror( errno ));
+               Log(LOG_WARNING, "Can't bind socket to %s: %s!", inet_ntoa(Conf_Server[Server].bind_addr), strerror( errno ));
 
        res = connect(new_sock, (struct sockaddr *)&new_addr,
                        (socklen_t)sizeof(new_addr));
@@ -1534,6 +1510,7 @@ cb_Connect_to_Server(int fd, UNUSED short events)
        /* Read result of resolver sub-process from pipe and start connection */
        int i;
        size_t len;
+       struct in_addr dest_addr;
        char readbuf[HOST_LEN + 1];
 
        LogDebug("Resolver: Got forward lookup callback on fd %d, events %d", fd, events);
@@ -1542,7 +1519,7 @@ cb_Connect_to_Server(int fd, UNUSED short events)
                  if (Resolve_Getfd(&Conf_Server[i].res_stat) == fd )
                          break;
        }
-       
+
        if( i >= MAX_SERVERS) {
                /* Ops, no matching server found?! */
                io_close( fd );
@@ -1551,16 +1528,23 @@ cb_Connect_to_Server(int fd, UNUSED short events)
        }
 
        /* Read result from pipe */
-       len = Resolve_Read(&Conf_Server[i].res_stat, readbuf, sizeof readbuf -1);
+       len = Resolve_Read(&Conf_Server[i].res_stat, readbuf, sizeof(readbuf)-1);
        if (len == 0)
                return;
-       
+
        readbuf[len] = '\0';
        LogDebug("Got result from resolver: \"%s\" (%u bytes read).", readbuf, len);
-       strlcpy( Conf_Server[i].ip, readbuf, sizeof( Conf_Server[i].ip ));
 
+       if (!ngt_IPStrToBin(readbuf, &dest_addr)) {
+               Log(LOG_ERR, "Can't connect to \"%s\": can't convert ip address %s!",
+                                               Conf_Server[i].host, readbuf);
+               return;
+       }
+
+       Log( LOG_INFO, "Establishing connection to \"%s\", %s, port %d ... ",
+                       Conf_Server[i].host, readbuf, Conf_Server[i].port );
        /* connect() */
-       New_Server(i);
+       New_Server(i, &dest_addr);
 } /* cb_Read_Forward_Lookup */
 
 
@@ -1627,10 +1611,10 @@ cb_Read_Resolver_Result( int r_fd, UNUSED short events )
 #ifdef IDENTAUTH
                ++identptr;
                if (*identptr) {
-                       Log( LOG_INFO, "IDENT lookup for connection %ld: \"%s\".", i, identptr);
-                       Client_SetUser( c, identptr, true );
+                       Log(LOG_INFO, "IDENT lookup for connection %d: \"%s\".", i, identptr);
+                       Client_SetUser(c, identptr, true);
                } else {
-                       Log( LOG_INFO, "IDENT lookup for connection %ld: no result.", i );
+                       Log(LOG_INFO, "IDENT lookup for connection %d: no result.", i);
                }
 #endif
        }