Thanks, please see a few quick reactions of mine inline ...
Paul

> Op 3 jun. 2017, om 14:18 heeft Hans Dedecker <dedec...@gmail.com> het 
> volgende geschreven:
> 
> On Thu, Jun 1, 2017 at 12:00 PM, Paul Oranje <p...@xs4all.nl> wrote:
>> Hello Hans,
>> 
>> A new version of this small patch is worked on -overlooked your previous 
>> comment and have lately been busy with other stuff-, but after studying the 
>> code a little more I’ve a few questions. The intended patch changes code 
>> that was added with commit a35f9bbc43c3da06eed042f80dc09e8c1da681b4 
>> (dnsmasq: Multiple dnsmasq instances support) that was authored by you.
>> 
>> 
>> The routines dnsmasq_start() and dnsmasq_stop() contain a guard on writing 
>> and resetting /tmp/resolv.conf:
>>        [ "$resolvfile" = "/tmp/resolv.conf.auto” ] &&
>> 
>> As explained in FS#785, the guard test fails when $noresolv is true and 
>> $resolvfile has not been explicitly configured to its default 
>> "/tmp/resolv.conf.auto", causing /tmp/resolv.conf to remain a soft link to 
>> /tmp/resolv.conf.auto (the WAN its DNS).
>> 
>> The routine dnsmasq_stop() the guard is commented with
>>        #relink /tmp/resolve.conf only for main instance
>> 
>> This suggests that only for the main (first ?) instance /tmp/resolv.conf 
>> would be handled, which makes sense, but the test to accomplish that seems 
>> wrong.
>> 
>> Q1:
>> What is the supposed relation between dnsmasq instance and the value of the 
>> value/setting of resolvfile ?
> The DNS servers learned on the wan interface(s) by netifd are written
> in /tmp/resolv.conf.auto. By default a dnsmasq instance uses
> /tmp/resolv.conf.auto as resolver file unless configured otherwise.
Indeed and whether dnsmasq uses the (whatever) resolvfile is governed by the 
noresolv parameter; these two parameters are orthogonal.
The init script though skips setting resolvfile when noresolv is true.

> Using /tmp/rsolv.conf.auto as resolver file triggers logic to rewrite 
> /tmp/resolv.conf
Why would the question whether local DNS resolution is handled by the DNS 
available on WAN interface be determined by this specific **value** of 
$resolvfile (and irrespective of the actual existence of that file) ?

Also the above question (Q1) is about the relation with the dnsmasq 
**instance**.
Could you please share your thoughts on the relation behind first instance and 
the value of $resolvfile ?


>> A fix I considered is to omit this guard altogether (so different from the 
>> patch previously submitted), so that the local DNS service will allways be 
>> used for local (router) DNS resolution when dnsmasq is started; at stop of 
>> dnsmasq the local resolution would return to use $resolvfile. Obviously 
>> doing so in dnsmasq_start() and dnsmasq_stop() routines that start or stop 
>> an instance would be the wrong place to do so, since that code will be 
>> called for each instance. These routines ar spawned from the start_service() 
>> and stop_service() routines that do iterate on the instances.
>> 
>> Q2:
>> Would placement of the /tmp/resolv.conf handling not be better placed in the 
>> start_ and stop_service() routines or, be guarded by a better test in the 
>> dnsmasq_start() and _stop() routines ? In other words: what would be a 
>> correct test ?
> we could move rewriting of /tmp/resolv.conf to the start routine; but
> this will not be trivial as for every dnsmasq instance DNS_SERVERS and
> DOMAIN state will need to be kept
The objective is to rewrite /tmp/resolv.conf to use local resolution whenever a 
local resolver runs (i.e. dnsmasq, unbound, ... listening on localhost:53). As 
multiple instances may be started, triggering on the first/main one seems to 
make sense (for lack of a better criterium).
So the question is: what do you think is a (practical) guard for that (and in 
what routines would those be placed best) ?

>> In the stop routine the file /tmp/resolv.conf is (re)set to a soft link to 
>> $resolvfile, which currently because of the test always is 
>> "/tmp/resolv.conf.auto”, irrespective whether that file exists or not.
>> 
>> Q3:
>> What would be the desired state of /tmp/resolv.conf after dnsmasq has been 
>> stopped ?
> In case dnsmasq is stopped /tmp/resolv.conf needs to use only the wan
> DNS servers; which are written by netifd in /tmp/resolv.conf.auto; and
> not anymore 127.0.0.1.
Okay, so that should never be any self user defined resolvfile ?

> Hans
>> 
>> 
>> Bye,
>> Paul
>> 
>> 
>> 
>>> Op 20 mei 2017, om 20:58 heeft Hans Dedecker <dedec...@gmail.com> het 
>>> volgende geschreven:
>>> 
>>> On Sat, May 20, 2017 at 12:41 AM, Paul Oranje <p...@xs4all.nl> wrote:
>>>> When UCI dhcp.dnsmasq.noresolv is true, dnsmasq ignores the (wan) 
>>>> resolv.conf
>>>> for upstream name resolution and the dnsmasq init script ialso skips 
>>>> writing
>>>> /tmp/resolv.conf (/etc/resolv.conf soft links that file).
>>>> 
>>>> Not using the local running DNS service when noresolv is true does not make
>>>> sence; the semantics of that config value do not imply this. With this 
>>>> patch
>>>> the init script also writes /tmp/resolv.conf when noresolv is true.
>>>> 
>>>> fixes FS#785
>>>> 
>>>> Signed-off-by: Paul Oranje <p...@xs4all.nl>
>>>> ---
>>>> This patch replaces an earlier patch with subject
>>>> dnsmasq: also write /tmp/resolv.conf when UCI dhcp.dnsmasq.noresolv is '1'
>>>> which is obsoleted because that subject was required to be shorter.
>>>> ---
>>>> package/network/services/dnsmasq/files/dnsmasq.init | 4 ++--
>>>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>>> 
>>>> diff --git a/package/network/services/dnsmasq/files/dnsmasq.init 
>>>> b/package/network/services/dnsmasq/files/dnsmasq.init
>>>> index 30fec7a4ee..197aae9de1 100644
>>>> --- a/package/network/services/dnsmasq/files/dnsmasq.init
>>>> +++ b/package/network/services/dnsmasq/files/dnsmasq.init
>>>> @@ -947,7 +947,7 @@ dnsmasq_start()
>>>>       echo >> $CONFIGFILE_TMP
>>>>       mv -f $CONFIGFILE_TMP $CONFIGFILE
>>>> 
>>>> -       [ "$resolvfile" = "/tmp/resolv.conf.auto" ] && {
>>>> +       [ "$noresolv" = "1" -o "$resolvfile" = "/tmp/resolv.conf.auto" ] 
>>>> && {
>>>>               rm -f /tmp/resolv.conf
>>>>               [ $ADD_LOCAL_DOMAIN -eq 1 ] && [ -n "$DOMAIN" ] && {
>>>>                       echo "search $DOMAIN" >> /tmp/resolv.conf
>>>> @@ -982,7 +982,7 @@ dnsmasq_stop()
>>>>       config_get resolvfile "$cfg" "resolvfile"
>>>> 
>>>>       #relink /tmp/resolve.conf only for main instance
>>>> -       [ "$resolvfile" = "/tmp/resolv.conf.auto" ] && {
>>>> +       [ "$noresolv" = "1" -o "$resolvfile" = "/tmp/resolv.conf.auto" ] 
>>>> && {
>>> As mentioned in the previous code review noresolv value must be read
>>> from config (similar to resolvfile) otherwise this will not work
>>>>               [ -f /tmp/resolv.conf ] && {
>>>>                       rm -f /tmp/resolv.conf
>>>>                       ln -s "$resolvfile" /tmp/resolv.conf
>>> As mentioned in the previous code review resolvfile can now be empty
>>> which will make ln -s produce an error
>>> 
>>> Hans
>>>> --
>>>> 
>>>> 
>>>> _______________________________________________
>>>> Lede-dev mailing list
>>>> Lede-dev@lists.infradead.org
>>>> http://lists.infradead.org/mailman/listinfo/lede-dev
>>> 
>>> _______________________________________________
>>> Lede-dev mailing list
>>> Lede-dev@lists.infradead.org
>>> http://lists.infradead.org/mailman/listinfo/lede-dev
>> 
> 
> _______________________________________________
> Lede-dev mailing list
> Lede-dev@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/lede-dev


_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to