mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-04-24 20:50:43 +02:00
rdisc: properly handle RDNSS/DNSSL forced expiration
If the router sends an RA with an RDNSS or DNSSL lifetime of "0", that means to immediately stop using the corresponding server/domain name. NMLNDPRDisc knew this, but messed up its handling of it, and so if this happened, it might end up sending out an RS to get new data every 0 seconds... (Noticed while investigating bgo 735325, though it turned out to be irrelevant there.)
This commit is contained in:
parent
f1a0b4afd2
commit
9f739d0c61
1 changed files with 18 additions and 12 deletions
|
|
@ -176,8 +176,15 @@ add_dns_server (NMRDisc *rdisc, const NMRDiscDNSServer *new)
|
|||
NMRDiscDNSServer *item = &g_array_index (rdisc->dns_servers, NMRDiscDNSServer, i);
|
||||
|
||||
if (IN6_ARE_ADDR_EQUAL (&item->address, &new->address)) {
|
||||
gboolean changed = item->timestamp != new->timestamp ||
|
||||
item->lifetime != new->lifetime;
|
||||
gboolean changed;
|
||||
|
||||
if (new->lifetime == 0) {
|
||||
g_array_remove_index (rdisc->dns_servers, i);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
changed = (item->timestamp != new->timestamp ||
|
||||
item->lifetime != new->lifetime);
|
||||
if (changed) {
|
||||
item->timestamp = new->timestamp;
|
||||
item->lifetime = new->lifetime;
|
||||
|
|
@ -186,10 +193,6 @@ add_dns_server (NMRDisc *rdisc, const NMRDiscDNSServer *new)
|
|||
}
|
||||
}
|
||||
|
||||
/* DNS server should no longer be used */
|
||||
if (new->lifetime == 0)
|
||||
return FALSE;
|
||||
|
||||
g_array_insert_val (rdisc->dns_servers, i, *new);
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -205,8 +208,15 @@ add_dns_domain (NMRDisc *rdisc, const NMRDiscDNSDomain *new)
|
|||
item = &g_array_index (rdisc->dns_domains, NMRDiscDNSDomain, i);
|
||||
|
||||
if (!g_strcmp0 (item->domain, new->domain)) {
|
||||
gboolean changed = item->timestamp != new->timestamp ||
|
||||
item->lifetime != new->lifetime;
|
||||
gboolean changed;
|
||||
|
||||
if (new->lifetime == 0) {
|
||||
g_array_remove_index (rdisc->dns_domains, i);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
changed = (item->timestamp != new->timestamp ||
|
||||
item->lifetime != new->lifetime);
|
||||
if (changed) {
|
||||
item->timestamp = new->timestamp;
|
||||
item->lifetime = new->lifetime;
|
||||
|
|
@ -215,10 +225,6 @@ add_dns_domain (NMRDisc *rdisc, const NMRDiscDNSDomain *new)
|
|||
}
|
||||
}
|
||||
|
||||
/* Domain should no longer be used */
|
||||
if (new->lifetime == 0)
|
||||
return FALSE;
|
||||
|
||||
g_array_insert_val (rdisc->dns_domains, i, *new);
|
||||
item = &g_array_index (rdisc->dns_domains, NMRDiscDNSDomain, i);
|
||||
item->domain = g_strdup (new->domain);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue