summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLorenzo Colitti <lorenzo@google.com>2014-09-08 18:09:43 +0900
committerLorenzo Colitti <lorenzo@google.com>2014-09-09 19:20:26 +0900
commitbce18c91638e9f37ef2c37555cbb41a0f1f98ab0 (patch)
tree3e5e55c6285755631539555d5f6abc4d094af300
parentd0cce1436435bfcb477f2c5a670ea6675473c2f8 (diff)
downloadbionic-bce18c91638e9f37ef2c37555cbb41a0f1f98ab0.zip
bionic-bce18c91638e9f37ef2c37555cbb41a0f1f98ab0.tar.gz
bionic-bce18c91638e9f37ef2c37555cbb41a0f1f98ab0.tar.bz2
When comparing DNS server configs, also compare number of servers
Bug: 16070602 Change-Id: I605f1cca50b08479ebcad290b3bd179f59be8a96
-rw-r--r--libc/dns/resolv/res_cache.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/libc/dns/resolv/res_cache.c b/libc/dns/resolv/res_cache.c
index 77a1b4d..6f1fcd3 100644
--- a/libc/dns/resolv/res_cache.c
+++ b/libc/dns/resolv/res_cache.c
@@ -1965,10 +1965,25 @@ _resolv_is_nameservers_equal_locked(struct resolv_cache_info* cache_info,
{
int i;
char** ns;
+ int currentservers;
int equal = 1;
- // compare each name server against current name servers
if (numservers > MAXNS) numservers = MAXNS;
+
+ // Find out how many nameservers we had before.
+ currentservers = 0;
+ for (ns = cache_info->nameservers; *ns; ns++)
+ currentservers++;
+
+ if (currentservers != numservers)
+ return 0;
+
+ // Compare each name server against current name servers.
+ // TODO: this is incorrect if the list of current or previous nameservers
+ // contains duplicates. This does not really matter because the framework
+ // filters out duplicates, but we should probably fix it. It's also
+ // insensitive to the order of the nameservers; we should probably fix that
+ // too.
for (i = 0; i < numservers && equal; i++) {
ns = cache_info->nameservers;
equal = 0;