X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=package%2Fnetwork%2Fservices%2Fdnsmasq%2Ffiles%2Fdnsmasq.init;h=6f985b2417c10c311e232e63bdc4dfc5766d5b98;hb=a89c36b50875e61c790113d3adee10621575788a;hp=fda11401db6f8e47912809ae1b506401d0570ffb;hpb=a53f8ba6771de64c9c82a2e6867791226f3003cb;p=openwrt%2Fopenwrt.git diff --git a/package/network/services/dnsmasq/files/dnsmasq.init b/package/network/services/dnsmasq/files/dnsmasq.init index fda11401db..6f985b2417 100644 --- a/package/network/services/dnsmasq/files/dnsmasq.init +++ b/package/network/services/dnsmasq/files/dnsmasq.init @@ -125,6 +125,10 @@ append_server() { xappend "--server=$1" } +append_rev_server() { + xappend "--rev-server=$1" +} + append_address() { xappend "--address=$1" } @@ -134,12 +138,12 @@ append_ipset() { } append_interface() { - network_get_device ifname "$1" || return + network_get_device ifname "$1" || ifname="$1" xappend "--interface=$ifname" } append_notinterface() { - network_get_device ifname "$1" || return + network_get_device ifname "$1" || ifname="$1" xappend "--except-interface=$ifname" } @@ -440,6 +444,7 @@ dhcp_add() { local cfg="$1" local dhcp6range="::" local nettag + local tags config_get net "$cfg" interface [ -n "$net" ] || return 0 @@ -491,6 +496,12 @@ dhcp_add() { dhcp_this_host_add "$net" "$ifname" "$ADD_LOCAL_FQDN" start="$( dhcp_calc "$start" )" + + add_tag() { + tags="${tags}tag:$1," + } + config_list_foreach "$cfg" tag add_tag + nettag="${networkid:+set:${networkid},}" if [ "$limit" -gt 0 ] ; then @@ -508,7 +519,7 @@ dhcp_add() { if [ "$dhcpv4" != "disabled" ] ; then - xappend "--dhcp-range=$nettag$START,$END,$NETMASK,$leasetime${options:+ $options}" + xappend "--dhcp-range=$tags$nettag$START,$END,$NETMASK,$leasetime${options:+ $options}" fi @@ -707,21 +718,6 @@ dhcp_relay_add() { fi } -dnsmasq_ismain() -{ - local cfg="$1" - local port notinterfaces - - config_get port "$cfg" port "53" - [ $port = "53" ] || return 1 - - config_get notinterfaces "$cfg" notinterface "" - [ -n $notinterfaces ] && list_contains $notinterfaces "loopback" || return 1 - - # dnsmasq instance is designated to listen on 127.0.0.1#53. - return 0 -} - dnsmasq_start() { local cfg="$1" disabled resolvfile user_dhcpscript @@ -831,6 +827,7 @@ dnsmasq_start() append_parm "$cfg" "domain" "--domain" append_parm "$cfg" "local" "--server" config_list_foreach "$cfg" "server" append_server + config_list_foreach "$cfg" "rev_server" append_rev_server config_list_foreach "$cfg" "address" append_address config_list_foreach "$cfg" "ipset" append_ipset config_list_foreach "$cfg" "interface" append_interface @@ -868,10 +865,14 @@ dnsmasq_start() [ -n "$leasefile" -a \! -e "$leasefile" ] && touch "$leasefile" config_get_bool cachelocal "$cfg" cachelocal 1 - config_get resolvfile "$cfg" resolvfile "/tmp/resolv.conf.auto" - xappend "--resolv-file=$resolvfile" - # So jail doesn't complain if file missing - [ \! -e "$resolvfile" ] && touch "$resolvfile" + config_get_bool noresolv "$cfg" noresolv 0 + if [ "$noresolv" != "1" ]; then + config_get resolvfile "$cfg" resolvfile "/tmp/resolv.conf.auto" + # So jail doesn't complain if file missing + [ -n "$resolvfile" -a \! -e "$resolvfile" ] && touch "$resolvfile" + fi + + [ -n "$resolvfile" ] && xappend "--resolv-file=$resolvfile" config_get hostsfile "$cfg" dhcphostsfile [ -e "$hostsfile" ] && xappend "--dhcp-hostsfile=$hostsfile" @@ -984,6 +985,16 @@ 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 @@ -1001,29 +1012,20 @@ dnsmasq_start() procd_add_jail_mount_rw /var/run/dnsmasq/ $leasefile procd_close_instance - - - # write /tmp/resolve.conf only for main instance - dnsmasq_ismain $cfg && { - 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 - } } dnsmasq_stop() { local cfg="$1" + config_get resolvfile "$cfg" "resolvfile" + #relink /tmp/resolve.conf only for main instance - dnsmasq_ismain $cfg && { - [ -f /tmp/resolv.conf ] && rm -f /tmp/resolv.conf - ln -s /tmp/resolv.conf.auto /tmp/resolv.conf + [ "$resolvfile" = "/tmp/resolv.conf.auto" ] && { + [ -f /tmp/resolv.conf ] && { + rm -f /tmp/resolv.conf + ln -s "$resolvfile" /tmp/resolv.conf + } } rm -f ${BASEDHCPSTAMPFILE}.${cfg}.*.dhcp