diff --git a/osdep/MacDNSHelper.mm b/osdep/MacDNSHelper.mm index c50de7915..38e74dc3f 100644 --- a/osdep/MacDNSHelper.mm +++ b/osdep/MacDNSHelper.mm @@ -39,18 +39,27 @@ void MacDNSHelper::setDNS(uint64_t nwid, const char *domain, const std::vector 0) { + oldDNSServers = SCDynamicStoreCopyValue(ds, (CFStringRef)CFArrayGetValueAtIndex(list, i)); + dnsServersChanged = !CFEqual(oldDNSServers,dict); } - if (!ret) { - fprintf(stderr, "Error writing DNS configuration\n"); + if (dnsServersChanged) { + 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(key); CFRelease(dict); @@ -63,8 +72,8 @@ void MacDNSHelper::setDNS(uint64_t nwid, const char *domain, const std::vector