mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-07 04:53:44 +02:00
Merge pull request #1388 from emundo/fix/1387-dns-issue
Fix macOS DNS issue
This commit is contained in:
commit
5fb814a04f
1 changed files with 20 additions and 11 deletions
|
@ -39,18 +39,27 @@ void MacDNSHelper::setDNS(uint64_t nwid, const char *domain, const std::vector<I
|
||||||
sprintf(buf, "State:/Network/Service/%.16llx/DNS", nwid);
|
sprintf(buf, "State:/Network/Service/%.16llx/DNS", nwid);
|
||||||
CFStringRef key = CFStringCreateWithCString(NULL, buf, kCFStringEncodingUTF8);
|
CFStringRef key = CFStringCreateWithCString(NULL, buf, kCFStringEncodingUTF8);
|
||||||
CFArrayRef list = SCDynamicStoreCopyKeyList(ds, key);
|
CFArrayRef list = SCDynamicStoreCopyKeyList(ds, key);
|
||||||
|
|
||||||
CFIndex i = 0, j = CFArrayGetCount(list);
|
CFIndex i = 0, j = CFArrayGetCount(list);
|
||||||
bool ret = TRUE;
|
bool dnsServersChanged = true;
|
||||||
if (j <= 0) {
|
CFPropertyListRef oldDNSServers = NULL;
|
||||||
ret &= SCDynamicStoreAddValue(ds, key, dict);
|
if (j > 0) {
|
||||||
} else {
|
oldDNSServers = SCDynamicStoreCopyValue(ds, (CFStringRef)CFArrayGetValueAtIndex(list, i));
|
||||||
ret &= SCDynamicStoreSetValue(ds, (CFStringRef)CFArrayGetValueAtIndex(list, i), dict);
|
dnsServersChanged = !CFEqual(oldDNSServers,dict);
|
||||||
}
|
}
|
||||||
if (!ret) {
|
if (dnsServersChanged) {
|
||||||
fprintf(stderr, "Error writing DNS configuration\n");
|
bool ret = TRUE;
|
||||||
|
if (j <= 0) {
|
||||||
|
ret &= SCDynamicStoreAddValue(ds, key, dict);
|
||||||
|
} else {
|
||||||
|
ret &= SCDynamicStoreSetValue(ds, (CFStringRef)CFArrayGetValueAtIndex(list, i), dict);
|
||||||
|
}
|
||||||
|
if (!ret) {
|
||||||
|
fprintf(stderr, "Error writing DNS configuration\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (oldDNSServers != NULL) {
|
||||||
|
CFRelease(oldDNSServers);
|
||||||
}
|
}
|
||||||
|
|
||||||
CFRelease(list);
|
CFRelease(list);
|
||||||
CFRelease(key);
|
CFRelease(key);
|
||||||
CFRelease(dict);
|
CFRelease(dict);
|
||||||
|
@ -63,8 +72,8 @@ void MacDNSHelper::setDNS(uint64_t nwid, const char *domain, const std::vector<I
|
||||||
delete[] s;
|
delete[] s;
|
||||||
CFRelease(ds);
|
CFRelease(ds);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MacDNSHelper::removeDNS(uint64_t nwid)
|
void MacDNSHelper::removeDNS(uint64_t nwid)
|
||||||
{
|
{
|
||||||
SCDynamicStoreRef ds = SCDynamicStoreCreate(NULL, CFSTR("zerotier"), NULL, NULL);
|
SCDynamicStoreRef ds = SCDynamicStoreCreate(NULL, CFSTR("zerotier"), NULL, NULL);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue