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