]> git.sur5r.net Git - bacula/bacula/commitdiff
Make IPv6 handling more robust
authorKern Sibbald <kern@sibbald.com>
Mon, 31 Mar 2014 18:07:48 +0000 (20:07 +0200)
committerKern Sibbald <kern@sibbald.com>
Mon, 31 Mar 2014 18:07:48 +0000 (20:07 +0200)
bacula/src/lib/address_conf.c
bacula/src/lib/bnet.c

index c5ef4cac1e9dc5783774f8d5ccd11c9e1b16710e..0d5fb07830f1a9630507aec8933d1a1062a0369a 100644 (file)
@@ -65,7 +65,7 @@ IPADDR::IPADDR(int af) : type(R_EMPTY)
      saddr4->sin_port = 0xffff;
   }
 #ifdef HAVE_IPV6
-  else {
+  else if (af  == AF_INET6) {
      saddr6->sin6_port = 0xffff;
   }
 #endif
@@ -96,11 +96,11 @@ unsigned short IPADDR::get_port_net_order() const
       port = saddr4->sin_port;
    }
 #ifdef HAVE_IPV6
-   else {
+   else if (saddr->sa_family == AF_INET6) {
       port = saddr6->sin6_port;
    }
 #endif
-    return port;
+   return port;
 }
 
 void IPADDR::set_port_net(unsigned short port)
@@ -109,7 +109,7 @@ void IPADDR::set_port_net(unsigned short port)
       saddr4->sin_port = port;
    }
 #ifdef HAVE_IPV6
-   else {
+   else if (saddr->sa_family == AF_INET6) {
       saddr6->sin6_port = port;
    }
 #endif
@@ -201,10 +201,11 @@ const char *IPADDR::get_address(char *outputbuf, int outlen)
 const char *IPADDR::build_address_str(char *buf, int blen)
 {
    char tmp[1024];
+   *buf = 0;
    if (get_family() == AF_INET) {
       bsnprintf(buf, blen, "%s:%hu ",
                 get_address(tmp, sizeof(tmp) - 1), get_port_host_order());
-   } else {
+   } else if (get_family() == AF_INET6) {
       bsnprintf(buf, blen, "[%s]:%hu ",
                 get_address(tmp, sizeof(tmp) - 1), get_port_host_order());
    }
@@ -574,7 +575,7 @@ int sockaddr_get_port_net_order(const struct sockaddr *client_addr)
       return ((struct sockaddr_in *)client_addr)->sin_port;
    }
 #ifdef HAVE_IPV6
-   else {
+   else if (client_addr->sa_family == AF_INET6) {
       return ((struct sockaddr_in6 *)client_addr)->sin6_port;
    }
 #endif
@@ -587,7 +588,7 @@ int sockaddr_get_port(const struct sockaddr *client_addr)
       return ntohs(((struct sockaddr_in *)client_addr)->sin_port);
    }
 #ifdef HAVE_IPV6
-   else {
+   else if (client_addr->sa_family == AF_INET6) {
       return ntohs(((struct sockaddr_in6 *)client_addr)->sin6_port);
    }
 #endif
index 91fd3970962a3040c87e066be2d4f437dfc729db..f61929f4ea0d113e0daf7d91084bf2662bf6b2b6 100644 (file)
@@ -439,14 +439,15 @@ static const char *resolv_host(int family, const char *host, dlist * addr_list)
          IPADDR *addr =  New(IPADDR(hp->h_addrtype));
          addr->set_type(IPADDR::R_MULTIPLE);
          if (addr->get_family() == AF_INET) {
-             addr->set_addr4((struct in_addr*)*p);
+            addr->set_addr4((struct in_addr*)*p);
+            addr_list->append(addr);
          }
 #ifdef HAVE_IPV6
-         else {
-             addr->set_addr6((struct in6_addr*)*p);
+         else if (addr->get_family() == AF_INET6) {
+            addr->set_addr6((struct in6_addr*)*p);
+            addr_list->append(addr);
          }
 #endif
-         addr_list->append(addr);
       }
       V(ip_mutex);
    }