Age | Commit message (Collapse) | Author |
|
Some reordering of existing functions was necessary in order to provide
this functionality.
Signed-off-by: Daniel Mack <zonque@gmail.com>
|
|
Signed-off-by: Daniel Mack <zonque@gmail.com>
|
|
There are build 'ifdef L_ns_parse'.
Signed-off-by: Daniel Mack <zonque@gmail.com>
|
|
One uses the other, so add them in one go.
Signed-off-by: Daniel Mack <zonque@gmail.com>
|
|
Signed-off-by: Daniel Mack <zonque@gmail.com>
|
|
These are built '#ifdef L_ns_name'
Signed-off-by: Daniel Mack <zonque@gmail.com>
|
|
This patch introduces a new config directive
'UCLIBC_HAS_RESOLVER_SUPPORT' and adds the new symbols conditionally.
Signed-off-by: Daniel Mack <zonque@gmail.com>
|
|
While reading this file, I found it rather confusing to relate the
"endif" lines to their opening counter-part. This patch adds comments to
most of these lines to denote what the actually do.
Signed-off-by: Daniel Mack <zonque@gmail.com>
|
|
Thanks to Christian Krause <chkr plauener.de> for finding and fixing
this!
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
in bug 3637 Andrey Kovalev aka pxe.ru writes:
getaddrinfo does NOT add domain to query when receive SERVFAIL
RFC1035 7.2 suggests that
- If a resolver gets a server error or other bizarre response
from a name server, it should remove it from SLIST, and may
wish to schedule an immediate transmission to the next
candidate server address.
So let's try the next server upon SERVFAIL even if it's not strictly
required.
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Fix goof in previous commit.
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Timo Teräs writes:
The memory release loop is missing an obvious counter increment.
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Patch attached:
Fix a bug in offset calculations when parsing /etc/hosts in resolv.c.
Formerly a miscalculation meant that having found the correct line, the code
was trashing its own result data.
Signed-off-by: Philip Nye <philipn@engarts.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
The combination of
commit aab4df0fb51660300559f5f29290709db2f7bfee
resolv.c: add support for per thread res_state
commit cca45baf8353d1e338d232f5bdb2d1d6b357f1da
/etc/resolv.conf: support "timeout:n" and "attempts:n" options
.. and NPTL results in broken resolver in very annoying ways.
Now, it seems that most of the uclibc code does not work well
if res_state is TLS variable. Technically, this is the correct thing
to do since this gives proper per-thread resolving behavior, and
it also makes the config options overridable per thread. This
probably what apps expect as glibc does it too.
But alas, most places use _res to sync up static global variables
which results in breakage. It gets more or less randomly selected
which threads options get applied. Also in case of multiple servers
it looks like the retry logic is shared between all threads, e.g.
two concurrent resolutions can make other resolvers skip nameservers
due to shared "last_ns_num".
And finally the timeout/attempts commit breaks the accumulated stuff
horribly. What happens is:
1. multithreaded application startups, initializes resolver,
resolves things just fine
2. resolv.conf gets changed, application calls res_init
after res_init uclibc will call res_sync on all resolver functions
to refresh globals from the TLS variable _res
3. res_init was called only in one thread, so other thread's
_res contains all zeroes (yes, this is correct app usage:
res_init should be called only from one thread)
4. threads not calling res_init get broken resolver due to timeout
being set to zero
Now, one proper solution would be to:
1. make __open_nameservers return the configuration options
2. pass the config options struct to res_sync_func so it can do
the proper overrides from per-thread _res
3. remove the related globals and use locally config options from
__open_nameservers
But technically, the correct thing (as in glibc does this) is:
- res_init increases global "res_init timestamp"
- use _res (or pointer within there) for resolver retries etc.
get proper per-thread behavior
- resolvers functions call "maybe_init" which reinitialize the
TLS'ed resolver state (e.g. reload resolv.conf) if their res_init
timestamp is out dated
As an immediate emergency kludge fix, the following might do:
resolv: fix options handling for TLS _res
If _res is in TLS (NPTL), it might not get initialized. Assume
zeroes mean default values.
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
|
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
If there is a problem communicating with a nameserver the __dns_lookup()
function will not immediately advance to the next nameserver but instead
continue waiting until the timeout expires. This will cause a 30 second
delay even if no nameserver is configured in resolv.conf and no DNS is
running on localhost.
Signed-off-by: Ingo van Lil <inguin@gmx.de>
Acked-by: Roman I Khimov <khimov@altell.ru>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Fixes resolution of names with AAAA entries and gethostbyaddr issues.
Signed-off-by: Timo Teras <timo.teras@iki.fi>
Signed-off-by: Austin Foxley <austinf@cetoncorp.com>
|
|
See "Possible regression from timeout commit for resolv.conf" thread.
Also remove superfluous NULL check.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
|
If the type of the first answer does not match with the requested type,
then the dotted name was freed. If there are no further answers in
the DNS reply, this pointer was used later on in the same function.
Additionally it is passed to the caller, and caused strange
behaviour.
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
text data bss dec hex filename
- 1745 2 4 1751 6d7 libc/inet/dnslookup.o
+ 1760 2 4 1766 6e6 libc/inet/dnslookup.o
- 962 0 4 966 3c6 libc/inet/opennameservers.o
+ 1099 0 4 1103 44f libc/inet/opennameservers.o
- 462 4 472 938 3aa libc/inet/res_init.o
+ 454 4 468 926 39e libc/inet/res_init.o
- 870 0 0 870 366 libc/inet/res_query.o
+ 867 0 0 867 363 libc/inet/res_query.o
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
|
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
|
and wrap it in FALLBACK_TO_CONFIG_RESOLVCONF too. -24b
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
|
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
|
Signed-off-by: aldot <rep.dot.nop@gmail.com>
|
|
Signed-off-by: Austin Foxley <austinf@cetoncorp.com>
|
|
Collapse __length_dotted into __length_question (the sole user of it).
Make __length_question and __decode_answer static, they are used only once
by only one function.
Delete __decode_question, it is unused.
All in all, four less .o files in libc.a.
Document what __dns_lookup returns (length of the packet).
Propagate packet len into __decode_answer, __length_question, __decode_dotted
and check that we do not use data past the end of the packet.
Rename some variables/parameters to better names (len -> packet_len,
data -> packet etc).
Add mini-doc how DNS packets look like.
Style cleanup.
|
|
res_query: do not unconditionally set h_errno to TRY_AGAIN (closes bug 173).
cleanups: s/__dn_expand/dn_expand/, remove superfluous dn_expand declaration,
remove libc_hidden_proto junk
|
|
- add note about "/etc/config/" and the resolver code per se.
|
|
test/regex/tst-regex2.c: fix testcase to compile with just "gcc <file>.c"
|
|
|
|
if 256+ seconds passed since last read;
fix cases where we switch to next search domain instead of switching
to new server
optimize ip4/ip6 combined cases;
rewrite for(;;) loops so that it's clearer what's going on;
document buffer usage;
add TODOs and FIXMEs (for one, gethostbyname2 does not fill
->h_aliases field in the result AT ALL, and is iffy in general)
text data bss dec hex filename
- 245898 1403 11904 259205 3f485 libuClibc-0.9.30-svn.so
+ 245785 1403 11904 259092 3f414 libuClibc-0.9.30-svn.so
|
|
text data bss dec hex filename
- 130 156 0 286 11e libc/stdlib/random.o
+ 130 148 0 278 116 libc/stdlib/random.o
- 586 0 0 586 24a libc/stdlib/random_r.o
+ 570 0 0 570 23a libc/stdlib/random_r.o
|
|
text data bss dec hex filename
- 45 0 480 525 20d libc/inet/gethostbyname.o
+ 18 0 0 18 12 libc/inet/gethostbyname.o
|
|
Appears to build fine (several .configs tried)
|
|
|
|
|
|
|
|
delete some duplication in constants.
|
|
delete two stray files which compile to nothing
|
|
almost no code changes
|
|
|
|
in _res structure. Used by busybox's nslookup.
|
|
add largish comment explaining what we are doing, and why;
fixes to make IPv6-only resolver possible
|
|
|
|
in __dns_lookup.
|
|
configurable. we don't use most of it anyway.
|
|
|