summaryrefslogtreecommitdiff
path: root/src/network/__dns.c
AgeCommit message (Collapse)AuthorLines
2013-11-30support mix of IPv4 and v6 nameservers in resolv.confRich Felker-5/+31
a v6 socket will only be used if there is at least one v6 nameserver address. if the kernel lacks v6 support, the code will fall back to using a v4 socket and requests to v6 servers will silently fail. when using a v6 socket, v4 addresses are converted to v4-mapped form and setsockopt is used to ensure that the v6 socket can accept both v4 and v6 traffic (this is on-by-default on Linux but the default is configurable in /proc and so it needs to be set explicitly on the socket level). this scheme avoids increasing resource usage during lookups and allows the existing network io loop to be used without modification. previously, nameservers whose address family did not match the address family of the first-listed nameserver were simply ignored. prior to recent __ipparse fixes, they were not ignored but erroneously parsed.
2013-08-14de-duplicate dn_expand, fix return value and signature, clean upRich Felker-27/+3
the duplicate code in dn_expand and its incorrect return values are both results of the history of the code: the version in __dns.c was originally written with no awareness of the legacy resolver API, and was later copy-and-paste duplicated to provide the legacy API. this commit is the first of a series that will restructure the internal dns code to share as much code as possible with the legacy resolver API functions. I have also removed the loop detection logic, since the output buffer length limit naturally prevents loops. in order to avoid long runtime when encountering a loop if the caller provided a ridiculously long buffer, the caller-provided length is clamped at the maximum dns name length.
2012-09-29fix some more O_CLOEXEC/SOCK_CLOEXEC issuesRich Felker-3/+1
2012-04-01improve name lookup performance in corner casesRich Felker-1/+1
the buffer in getaddrinfo really only matters when /etc/hosts is huge, but in that case, the huge number of syscalls resulting from a tiny buffer would seriously impact the performance of every name lookup. the buffer in __dns.c has also been enlarged a bit so that typical resolv.conf files will fit fully in the buffer. there's no need to make it so large as to dominate the syscall overhead for large files, because resolv.conf should never be large.
2012-02-23fix for previous incorrect fix of cancellation in dns lookupsRich Felker-3/+4
uninitialized file descriptor was being closed on return, causing stdin to be closed in many cases.
2012-02-11fix default nameserver when resolv.conf doesn't existRich Felker-1/+2
2012-02-11fix illegal goto out of cleanup context in dns lookupsRich Felker-3/+3
2011-09-21make dns lookups (and thus getaddrinfo) cancellableRich Felker-4/+11
2011-09-21use poll rather than select in dns lookups (also clock_gettime)Rich Felker-12/+10
if the file descriptor resource limit has been increased past FD_SETSIZE, this is actually a security issue; we could write past the end of the fd_set object. using poll makes it a non-issue, and simplifies the code at the same time. also, use clock_gettime instead of gettimeofday, for reduced bloat and better entropy.
2011-04-18dns lookups: protect against cancellation and fix incorrect error codesRich Felker-4/+10
2011-04-08fix broken dns response parsing code that made most ipv6 lookups failRich Felker-4/+6
2011-04-07fix uninitialized variables in dns lookup codeRich Felker-2/+2
2011-02-14another pointer signedness fixRich Felker-1/+1
2011-02-12initial check-in, version 0.5.0v0.5.0Rich Felker-0/+267