Commit Graph
31 Commits
Author SHA1 Message Date
Rich Felker 4f346b08b3 improve name lookup performance in corner cases
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-04-01 23:22:16 -04:00
Rich Felker 56ddcc7208 fix for previous incorrect fix of cancellation in dns lookups
uninitialized file descriptor was being closed on return, causing
stdin to be closed in many cases.
2012-02-23 13:07:20 -05:00
Rich Felker 88d84b7cc8 fix default nameserver when resolv.conf doesn't exist 2012-02-11 00:06:32 -05:00
Rich Felker f42bad9ccb fix illegal goto out of cleanup context in dns lookups 2012-02-11 00:05:58 -05:00
Rich Felker 12d547b262 make dns lookups (and thus getaddrinfo) cancellable 2011-09-21 23:27:17 -04:00
Rich Felker bf027ca5e0 use poll rather than select in dns lookups (also clock_gettime)
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-09-21 23:17:45 -04:00
Rich Felker 28af39fe42 remove some stray trailing space characters 2011-09-13 09:53:41 -04:00
Rich Felker fc0ecd35d8 implement if_nameindex and if_freenameindex 2011-08-03 12:13:13 -04:00
Rich Felker 88798393ca fix wrong messages in gai_strerror
i had missed the fact that a couple values were unassigned...
2011-08-01 00:31:15 -04:00
Rich Felker f4e8e64b82 port numbers should always be interpreted as decimal
per POSIX and RFC 3493:

If the specified address family is AF_INET, AF_INET6, or AF_UNSPEC,
the service can be specified as a string specifying a decimal port
number.

021 is a valid decimal number, therefore, interpreting it as octal
seems to be non-conformant.
2011-08-01 00:11:25 -04:00
Rich Felker c3c5e88c31 "implement" getnetbyaddr and getnetbyname
these are useless legacy functions but some old software contains
cruft that expects them to exist...
2011-07-12 02:52:06 -04:00
Rich Felker e936e4612f res_search symbol, aliased to res_query for now (better than nothing) 2011-06-30 23:12:07 -04:00
Rich Felker 3486365e95 fix bug in ipv6 parsing that prevented parsing a lone "::" 2011-04-25 17:49:21 -04:00
Rich Felker 34d81974d3 ipv6 parsing code (formerly dummied-out) 2011-04-25 17:04:40 -04:00
Rich Felker 31f014e0a7 fix bogus return values for inet_pton 2011-04-21 16:57:00 -04:00
Rich Felker f1ac8a28d8 disallow blank strings as service or host name 2011-04-20 20:02:35 -04:00
Rich Felker d4b5d6e981 fix bugs in ipv4 parsing 2011-04-20 20:00:59 -04:00
Rich Felker 43ee4df338 dns lookups: protect against cancellation and fix incorrect error codes 2011-04-18 21:35:14 -04:00
Rich Felker feee98903c overhaul pthread cancellation
this patch improves the correctness, simplicity, and size of
cancellation-related code. modulo any small errors, it should now be
completely conformant, safe, and resource-leak free.

the notion of entering and exiting cancellation-point context has been
completely eliminated and replaced with alternative syscall assembly
code for cancellable syscalls. the assembly is responsible for setting
up execution context information (stack pointer and address of the
syscall instruction) which the cancellation signal handler can use to
determine whether the interrupted code was in a cancellable state.

these changes eliminate race conditions in the previous generation of
cancellation handling code (whereby a cancellation request received
just prior to the syscall would not be processed, leaving the syscall
to block, potentially indefinitely), and remedy an issue where
non-cancellable syscalls made from signal handlers became cancellable
if the signal handler interrupted a cancellation point.

x86_64 asm is untested and may need a second try to get it right.
2011-04-17 11:43:03 -04:00
Rich Felker c89862660b optimize ntohl etc. in terms of bswap functions
we can do this without violating the namespace now that they are
macros/inline functions rather than extern functions. the motivation
is that gcc was generating giant, slow, horrible code for the old
functions, and now generates a single byte-swapping instruction.
2011-04-12 13:13:27 -04:00
Rich Felker 7168790763 workaround broken msghdr struct on 64bit linux
POSIX clearly specifies the type of msg_iovlen and msg_controllen, and
Linux ignores it and makes them both size_t instead. to work around
this we add padding (instead of just using the wrong types like glibc
does), but we also need to patch-up the struct before passing it to
the kernel in case the caller did not zero-fill it.

if i could trust the kernel to just ignore the upper 32 bits, this
would not be necessary, but i don't think it will ignore them...
2011-04-08 09:24:19 -04:00
Rich Felker 5b8d81f706 fix ipv6 address printing: 2001 appeared as 201, etc. 2011-04-08 09:21:51 -04:00
Rich Felker d104c1f7e2 fix broken dns response parsing code that made most ipv6 lookups fail 2011-04-08 08:49:28 -04:00
Rich Felker e2cc0bee11 return the requested string as the "canonical name" for numeric addresses
previously NULL was returned in ai_canonname, resulting in crashes in
some callers. this behavior was incorrect. note however that the new
behavior differs from glibc, which performs reverse dns lookups. POSIX
is very clear that a reverse DNS lookup must not be performed for
numeric addresses.
2011-04-08 08:14:28 -04:00
Rich Felker d4fbebe18d fix uninitialized variables in dns lookup code 2011-04-07 23:18:12 -04:00
Rich Felker 97d0988fd8 add _res (__res_state()) dummy 2011-04-06 15:47:26 -04:00
Rich Felker 92b2eb8d03 implement if_indextoname and if_nametoindex functions 2011-04-05 13:20:08 -04:00
Rich Felker 9ae8d5fc71 fix all implicit conversion between signed/unsigned pointers
sadly the C language does not specify any such implicit conversion, so
this is not a matter of just fixing warnings (as gcc treats it) but
actual errors. i would like to revisit a number of these changes and
possibly revise the types used to reduce the number of casts required.
2011-03-25 16:34:03 -04:00
Rich Felker 03a2f3e48c cleanup socketcall syscall interface to ease porting to sane(r) archs 2011-02-15 04:40:40 -05:00
Rich Felker 6fbf8bfd75 another pointer signedness fix 2011-02-14 19:40:20 -05:00
Rich Felker 0b44a0315b initial check-in, version 0.5.0 2011-02-12 00:22:29 -05:00