----- Original Message ----- 
From: "Corinna Vinschen"
To: <cygwin-patches>
Sent: Thursday, February 26, 2009 11:05 AM
Subject: Re: [Patch] gethostbyname2


| On Feb 26 10:29, Pierre A. Humblet wrote:
| > At 04:52 AM 2/26/2009, Corinna Vinschen wrote:
| > | >On Feb 25 23:03, Pierre A. Humblet wrote:
| > | > > I tried to compile Exim with IPv6 enabled and Cygwin 1.7, but it needs
| > | > > gethostbyname2.
| > | > > Here is an implementation of that function.
| > | > > In attachment I am including the same patch as well as a short test 
function.
| > | > >
| > | >
| > | >This is way cool!  I have this function on my TODO list for ages.
| > | >
| > | >But there's a problem.  You're using DnsQuery_A directly, but this
| > | >function only exists since Win2K.  Would it be a big problem to rework
| > | >the function to use the resolver functions instead?  They are part of
| > | >Cygwin now anyway and that would abstract gethostbyname2 from the
| > | >underlying OS capabilities.
| >
| > I was afraid of that. Using res_query was my initial thought, but I 
realized that when using 
the
| > Windows resolver I would undo in gethostbyname2 all the work done in 
minires.
|
| I'm sorry, but I really don't understand what you mean.  How are you
| undoing work in minires when using minires in gethostbyname2?!?  Why
| isn't it just possible to call res_query from there?

It is possible of course. But the sequence would be the following
1) External DNS server sends compressed records to Windows resolver
2) Windows resolver uncompresses the records and puts them in nice structures
3) Minires takes the nice structures and recompresses them to wire format
4) Gethostbyname2 uncompresses them into nice structures
    then 5) calls dup_ent,  which copies them in the tls.locals
I would like to streamline the process:
- With Windows resolver: 1, 2, 5  (that's the current patch, ~20% of  which is
         cut&pasted from minires and could be restructured to use a common 
function)
- Without: Straight fom wire format records to the tls.locals memory block
                 Or: have a routine 2a) in minires that replaces 2. Then it 
would be 1, 2a, 5.

| > I am still fighting one issue with Windows. On XP, when using the native 
gethostbyname
| > I can resolve computers on my local net (through NetBIOS or such). But I 
can't get
| > them with DnsQuery, except my own computer, despite what I think the doc 
says.
| > Any insight?
|
| I never used the DnsQuery functions myself.  There's a DnsQuery flag
| called DNS_QUERY_NO_NETBT documented in MSDN, maybe there's something
| switched off on your machine so that's the default?

Perhaps. But where is it or how does the native gethostbyname turn it on?
To answer Dave, "DNS Client" service is running, I have never experimented 
turning it off.

Pierre 

Reply via email to