Handle case where no old DNS servers exist

This commit is contained in:
Robert.Schreib 2021-04-21 13:49:55 +02:00
parent 31ffe4403c
commit 4e8640b380
No known key found for this signature in database
GPG key ID: C5D4FEC8240C0777

View file

@ -40,9 +40,13 @@ void MacDNSHelper::setDNS(uint64_t nwid, const char *domain, const std::vector<I
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 dnsServersChanged = true;
CFPropertyListRef oldDNSServers = SCDynamicStoreCopyValue(ds, (CFStringRef)CFArrayGetValueAtIndex(list, i)); CFPropertyListRef oldDNSServers = NULL;
if (!CFEqual(oldDNSServers,dict)) { if (j > 0) {
oldDNSServers = SCDynamicStoreCopyValue(ds, (CFStringRef)CFArrayGetValueAtIndex(list, i));
dnsServersChanged = !CFEqual(oldDNSServers,dict);
}
if (dnsServersChanged) {
bool ret = TRUE; bool ret = TRUE;
if (j <= 0) { if (j <= 0) {
ret &= SCDynamicStoreAddValue(ds, key, dict); 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"); fprintf(stderr, "Error writing DNS configuration\n");
} }
} }
if (oldDNSServers != NULL) {
CFRelease(oldDNSServers); CFRelease(oldDNSServers);
}
CFRelease(list); CFRelease(list);
CFRelease(key); CFRelease(key);
CFRelease(dict); CFRelease(dict);
@ -67,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);