]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Fix for server selecting address family
authorArne Schwabe <arne@rfc2549.org>
Fri, 21 Mar 2014 13:18:39 +0000 (14:18 +0100)
committerGert Doering <gert@greenie.muc.de>
Sun, 23 Mar 2014 19:20:21 +0000 (20:20 +0100)
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1395407925-25518-7-git-send-email-arne@rfc2549.org>
URL: http://article.gmane.org/gmane.network.openvpn.devel/8371

Signed-off-by: Gert Doering <gert@greenie.muc.de>
src/openvpn/socket.c

index 0903afb4b83c67dae06c43abb41c9e7d23d42d49..21aeac2dc4777af44734f2bebc7cc75ed5777407 100644 (file)
@@ -1512,21 +1512,10 @@ create_new_socket (struct link_socket* sock)
       /* clear destination set by set_actual_address */
       CLEAR(sock->info.lsa->actual.dest);
     }
-
-  /*
-   * Create the socket early if socket should be bound
-   */
-  if (sock->bind_local)
-    {
-      create_socket (sock);
-
-      if (sock->bind_local)
-          bind_local(sock);
-    }
-
 }
 
 
+
 /* bind socket if necessary */
 void
 link_socket_init_phase1 (struct link_socket *sock,
@@ -1949,6 +1938,17 @@ link_socket_init_phase2 (struct link_socket *sock,
       /* If socket has not already been created create it now */
       if (sock->sd == SOCKET_UNDEFINED)
        {
+          /* If we have no --remote and have still not figured out the
+           * protocol family to use we will use the first of the bind */
+          if (sock->bind_local && sock->info.lsa->bind_local
+              && !sock->info.lsa->actual.ai_family && !sock->remote_host)
+          {
+            msg (M_WARN, "Could not determine IPv4/IPv6 protocol. Using %s",
+                 addr_family_name(sock->info.lsa->bind_local->ai_family));
+            set_actual_address(&sock->info.lsa->actual, sock->info.lsa->bind_local);
+
+          }
+
          if (sock->info.lsa->actual.ai_family)
            {
              create_socket (sock);