For those that want to test the dnsmasq patch on LEDE 17.01, see the attached 
patch file adapted for 17.01(.2).
In the LEDE source root dir:

git apply 
0001-dnsmasq-manage-resolv.conf-iff-when-listening-on-127-lede-17.01.2.patch

For those that also want to test the accompanying unbound patch on LEDE 17.01, 
see the attached patch file adapted for 17.01(.2).
In the feeds/packages dir:

git apply 0001-unbound-manage-resolv.conf-iff-when-listening-on-127-17.01.patch

Good luck,
Paul

> Op 19 jun. 2017, om 21:08 heeft Ben Pfountz <netpri...@vt.edu> het volgende 
> geschreven:
> 
> I tested this patch with a standard install, as well as with noresolv=1 and 2 
> servers configured with opendns, and it worked fine. /etc/resolv.conf still 
> correctly listed 127.0.0.1 and ::1 as the local nameserver.
> 
> Ben
> 
> On 6/19/2017 6:16 AM, Paul Oranje wrote:
>> this patch has been resend with corrected title (not "if", but "iff")
>> sorry for the spamming
>>> Op 18 jun. 2017, om 09:46 heeft Paul Oranje <p...@xs4all.nl> het volgende 
>>> geschreven:
>>> 
>>> With this patch the dnsmasq init script manages resolv.conf if and only if
>>> when dnsmasq will listen on 127.0.0.1#53 (is main resolver instance).
>>> Also adds ::1 to the resolver file.
>>> 
>>> For unbound a likewise patch exists (PR#4454).
>>> Fixes (combined with the unbound PR) FS#785
>>> 
>>> Signed-off-by: Paul Oranje <p...@xs4all.nl>
>>> ---
>>> The intended invariant is that resolv.conf is managed whenever a resolver
>>> listens on 127.0.0.1#53. Besides dnsmasq, unbound can take that role as well
>>> (but only when dnsmasq is not already listens on 127.0.0.1#53).
>>> When no instance of dnsmasq has been configured to listen on 127.0.0.1#53 
>>> then
>>> resolv.conf is not touched by dnsmasq.
>>> 
>>> Currently unbound handles resolv.conf also, but leaves it to dnsmasq 
>>> whenever
>>> that will run, even when no dnsmasq instance will listen on localhost:53. So
>>> for unbound PR#4454  has been submitted to make sure it always manages
>>> resov.conf when it owns localhost:domain.
>>> 
>>> 
>>> Tests performed:
>>> 
>>> - with/without unbound, dhcp linkages none and dnsmasq
>>> - dnsmasq listens on #53, not #53 (dnsmasq takes precedence when also on 
>>> #53)
>>> - listen on localhost, not localhost
>>> - noresolv false and true
>>> - one/multiple dnsmasq instances (useless combinations are omitted in 
>>> testing)
>>> 
>>> single dnsmasq instance
>>>    standard setup
>>> ==> dnsmasq manages resolv.conf
>>> 
>>> two dnsmasq instances, each serving another LAN
>>>    both dnsmasq on #53
>>>    dnsmasq-2 notinterface loopback
>>> ==> dnsmasq-1 manages resolv.conf
>>> 
>>> two dnsmasq unstances and unbound (dhcp_link: none, one dnsmasq behind 
>>> ubound)
>>>    both dnsmasq on #53
>>>    dnsmasq-2 on #53, notinterface loopback
>>>        noresolv true and server 127.0.0.1#1053
>>>    unbound on #1053
>>> ==> dnsmasq-1 manages resolv.conf
>>> 
>>> two dnsmasq instances and unbound (dhcp_link: dnsmasq)
>>>    dnsmasq-1 on #1053, noresolv true
>>>    dnsmasq-2 on #2053, noresolv true
>>>    unbound on #53
>>>        forward LAN1 to 127.0.0.1#1053, forward LAN2 to 127.0.0.1#2053
>>> ==> unbound manages resolv.conf
>>> 
>>> on init stops resolv.conf is reset to the auto resolvfile.
>>> 
>>> 
>>> History:
>>> v1 -> v2        corrected synxtax error
>>>             increased PKG_RELEASE
>>> v2          reverted with commit 8180bbac7c237a31bd6e06c63e342c72342b7303
>>> v3          corected errors, setup/teardown routines and thoroughly tested
>>> 
>>> Paul
>>> 
>>> 
>>> package/network/services/dnsmasq/Makefile          |  2 +-
>>> .../network/services/dnsmasq/files/dnsmasq.init    | 79 
>>> +++++++++++++++-------
>>> 2 files changed, 55 insertions(+), 26 deletions(-)
>>> 
>>> diff --git a/package/network/services/dnsmasq/Makefile 
>>> b/package/network/services/dnsmasq/Makefile
>>> index f9ab13aef0..35ac6b2891 100644
>>> --- a/package/network/services/dnsmasq/Makefile
>>> +++ b/package/network/services/dnsmasq/Makefile
>>> @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
>>> 
>>> PKG_NAME:=dnsmasq
>>> PKG_VERSION:=2.77
>>> -PKG_RELEASE:=3
>>> +PKG_RELEASE:=4
>>> 
>>> PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
>>> PKG_SOURCE_URL:=http://thekelleys.org.uk/dnsmasq/
>>> diff --git a/package/network/services/dnsmasq/files/dnsmasq.init 
>>> b/package/network/services/dnsmasq/files/dnsmasq.init
>>> index d5177ecb0c..2a4d7b2239 100644
>>> --- a/package/network/services/dnsmasq/files/dnsmasq.init
>>> +++ b/package/network/services/dnsmasq/files/dnsmasq.init
>>> @@ -707,9 +707,51 @@ dhcp_relay_add() {
>>>     fi
>>> }
>>> 
>>> +_resolv_setup()
>>> +{
>>> +   local cfg="$1"
>>> +   local port notinterfaces
>>> +
>>> +   config_get port "$cfg" port "53"
>>> +   [ $port = "53" ] || return
>>> +
>>> +   config_get notinterfaces "$cfg" notinterface ""
>>> +   [ -n "$notinterfaces" ] && list_contains notinterfaces "loopback" && 
>>> return
>>> +
>>> +   # dnsmasq instance is designated to listen on 127.0.0.1#53.
>>> +   # rewrite /tmp/resolv.conf
>>> +   rm -f /tmp/resolv.conf
>>> +   {
>>> +           echo "# /tmp/resolv.conf generated by dnsmasq $cfg $( date )"
>>> +           [ $ADD_LOCAL_DOMAIN -eq 1 ] && [ -n "$DOMAIN" ] && {
>>> +                   echo "search $DOMAIN"
>>> +           }
>>> +           DNS_SERVERS="$DNS_SERVERS 127.0.0.1 ::1"
>>> +           for DNS_SERVER in $DNS_SERVERS ; do
>>> +                   echo "nameserver $DNS_SERVER"
>>> +           done
>>> +   } > /tmp/resolv.conf
>>> +
>>> +   return
>>> +}
>>> +
>>> +_resolv_teardown()
>>> +{
>>> +   cfg="$1"
>>> +
>>> +   case $( cat /tmp/resolv.conf ) in
>>> +   *"generated by dnsmasq $cfg"*)
>>> +           # resolv.conf was written by this instance,
>>> +           # reset /tmp/resolv.conf to default.
>>> +           [ -f /tmp/resolv.conf ] && rm -f /tmp/resolv.conf
>>> +           ln -s /tmp/resolv.conf.auto /tmp/resolv.conf
>>> +           ;;
>>> +   esac
>>> +}
>>> +
>>> dnsmasq_start()
>>> {
>>> -   local cfg="$1" disabled resolvfile user_dhcpscript
>>> +   local cfg="$1" disabled noresolv resolvfile user_dhcpscript
>>> 
>>>     config_get_bool disabled "$cfg" disabled 0
>>>     [ "$disabled" -gt 0 ] && return 0
>>> @@ -785,7 +827,6 @@ dnsmasq_start()
>>>     append_bool "$cfg" nonegcache "--no-negcache"
>>>     append_bool "$cfg" strictorder "--strict-order"
>>>     append_bool "$cfg" logqueries "--log-queries=extra"
>>> -   append_bool "$cfg" noresolv "--no-resolv"
>>>     append_bool "$cfg" localise_queries "--localise-queries"
>>>     append_bool "$cfg" readethers "--read-ethers"
>>>     append_bool "$cfg" dbus "--enable-dbus"
>>> @@ -854,14 +895,15 @@ dnsmasq_start()
>>>     config_get_bool cachelocal "$cfg" cachelocal 1
>>> 
>>>     config_get_bool noresolv "$cfg" noresolv 0
>>> -   if [ "$noresolv" != "1" ]; then
>>> +   if [ "$noresolv" = "1" ]; then
>>> +           xappend "--no-resolv"
>>> +   else
>>>             config_get resolvfile "$cfg" resolvfile "/tmp/resolv.conf.auto"
>>> +           xappend "--resolv-file=$resolvfile"
>>>             # So jail doesn't complain if file missing
>>> -           [ -n "$resolvfile" -a \! -e "$resolvfile" ] && touch 
>>> "$resolvfile"
>>> +           [ -e "$resolvfile" ] && touch "$resolvfile"
>>>     fi
>>> 
>>> -   [ -n "$resolvfile" ] && xappend "--resolv-file=$resolvfile"
>>> -
>>>     config_get hostsfile "$cfg" dhcphostsfile
>>>     [ -e "$hostsfile" ] && xappend "--dhcp-hostsfile=$hostsfile"
>>> 
>>> @@ -973,16 +1015,6 @@ dnsmasq_start()
>>>     echo >> $CONFIGFILE_TMP
>>>     mv -f $CONFIGFILE_TMP $CONFIGFILE
>>> 
>>> -   [ "$resolvfile" = "/tmp/resolv.conf.auto" ] && {
>>> -           rm -f /tmp/resolv.conf
>>> -           [ $ADD_LOCAL_DOMAIN -eq 1 ] && [ -n "$DOMAIN" ] && {
>>> -                   echo "search $DOMAIN" >> /tmp/resolv.conf
>>> -           }
>>> -           DNS_SERVERS="$DNS_SERVERS 127.0.0.1"
>>> -           for DNS_SERVER in $DNS_SERVERS ; do
>>> -                   echo "nameserver $DNS_SERVER" >> /tmp/resolv.conf
>>> -           done
>>> -   }
>>> 
>>>     procd_open_instance $cfg
>>>     procd_set_param command $PROG -C $CONFIGFILE -k -x 
>>> /var/run/dnsmasq/dnsmasq."${cfg}".pid
>>> @@ -1000,21 +1032,18 @@ dnsmasq_start()
>>>     procd_add_jail_mount_rw /var/run/dnsmasq/ $leasefile
>>> 
>>>     procd_close_instance
>>> +
>>> +
>>> +   # rewrite /tmp/resolv.conf only for main instance
>>> +   _resolv_setup $cfg
>>> }
>>> 
>>> dnsmasq_stop()
>>> {
>>>     local cfg="$1"
>>> 
>>> -   config_get resolvfile "$cfg" "resolvfile"
>>> -
>>> -   #relink /tmp/resolve.conf only for main instance
>>> -   [ "$resolvfile" = "/tmp/resolv.conf.auto" ] && {
>>> -           [ -f /tmp/resolv.conf ] && {
>>> -                   rm -f /tmp/resolv.conf
>>> -                   ln -s "$resolvfile" /tmp/resolv.conf
>>> -           }
>>> -   }
>>> +   #relink /tmp/resolv.conf only for main instance
>>> +   _resolv_teardown $cfg
>>> 
>>>     rm -f ${BASEDHCPSTAMPFILE}.${cfg}.*.dhcp
>>> }
>>> -- 
>>> 2.13.1
>>> 
>>> 
>>> _______________________________________________
>>> 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

Attachment: 0001-dnsmasq-manage-resolv.conf-iff-when-listening-on-127-lede-17.01.2.patch
Description: Binary data


Attachment: 0001-unbound-manage-resolv.conf-iff-when-listening-on-127-17.01.patch
Description: Binary data

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

Reply via email to