Hi David,

> > > > nobody said that our DNS proxy supports TCP. We are doing UDP only.
> > > 
> > > Can you show me how to make the example lookup I demonstrated actually
> > > work, without editing /etc/resolv.conf to point to a working nameserver?
> > 
> > problem here is that the DNS response you are receiving is too big for
> > UDP DNS protocol. So it retries over TCP. And the proxy does not support
> > TCP right now. So we have to add DNS over TCP support to the proxy.
> 
> We might yet conclude that, but for now it looks like EDNS0 support
> might suffice:
> 
> diff --git a/src/resolver.c b/src/resolver.c
> index 3c78d21..e87b23b 100644
> --- a/src/resolver.c
> +++ b/src/resolver.c
> @@ -258,7 +258,8 @@ static int resolvfile_append(const char *interface, const 
> char *domain,
>       err = ftruncate(fd, 0);
>  
>       cmd = g_strdup_printf("# Generated by Connection Manager\n"
> -                                             "nameserver %s\n", server);
> +                           "options edns0\n"
> +                           "nameserver %s\n", server);
>  
>       len = write(fd, cmd, strlen(cmd));

we are using EDNS0 by default now. If it does indeed break at some
point, I am going to add a configuration file that allows us to disable
it, but from what I read up on EDNS0, it should do it job just fine with
most DNS servers.

> This stops it from fucking up the outbound queries when it qualifies
> them with the search domain (you were assuming there were no additional
> records _and_ that it was an IN A query, which was fairly broken even in
> the absence of EDNS0).
> 
> --- plugins/dnsproxy.c~       2009-12-09 08:04:13.000000000 +0000
> +++ plugins/dnsproxy.c        2009-12-09 09:14:00.000000000 +0000
> @@ -578,10 +578,10 @@ static gboolean listener_event(GIOChanne
>                       if (altlen < 0)
>                               continue;
>  
> -                     alt[altlen + 12] = 0x00;
> -                     alt[altlen + 13] = 0x01;
> -                     alt[altlen + 14] = 0x00;
> -                     alt[altlen + 15] = 0x01;
> +                     altlen += 12;
> +                     
> +                     memcpy(alt + altlen, buf + altlen - 
> strlen(data->domain) - 1,
> +                            len - altlen + strlen(data->domain) + 1);
>  
>                       err = send(sk, alt, altlen + 12 + 4, 0);

I removed the + 12 in the send command since you did add it earlier
already.

Regards

Marcel


_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to