Commit Graph

63 Commits

Author SHA1 Message Date
Jim Huang
87043f9c89 res_send: Avoid spurious close()s and (rare) failure
When looping over the current list of sockets we are connected to,
use getpeername() not getsockname() to find out who the remote
end is.  This change avoids spurious close() and (rare) failure.

Origin: ISC bug #18625 and fixed in libbind 6.0

Change-Id: I5e85f9ff4b98c237978e4bf4bd85ba0a90d768e6
2012-01-14 11:30:00 +08:00
Lorenzo Colitti
f432de2de7 Send both A and AAAA queries if all probes fail.
AI_ADDRCONFIG is currently implemented by trying to connect
to well-known addresses in order to see if IPv4 and/or IPv6
connectivity is available.

In some cases (e.g., walled gardens with no global
connectivity) both probes can fail. If this happens,
query for both IPv4 and IPv6 addresses instead of doing
nothing and failing the query.

Bug: 5284168
Change-Id: I4e3a69ea86fb6d839a6bd31236b98da81e5cbf45
2011-09-28 22:38:08 -07:00
Lorenzo Colitti
b82532d11a Revert "Use framework hints to determine dns query type."
Change Ife82a8d8 broke IPv6 on wifi. Change I4e3a69ea is
an alternate approach that does not require any framework
changes.

Bug: 5284168
Change-Id: Ib52614be3875a2ae2eaedd1be265f90e506eda41
2011-09-28 22:37:41 -07:00
Robert Greenwalt
8af58f0fd4 Use framework hints to determine dns query type.
Instead of checking for IPv4 or IPv6 connectivity, try using pid-specific
hints the framework has left for us.

bug:5284168
Change-Id: Id64d48db3900865a7d58ada8309870c63d6eab12
2011-09-22 11:43:06 -07:00
Robert Greenwalt
7f84da69f8 Add some logging of dns cache operations
Added info about what entries are getting flushed due to ttl or size limits.

Change-Id: I69fb70ce23b5b820f5f1a5738c0f1aa57b6a1127
2011-09-02 07:44:36 -07:00
Robert Greenwalt
777901424f resolved conflicts for merge of 9363d912 to honeycomb-plus-aosp
Change-Id: I555f5c10da9770feacdbece9fd77729d6151bfba
2011-07-26 16:18:52 -07:00
Robert Greenwalt
9363d91218 Add per-interface dns caches.
import of changes 22100 and 23138 from opensource.

Change-Id: I3ce86394323d269272aeb2bebeed4374f171a8cf
2011-07-26 12:59:50 -07:00
Robert Greenwalt
e4197d41bb am fed31359: am f6fcdb2e: am 28de3e59: Merge "Don\'t reset caches when dns props change."
* commit 'fed3135972f9725a44a7d9b3df728e311ac1a130':
  Don't reset caches when dns props change.
2011-07-20 17:20:03 -07:00
Mattias Falk
bad1686e1f Don't reset caches when dns props change.
This happens too frequently.  We should flush a per-interface cache
when it's dns server addrs changes.

Change-Id: I8a691c96ce9a775160ef55ddb8f755d649041583
2011-07-20 15:09:24 -07:00
Robert Greenwalt
8f88cbedc1 am e0a4b678: am cc32fbc3: Merge "Add support for a dns cache per interface"
* commit 'e0a4b67811981ab4c04c437b23c36ae42c444bce':
  Add support for a dns cache per interface
2011-06-27 14:14:07 -07:00
Mattias Falk
23d3e6b21b Add support for a dns cache per interface
Initial commit for dns cache per interface.
Added a type that holds a reference to a
cache and name of associated interface,
address of interface, name server(s)
associated with an interface etc.

New functions to set default interface,
address of name servers etc.

Change-Id: Ie991bc5592fd998409853d8bf77d7fe69035dac5
2011-06-08 15:39:29 +02:00
JP Abgrall
8a51237407 libc: enable IPTOS_MINCOST, fixup gethostbyaddr() proto.
Make netinet/ip.h have IPTOS_MINCOST which matches what
  kernel/common/linux/ip.h has to say.
Fixup gethostbyaddr() 1st arg to match what man has to say.

Change-Id: Iff9647d4a46ea88b1fc32163eb69bb9b27cdf370
2011-06-02 15:28:16 -07:00
JP Abgrall
f8d02d24ed libc: enable IPTOS_MINCOST, fixup gethostbyaddr() proto.
Make netinet/ip.h have IPTOS_MINCOST which matches what
  kernel/common/linux/ip.h has to say.
Fixup gethostbyaddr() 1st arg to match what man has to say.

Change-Id: Iff9647d4a46ea88b1fc32163eb69bb9b27cdf370
2011-05-18 16:53:23 -07:00
David 'Digit' Turner
b6cd6816d2 libc: Fix leak in the DNS thread-specific state.
NOTE: This is a back-port from the internal HC branch.

This patch fixes a leak that occurs when creating a new
thread-specific DNS resolver state object.

Essentially, each thread that calls gethostbyname() or getaddrinfo()
at least once will leak a small memory block. Another leak happens
anytime these functions are called after a change of the network
settings.

The leak is insignificant and hard to notice on typical programs.
However, netd tends to create one new thread for each DNS request
it processes, and quickly grows in size after a > 20 hours.

The same problem is seen in other system processes that tend to
create one thread per request too.

The leak occured becasue res_ninit() was called twice when creating
a new thread-specific DNS resolver state in _res_get_thread().

This function could not properly reset an existing thread and was
leaking a memory block.

The patch does two things:

- First, it fixes res_ninit() to prevent any leakage when resetting
  the state of a given res_state instance.

- Second, it modifies the _res_get_thread() implementation to
  make it more explicit, and avoid calling res_ninit() twice
  in a row on first-time creation.

Fix for Bug 4089945, and Bug 4090857

Change-Id: Icde1d4d1dfb9383efdbf38d0658ba915be77942e
2011-05-18 13:48:20 +02:00
Brian Carlstrom
be7f5da0bd Tracking change to dns proxy protocol
The gethostbyaddr code in system/netd now expects a string address
from inet_ntop, not raw bytes, in order to properly pass addresses
containing null and probably spaces and newlines characeters as well.

Bug: 4344448
Change-Id: I8ec0eab94d5b1d38e9269ba3afb2825e946f8df3
2011-04-29 16:43:16 -07:00
Brian Carlstrom
c5a3f7700b Tracking change to dns proxy protocol
The gethostbyaddr code in system/netd now expects a string address
from inet_ntop, not raw bytes, in order to properly pass addresses
containing null and probably spaces and newlines characeters as well.

Bug: 4344448
git cherry-pick -e c13fa640ee
2011-04-29 10:02:48 -07:00
Brian Carlstrom
c13fa640ee Tracking change to dns proxy protocol
The gethostbyaddr code in system/netd now expects a string address
from inet_ntop, not raw bytes, in order to properly pass addresses
containing null and probably spaces and newlines characeters as well.

Bug: 4344448
Change-Id: I935abbbe522d96b64a5f975c7937e3aed3f7b335
2011-04-27 11:55:43 -07:00
Brad Fitzpatrick
a34694d394 am 09db590d: am 9b6e8af6: am 3ef36b21: Merge "Use system property to set dns cache size"
* commit '09db590d56ff2b568ea1a0ce265810697f0e0e92':
  Use system property to set dns cache size
2011-04-12 13:28:03 -07:00
Brad Fitzpatrick
09db590d56 am 9b6e8af6: am 3ef36b21: Merge "Use system property to set dns cache size"
* commit '9b6e8af6994fd41f468161dec797354bb7778673':
  Use system property to set dns cache size
2011-04-12 13:18:15 -07:00
Brad Fitzpatrick
3ef36b2115 Merge "Use system property to set dns cache size" 2011-04-11 09:42:30 -07:00
David 'Digit' Turner
02be15039a am aa8f50b4: am 6d46b099: am 2f169162: Merge "libc: Fix leak in the DNS thread-specific state." into honeycomb-mr1
* commit 'aa8f50b404ab0b2c78833387551800fa8448afcd':
  libc: Fix leak in the DNS thread-specific state.
2011-03-25 01:52:17 -07:00
David 'Digit' Turner
6d46b09954 am 2f169162: Merge "libc: Fix leak in the DNS thread-specific state." into honeycomb-mr1
* commit '2f169162462e44d7aa6443e682b15fc756c2e4ad':
  libc: Fix leak in the DNS thread-specific state.
2011-03-25 01:47:43 -07:00
Carl Shapiro
2cc2b2be69 Add some missing includes.
Change-Id: Ieec623c06bc32ec78334f628af25b00c2bccd2e7
2011-03-21 20:01:03 -07:00
David 'Digit' Turner
4661fda2e5 libc: Fix leak in the DNS thread-specific state.
This patch fixes a leak that occurs when creating a new
thread-specific DNS resolver state object.

Essentially, each thread that calls gethostbyname() or getaddrinfo()
at least once will leak a small memory block. Another leak happens
anytime these functions are called after a change of the network
settings.

The leak is insignificant and hard to notice on typical programs.
However, netd tends to create one new thread for each DNS request
it processes, and quickly grows in size after a > 20 hours.

The same problem is seen in other system processes that tend to
create one thread per request too.

The leak occured becasue res_ninit() was called twice when creating
a new thread-specific DNS resolver state in _res_get_thread().

This function could not properly reset an existing thread and was
leaking a memory block.

The patch does two things:

- First, it fixes res_ninit() to prevent any leakage when resetting
  the state of a given res_state instance.

- Second, it modifies the _res_get_thread() implementation to
  make it more explicit, and avoid calling res_ninit() twice
  in a row on first-time creation.

Fix for Bug 4089945, and Bug 4090857

Change-Id: Ie4831a8dbe82be8f07fce5ddd1d36bf95994f836
2011-03-18 18:08:08 +01:00
Mattias Falk
0ee092fb23 Convert cname lenght before use
The length of the cname is sent in big-endian
order. Thus, it has to be converted before used
in android_getaddrinfo_proxy

Change-Id: I1a0cc12780c47f7493fcf06f690515829f88c01e
2011-03-01 12:52:10 -08:00
Mattias Falk
149f7dfe04 Proxy getnameinfo through netd
Proxy the parts of getnameinfo that utilize
the dns cache through netd.

Change-Id: I1d57c451ea6b179c34828cf57a4182b262674003
2011-02-22 08:22:16 +01:00
Mattias Falk
066ecc8f4a Convert cname lenght before use
The length of the cname is sent in big-endian
order. Thus, it has to be converted before used
in android_getaddrinfo_proxy

Change-Id: I1a0cc12780c47f7493fcf06f690515829f88c01e
2011-02-15 08:44:20 +01:00
Mattias Falk
3a4910c616 Use system property to set dns cache size
Use system property ro.net.dns_cache_size to set
the size of the cache. If the system property
is not set the default cache size is defined by
CONFIG_MAX_ENTRIES.

The number of entries in the hash table will be equal
to the number of max entries allowed in the cache.

Change-Id: I77d69d7c178937fa483d0b40512483ad29232d28
2011-02-14 12:41:11 +01:00
Mattias Falk
3e0c5102e6 Add time-to-live (TTL) support to resolver cache
Use the the TTL of the answer as the time a query
shall remain in the resolver cache.

Added some debugging support as well, i.e.
parse answer and print a la dig.

Change-Id: I724d3392245032592f1912f3ca7a81a8987ebbac
2011-02-02 16:40:01 +01:00
David Turner
f03e2d3f31 am 5d45fa40: am 2081fda6: Merge "Only look up A records if the system has IPv4." into gingerbread
* commit '5d45fa4049d9ba03c0d922ece18d1d2dda119dc7':
  Only look up A records if the system has IPv4.
2011-01-21 15:50:23 -08:00
David Turner
5d45fa4049 am 2081fda6: Merge "Only look up A records if the system has IPv4." into gingerbread
* commit '2081fda69a68505c914324797400b1b798516904':
  Only look up A records if the system has IPv4.
2011-01-18 17:34:33 -08:00
David Turner
2081fda69a Merge "Only look up A records if the system has IPv4." into gingerbread 2011-01-18 17:32:02 -08:00
Steinar H. Gunderson
76b6f084ab am 2be18508: am 2e23e292: Backport (simple cherry-pick) d33019030c to gingerbread.
* commit '2be18508f349b74b60b09e1b1118d879afb5928c':
  Backport (simple cherry-pick) d33019030c to gingerbread.
2011-01-17 12:19:01 -08:00
Steinar H. Gunderson
2be18508f3 am 2e23e292: Backport (simple cherry-pick) d33019030c to gingerbread.
* commit '2e23e29245aa42d0f9419187c94e72dba3888eef':
  Backport (simple cherry-pick) d33019030c to gingerbread.
2011-01-17 12:15:45 -08:00
Steinar H. Gunderson
42e449e972 am a798b9f0: Backport (simple cherry-pick) d1624add2b to gingerbread.
* commit 'a798b9f0e171643b0bc7bbf79f14cb018689f715':
  Backport (simple cherry-pick) d1624add2b to gingerbread.
2011-01-17 12:15:41 -08:00
Lorenzo Colitti
ba96e30fa0 Only look up A records if the system has IPv4.
getaddrinfo only asks DNS for IPv6 addresses if the system
has IPv6 connectivity, but always asks for IPv4 addresses.
Don't ask for IPv4 addresses if there is no IPv4
connectivity.

Change-Id: Iefe9fcb006fabe60b4b11dd4653a7c4a406506f4
2011-01-15 19:02:58 -08:00
Steinar H. Gunderson
2e23e29245 Backport (simple cherry-pick) d33019030c
to gingerbread.

Implement RFC3484 policy table changes from draft-ietf-6man-rfc3484-revise-01.

The changes in a nutshell:

 - Handle v4-mapped as different from v4-compat (this was probably
   an existing bug in our code).
 - Add policy entries for ULA, above most everything else.
 - Put v4-compat, old-style IPv6 site-local and 6bone addresses
   way down in the preference table.

The rest is just shuffling numbers around (no actual changes to
priority).
2011-01-14 21:41:18 +01:00
Steinar H. Gunderson
a798b9f0e1 Backport (simple cherry-pick) d1624add2b
to gingerbread.

Don't treat private IPv4 addresses as being in a non-global scope. The effect of this change is essentially to prefer NATed IPv4 over 6to4.
2011-01-14 21:40:34 +01:00
Steinar H. Gunderson
d1624add2b Don't treat private IPv4 addresses as being in a non-global scope. The effect of this change is essentially to prefer NATed IPv4 over 6to4.
Change-Id: I53a8613ca9eb61cac0bf18f0b5f98a2d35ab9c50
2010-12-20 11:15:33 +01:00
Brad Fitzpatrick
7858564582 Don't proxy getaddrinfo when net.dns1.[MYPID] is set.
Part of on-going DNS proxy/cache work.

Bug: 1146676
Change-Id: I5e6028169c81c2223efc34c3b57e348c44f26d26
2010-10-28 13:22:20 -07:00
Brad Fitzpatrick
a1dbf0b453 DNS proxy: the start. proxies getaddrinfo calls.
Will also need to do gethostinfo, but that's probably about it.

It was cleaner to do it at this level, rather than speaking in terms
of DNS packets.

Change-Id: I047cc459979ffb0170a3eb0d432a7e827fb71c26
2010-10-28 11:31:22 -07:00
Jean-Baptiste Queru
aeb41ec103 am b2061a30: Merge "resolv: make internal symbols static/hidden"
Merge commit 'b2061a30da29ee531c16862a5be3566e3b860839' into gingerbread-plus-aosp

* commit 'b2061a30da29ee531c16862a5be3566e3b860839':
  resolv: make internal symbols static/hidden
2010-10-20 19:10:09 -07:00
Jim Huang
7cc5666d94 resolv: make internal symbols static/hidden
Change-Id: I988b83613e6252c0cc961555e81c10f856a38b37
2010-10-15 02:10:29 +08:00
Jean-Baptiste Queru
a9b706bd2b am 66ad3429: Merge "gethnamaddr: make helper functions static"
Merge commit '66ad34293b84d979cae5ffda4b3b90b746127ebb' into gingerbread-plus-aosp

* commit '66ad34293b84d979cae5ffda4b3b90b746127ebb':
  gethnamaddr: make helper functions static
2010-10-10 18:14:58 -07:00
Jim Huang
e5c35e075f gethnamaddr: make helper functions static
In order not to conflict with the symbols defined in file
libc/netbsd/getaddrinfo.c, this patch makes the internal/helper
functions static.

Change-Id: I0f85599e0b4ce0a637d005ff1680e1805dec4380
2010-09-27 23:40:55 +08:00
David 'Digit' Turner
50ace4fec5 Remove compiler warnings when building Bionic.
Also add missing declarations to misc. functions.
Fix clearerr() implementation (previous was broken).
Handle feature test macros like _POSIX_C_SOURCE properly.

Change-Id: Icdc973a6b9d550a166fc2545f727ea837fe800c4
2010-06-22 17:51:41 -07:00
Kenny Root
7e0bfb511e Fix comparison of IPv6 prefixes
Typo assigned prefixlen1 twice instead of to the two different variables
for comparison and difference computation.

Change-Id: I6631b8269ca6aae264c8d7d414127b756838df96
2010-03-24 18:07:26 -07:00
David 'Digit' Turner
d378c68d74 Fix spurious DNS lookups in the C library.
The problem was that the 'defdname' field of res_state structure
was not properly initialized in __res_vinit(). This field is used
to store the default domain name, which is normally build from
calling gethostname() (see line 549 of res_init.c).

Unfortunately, in the typical Android case, gethostname() returns
an error (the hostname is configured) and a random stack string is
used later to build the DNS search list (see lines 556+ in res_init.c)

For the sake of illustration, let's say the search list is set to
a random value like 'xWLK'.

The end result is that when trying to result an unknown domain name
(e.g. 'www.ptn'), the query fails then the resolver tries to make a
new query with the DNS search list path(s) appended (e.g. 'www.ptn.xWLK').

The patch simply initializes 'defdname' to an empty string to avoid
this when the net.dns.search system property is not set.

Also contains whitespace/formatting fixes
2010-03-08 15:22:13 -08:00
Steinar H. Gunderson
9ab75d4cc8 Implement support for RFC 3484 (address selection/sorting) in bionic. (The
Java changes required not to mess up the ordering from bionic will arrive in a
later commit.) In particular, this will give us more correct behavior when on a
6to4 network, in that IPv4 will usually be preferred over 6to4.

Most of RFC 3484 is implemented -- what's not is rule 3 (avoid deprecated
addresses), 4 (prefer home addresses) and 7 (prefer native transport) as they
require low-level access to the kernel routing table via netlink. (glibc also
started out this way, and these rules are primarily useful in pretty obscure
circumstances, so we should be fine for the time being.)

Also, rule 9 (use longest matching prefix) has been modified so it does not try
to sort IPv4 addresses; given current IPv4 addressing practice these rules are
pretty much meaningless. Finally, I've added support for Teredo as a separate
label, with slightly lower preference than 6to4. (Vista puts the preference
below IPv4 by default. glibc puts the preference together with non-tunneled
IPv6.)

Note that this patch removes support for the "sortlist" directive in
resolv.conf; I've never seen it in actual use, it's irrelevant for Android
(since we don't use resolv.conf anyway), and it's not clear how it would be
implemented alongside RFC 3484.
2010-02-24 11:49:17 +01:00
Jean-Baptiste Queru
cdeb4c8afa merge from open-source master 2009-09-15 07:51:39 -07:00