res_send() doesn't work with osquery enabled
Pierre A. Humblet
phumblet@phumblet.no-ip.org
Thu Aug 26 17:17:00 GMT 2010
----- Original Message -----
From: "Corinna Vinschen"
To: <cygwin-patches>
Sent: Thursday, August 26, 2010 12:38
| Pierre, would you mind to take a look?
|
| On Aug 26 19:07, pseudo@egg6.net wrote:
| > Currently res_init() checks for availability of the native windows
| > function DnsQuery_A. If the function is found, it's preferred over the
| > cygwin implementation and res_query is set up to use it.
| > As DnsQuery_A finds the configured name servers itself, the current code
| > assumes we can avoid loading the dns server list with GetNetworkParams().
| >
| > However, the assumption that everybody would use res_query is wrong. Some
| > programs may use res_mkquery() and res_send() or may only read the list of
| > servers from _res.nsaddr_list and send/receive the queries/replies
| > themselves. res_send() also relies on nsaddr_list.
It's true that the behavior described above is legitimate, even if nobody had ever
requested it. If people want to access nsaddr_list after calling res_ninit, loading
iphlpapi.dll every time (as the patch does) is unavoidable.
The other change has res_nsend return an error if no server can be found.
Alternatively the error could be reported by res_ninit, by removing the second
condition in
if (statp->nscount == 0 && !statp->os_query) {
errno = ENONET;
statp->res_h_errno = NETDB_INTERNAL;
Hypothetically this could affect some installations where iphlpapi doesn't report any
servers although the Windows resolver can find a server (but I don't see how this
could happen), so it's safer to proceed as in the patch.
However the patch should send errno to ENONET and set res_h_errno to
NETDB_INTERNAL
Except for the previous comment, I am fine with the patch.
Pierre
More information about the Cygwin-patches
mailing list