Ver código fonte

Dont write IPv6 addresses to IPv4 sections of registry TCPIP settings.

Also, dont add the prefix length to the IP addresses in there.

Appears to fix Github Issue #357.  Still waiting on some info from Microsoft for confirmation of a few things.
Grant Limberg 8 anos atrás
pai
commit
697520f1f5
1 arquivos alterados com 30 adições e 21 exclusões
  1. 30 21
      osdep/WindowsEthernetTap.cpp

+ 30 - 21
osdep/WindowsEthernetTap.cpp

@@ -672,6 +672,7 @@ bool WindowsEthernetTap::addIp(const InetAddress &ip)
 {
 	if (!ip.netmaskBits()) // sanity check... netmask of 0.0.0.0 is WUT?
 		return false;
+
 	Mutex::Lock _l(_assignedIps_m);
 	if (std::find(_assignedIps.begin(),_assignedIps.end(),ip) != _assignedIps.end())
 		return true;
@@ -682,6 +683,9 @@ bool WindowsEthernetTap::addIp(const InetAddress &ip)
 
 bool WindowsEthernetTap::removeIp(const InetAddress &ip)
 {
+    if (ip.isV6())
+        return true;
+
 	{
 		Mutex::Lock _l(_assignedIps_m);
 		std::vector<InetAddress>::iterator aip(std::find(_assignedIps.begin(),_assignedIps.end(),ip));
@@ -713,18 +717,20 @@ bool WindowsEthernetTap::removeIp(const InetAddress &ip)
 							DeleteUnicastIpAddressEntry(&(ipt->Table[i]));
 							FreeMibTable(ipt);
 
-							std::vector<std::string> regIps(_getRegistryIPv4Value("IPAddress"));
-							std::vector<std::string> regSubnetMasks(_getRegistryIPv4Value("SubnetMask"));
-							std::string ipstr(ip.toIpString());
-							for(std::vector<std::string>::iterator rip(regIps.begin()),rm(regSubnetMasks.begin());((rip!=regIps.end())&&(rm!=regSubnetMasks.end()));++rip,++rm) {
-								if (*rip == ipstr) {
-									regIps.erase(rip);
-									regSubnetMasks.erase(rm);
-									_setRegistryIPv4Value("IPAddress",regIps);
-									_setRegistryIPv4Value("SubnetMask",regSubnetMasks);
-									break;
-								}
-							}
+                            if (ip.isV4()) {
+                                std::vector<std::string> regIps(_getRegistryIPv4Value("IPAddress"));
+                                std::vector<std::string> regSubnetMasks(_getRegistryIPv4Value("SubnetMask"));
+                                std::string ipstr(ip.toIpString());
+                                for (std::vector<std::string>::iterator rip(regIps.begin()), rm(regSubnetMasks.begin()); ((rip != regIps.end()) && (rm != regSubnetMasks.end())); ++rip, ++rm) {
+                                    if (*rip == ipstr) {
+                                        regIps.erase(rip);
+                                        regSubnetMasks.erase(rm);
+                                        _setRegistryIPv4Value("IPAddress", regIps);
+                                        _setRegistryIPv4Value("SubnetMask", regSubnetMasks);
+                                        break;
+                                    }
+                                }
+                            }
 
 							return true;
 						}
@@ -1195,15 +1201,18 @@ void WindowsEthernetTap::_syncIps()
 			CreateUnicastIpAddressEntry(&ipr);
 		}
 
-		std::string ipStr(aip->toString());
-		std::vector<std::string> regIps(_getRegistryIPv4Value("IPAddress"));
-		if (std::find(regIps.begin(),regIps.end(),ipStr) == regIps.end()) {
-			std::vector<std::string> regSubnetMasks(_getRegistryIPv4Value("SubnetMask"));
-			regIps.push_back(ipStr);
-			regSubnetMasks.push_back(aip->netmask().toIpString());
-			_setRegistryIPv4Value("IPAddress",regIps);
-			_setRegistryIPv4Value("SubnetMask",regSubnetMasks);
-		}
+        if (aip->isV4())
+        {
+            std::string ipStr(aip->toIpString());
+            std::vector<std::string> regIps(_getRegistryIPv4Value("IPAddress"));
+            if (std::find(regIps.begin(), regIps.end(), ipStr) == regIps.end()) {
+                std::vector<std::string> regSubnetMasks(_getRegistryIPv4Value("SubnetMask"));
+                regIps.push_back(ipStr);
+                regSubnetMasks.push_back(aip->netmask().toIpString());
+                _setRegistryIPv4Value("IPAddress", regIps);
+                _setRegistryIPv4Value("SubnetMask", regSubnetMasks);
+            }
+        }
 	}
 }