mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-01-18 18:56:24 +00:00
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.
This commit is contained in:
parent
244f37179c
commit
697520f1f5
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user