diff options
Diffstat (limited to 'openvpn/src/openvpn/tun.c')
| -rw-r--r-- | openvpn/src/openvpn/tun.c | 33 | 
1 files changed, 20 insertions, 13 deletions
diff --git a/openvpn/src/openvpn/tun.c b/openvpn/src/openvpn/tun.c index 1b2e5822..a0754427 100644 --- a/openvpn/src/openvpn/tun.c +++ b/openvpn/src/openvpn/tun.c @@ -413,8 +413,8 @@ init_tun (const char *dev,       /* --dev option */  	  const char *ifconfig_ipv6_local_parm,     /* --ifconfig parm 1 IPv6 */  	  int         ifconfig_ipv6_netbits_parm,  	  const char *ifconfig_ipv6_remote_parm,    /* --ifconfig parm 2 IPv6 */ -	  in_addr_t local_public, -	  in_addr_t remote_public, +	  struct addrinfo *local_public, +	  struct addrinfo *remote_public,  	  const bool strict_warn,  	  struct env_set *es)  { @@ -468,24 +468,31 @@ init_tun (const char *dev,       /* --dev option */         */        if (strict_warn)  	{ +          struct addrinfo *curele;  	  ifconfig_sanity_check (tt->type == DEV_TYPE_TUN, tt->remote_netmask, tt->topology);  	  /*  	   * If local_public or remote_public addresses are defined,  	   * make sure they do not clash with our virtual subnet.  	   */ - -	  check_addr_clash ("local", +           +          for(curele=remote_public;curele;curele=curele->ai_next) { +            if(curele->ai_family == AF_INET) +              check_addr_clash ("local",  			    tt->type, -			    local_public, +                            ((struct sockaddr_in*)curele->ai_addr)->sin_addr.s_addr,  			    tt->local,  			    tt->remote_netmask); +          } -	  check_addr_clash ("remote", -			    tt->type, -			    remote_public, -			    tt->local, -			    tt->remote_netmask); +          for(curele=remote_public;curele;curele=curele->ai_next) { +            if(curele->ai_family == AF_INET) +              check_addr_clash ("remote", +                                tt->type, +                                ((struct sockaddr_in*)curele->ai_addr)->sin_addr.s_addr, +			        tt->local, +			        tt->remote_netmask); +          }  	  if (tt->type == DEV_TYPE_TAP || (tt->type == DEV_TYPE_TUN && tt->topology == TOP_SUBNET))  	    check_subnet_conflict (tt->local, tt->remote_netmask, "TUN/TAP adapter"); @@ -1405,7 +1412,7 @@ close_tun_generic (struct tuntap *tt)    if (tt->fd >= 0)      close (tt->fd);    if (tt->actual_name) -	  free (tt->actual_name); +    free (tt->actual_name);    clear_tuntap (tt);  } @@ -1439,8 +1446,8 @@ open_tun (const char *dev, const char *dev_type, const char *dev_node, struct tu          msg (M_ERR, "ERROR: Cannot open TUN");      }      /* Set the actual name to a dummy name to enable scripts */ -	tt->actual_name = (char *) malloc(32); -	strncpy(tt->actual_name, "vpnservice-tun",32); +    tt->actual_name = (char *) malloc(32); +    strncpy(tt->actual_name, "vpnservice-tun",32);      gc_free (&gc);  }  | 
