Select requested virtual IP family based on remote TS, if no local TS available
authorMartin Willi <martin@revosec.ch>
Wed, 20 Jun 2012 08:01:05 +0000 (10:01 +0200)
committerMartin Willi <martin@revosec.ch>
Wed, 20 Jun 2012 08:02:01 +0000 (10:02 +0200)
src/libcharon/plugins/stroke/stroke_config.c

index 086a42b..da0d2a7 100644 (file)
@@ -705,7 +705,7 @@ static peer_cfg_t *build_peer_cfg(private_stroke_config_t *this,
                if (!vip)
                {       /* if it is set to something like %poolname, request an address */
                        if (msg->add_conn.me.subnets)
-                       {       /* use the same address as in subnet, if any */
+                       {       /* use the same family as in local subnet, if any */
                                if (strchr(msg->add_conn.me.subnets, '.'))
                                {
                                        vip = host_create_any(AF_INET);
@@ -715,6 +715,17 @@ static peer_cfg_t *build_peer_cfg(private_stroke_config_t *this,
                                        vip = host_create_any(AF_INET6);
                                }
                        }
+                       else if (msg->add_conn.other.subnets)
+                       {       /* use the same family as in remote subnet, if any */
+                               if (strchr(msg->add_conn.other.subnets, '.'))
+                               {
+                                       vip = host_create_any(AF_INET);
+                               }
+                               else
+                               {
+                                       vip = host_create_any(AF_INET6);
+                               }
+                       }
                        else
                        {
                                if (strchr(ike_cfg->get_my_addr(ike_cfg, NULL), ':'))