On Mon, Sep 16, 2013 at 21:23, Kapetanakis Giannis wrote:

> The following diff fixes the problem and the program works in current.
> The program is bahamut ircd and I managed to make it work up to 5.3
> without this.
> In current it's broken due to resolver errors.
> 
> Don't know if you have a reason to not populate _res.nsaddr_list in the
> new res_init() from asr interface.

I think a patch like this should go in. It's just easier to be
compatible with the stupid old _res interface for now. Maybe later we
can push programs to use the builtin async resolver.

In the mean time, some feedback on the diff.

> _res.nscount = ac->ac_nscount;
> +             for (i = 0; i < ac->ac_nscount; i++) {
> +                     _res.nsaddr_list[i] = *((struct sockaddr_in *) 
> ac->ac_ns[i]);
> +             }
> +

I think this will give unexpected results if ipv6 resolvers are
configured. You'll notice the asr code is allocating possibly varying
amounts of memory. I think you're going to want to memcpy the correct
length.

        memcpy(&_res.nsaddr_list[i], ac->ac_ns[i], ac->ac_ns[i]->sa_len);

Reply via email to