getaddrinfo(3): result from gethostby* will be broken if we call it again.
deep-copy them. we have sa_len so configure them.
getnameinfo(3): we have sa_len so configure them.
getnameinfo(3) globs ai_socktype and ai_protocol correctly.
KAME scopeid extension is implemented.
(draft-ietf-ipngwg-scopedaddr-format-00.txt)
bump up shlib minor
(may not be necessary, but rather big difference in behavior - especially
ai_flags)
descriptors against -1 (as appropriate).
* add actual checks which to detect stuff that would trigger_DIAGASSERT(),
and attempt to return a sane error condition.
* knf some code
* remove some `register' decls.
the first two items result in the addition of code similar to the
following in various functions:
_DIAGASSERT(path != NULL)
#ifdef _DIAGNOSTIC
if (path == NULL) {
errno = EFAULT;
return (-1);
}
#endif
i.e. do not make query for IPv6 addresses, when running on non-IPv6 kernel,
or, do not query for IPv4 address on IPv6-only kernel :-)
This kind of behavior is not very well documented in RFC2553. This
may violate the spec.
- on EAI_AGAIN, only retry 3 times (3 is a magic number). Previous code
made retries forever. This solves situation where name server is wrongly
configured and nameserver:53 returns icmp port unreach.
The only proper fix for all getaddrinfo() related twists would be to
implement getipnodebyname() and get rid of wacky get_addr().
We need to contribute bind8 development for this.
/etc/nsswitch.conf.
This was because of two reasons:
- /etc/hosts lookup code damaged some of internal
state used by gethostbyname2().
- getaddrinfo() was not persistent enough against errors.
Sorry for the delay, and hope this fix all the following PRs
(I checked in my environment immitating those PRs and it worked for me)
PR: 7901, 7912, 7921
non-supported AF, try the next nameserver instead of abort.
This helps situations like:
- you write IPv6 nameserver into /etc/resolv.conf and
- run non-IPv6 kernel
argument names to the function. e.g, if `const char *servname' is an argument
name, keep using "servname invalid [...]" instead of "Servname invalid [...]"
get{addr,name} info are implemented to have as little impact to existing
resolver code as possible, so they are NOT the optimal implementation.
They are at this moment not very thread safe (as they call
gethostby{name,addr}).
(shlib minor version)++, as new interfaces are added.
TODO: getipnodeby{name,addr} - which needs total reimplementation of
gethostby{name,addr}.
upgrade rcmd.c for multiple af support (needed for IPv6-ready rsh/rlogin)