repo: ngircd
action: commit
revision: 
path_from: 
revision_from: d76910ce7b9fad5679b7c614ed086e036560e37d:
path_to: 
revision_to: 
git.thebackupbox.net
ngircd
git clone git://git.thebackupbox.net/ngircd
commit d76910ce7b9fad5679b7c614ed086e036560e37d
Author: Florian Westphal 
Date:   Fri Sep 11 22:51:00 2009 +0200

    conn.c: fix resolver server address backlog

    if more than one ip address is returned for a single host
    name, ngircd is supposed to try other addresses in case
    connect() to the first address returned fails for some
    reason.

    Alexander Barton noticed that this did not work at all,
    as the additional results were not stored.

diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c
index d6ad1e7bef972f412490d561ced2f42b4f7e9819..
index ..cd5921a46d7206e4b9009b58e310280354670b7d 100644
--- a/src/ngircd/conn.c
+++ b/src/ngircd/conn.c
@@ -1826,7 +1826,8 @@ cb_Connect_to_Server(int fd, UNUSED short events)
 	size_t len;
 	ng_ipaddr_t dest_addrs[4];	/* we can handle at most 3; but we read up to
 					   four so we can log the 'more than we can handle'
-					   condition */
+					   condition. First result is tried immediately, rest
+					   is saved for later if needed. */

 	LogDebug("Resolver: Got forward lookup callback on fd %d, events %d", fd, events);

@@ -1851,13 +1852,13 @@ cb_Connect_to_Server(int fd, UNUSED short events)

 	LogDebug("Got result from resolver: %u structs (%u bytes).", len/sizeof(ng_ipaddr_t), len);

-	memset(&Conf_Server[i].dst_addr, 0, sizeof(&Conf_Server[i].dst_addr));
+	memset(&Conf_Server[i].dst_addr, 0, sizeof(Conf_Server[i].dst_addr));
 	if (len > sizeof(ng_ipaddr_t)) {
 		/* more than one address for this hostname, remember them
 		 * in case first address is unreachable/not available */
 		len -= sizeof(ng_ipaddr_t);
-		if (len > sizeof(&Conf_Server[i].dst_addr)) {
-			len = sizeof(&Conf_Server[i].dst_addr);
+		if (len > sizeof(Conf_Server[i].dst_addr)) {
+			len = sizeof(Conf_Server[i].dst_addr);
 			Log(LOG_NOTICE,
 				"Notice: Resolver returned more IP Addresses for host than we can handle, additional addresses dropped.");
 		}

-----END OF PAGE-----