Imported Upstream version 3.3.0
[debian/amanda] / server-src / chunker.c
index 0c4c2b0a0c1f79c293d7f7dc72d277ebdef76aba..488f675886675cbefda2f8f625956015db19848c 100644 (file)
@@ -43,6 +43,7 @@
 #include "util.h"
 #include "holding.h"
 #include "timestamp.h"
+#include "sockaddr-util.h"
 
 #ifndef SEEK_SET
 #define SEEK_SET 0
@@ -440,6 +441,9 @@ startup_chunker(
     int header_socket, data_socket;
     int result;
     struct addrinfo *res;
+    struct addrinfo *res_addr;
+    sockaddr_union  *addr = NULL;
+    sockaddr_union   data_addr;
 
     header_port = 0;
     data_port = 0;
@@ -448,10 +452,26 @@ startup_chunker(
                               gai_strerror(result));
        return -1;
     }
-    header_socket = stream_server(res->ai_family, &header_port, 0,
+    for (res_addr = res; res_addr != NULL; res_addr = res_addr->ai_next) {
+       g_debug("ra: %s\n", str_sockaddr((sockaddr_union*)res_addr->ai_addr));
+       if (res_addr->ai_family == AF_INET) {
+           addr = (sockaddr_union *)res_addr->ai_addr;
+           break;
+       }
+    }
+    if (!addr) {
+       addr = (sockaddr_union *)res->ai_addr;
+       g_debug("addr: %s\n", str_sockaddr(addr));
+    }
+
+    header_socket = stream_server(SU_GET_FAMILY(addr), &header_port, 0,
                                STREAM_BUFSIZE, 0);
-    data_socket = stream_server(res->ai_family, &data_port, 0,
+    data_socket = stream_server(SU_GET_FAMILY(addr), &data_port, 0,
                                STREAM_BUFSIZE, 0);
+    copy_sockaddr(&data_addr, addr);
+
+    SU_SET_PORT(&data_addr, data_port);
+
     if (res) freeaddrinfo(res);
 
     if (header_socket < 0) {
@@ -466,7 +486,7 @@ startup_chunker(
        return -1;
     }
 
-    putresult(PORT, "%d 127.0.0.1:%d\n", header_port, data_port);
+    putresult(PORT, "%d %s\n", header_port, str_sockaddr(&data_addr));
 
     header_fd = stream_accept(header_socket, CONNECT_TIMEOUT, 0,
                              STREAM_BUFSIZE);