|
|
|
|
@ -40,9 +40,13 @@ void MacDNSHelper::setDNS(uint64_t nwid, const char *domain, const std::vector<I
|
|
|
|
|
CFStringRef key = CFStringCreateWithCString(NULL, buf, kCFStringEncodingUTF8); |
|
|
|
|
CFArrayRef list = SCDynamicStoreCopyKeyList(ds, key); |
|
|
|
|
CFIndex i = 0, j = CFArrayGetCount(list); |
|
|
|
|
|
|
|
|
|
CFPropertyListRef oldDNSServers = SCDynamicStoreCopyValue(ds, (CFStringRef)CFArrayGetValueAtIndex(list, i)); |
|
|
|
|
if (!CFEqual(oldDNSServers,dict)) { |
|
|
|
|
bool dnsServersChanged = true; |
|
|
|
|
CFPropertyListRef oldDNSServers = NULL; |
|
|
|
|
if (j > 0) { |
|
|
|
|
oldDNSServers = SCDynamicStoreCopyValue(ds, (CFStringRef)CFArrayGetValueAtIndex(list, i)); |
|
|
|
|
dnsServersChanged = !CFEqual(oldDNSServers,dict); |
|
|
|
|
} |
|
|
|
|
if (dnsServersChanged) { |
|
|
|
|
bool ret = TRUE; |
|
|
|
|
if (j <= 0) { |
|
|
|
|
ret &= SCDynamicStoreAddValue(ds, key, dict); |
|
|
|
|
@ -53,8 +57,9 @@ void MacDNSHelper::setDNS(uint64_t nwid, const char *domain, const std::vector<I
|
|
|
|
|
fprintf(stderr, "Error writing DNS configuration\n"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
CFRelease(oldDNSServers); |
|
|
|
|
if (oldDNSServers != NULL) { |
|
|
|
|
CFRelease(oldDNSServers); |
|
|
|
|
} |
|
|
|
|
CFRelease(list); |
|
|
|
|
CFRelease(key); |
|
|
|
|
CFRelease(dict); |
|
|
|
|
@ -67,8 +72,8 @@ void MacDNSHelper::setDNS(uint64_t nwid, const char *domain, const std::vector<I
|
|
|
|
|
delete[] s; |
|
|
|
|
CFRelease(ds); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void MacDNSHelper::removeDNS(uint64_t nwid) |
|
|
|
|
|
|
|
|
|
void MacDNSHelper::removeDNS(uint64_t nwid) |
|
|
|
|
{ |
|
|
|
|
SCDynamicStoreRef ds = SCDynamicStoreCreate(NULL, CFSTR("zerotier"), NULL, NULL); |
|
|
|
|
|
|
|
|
|
|