dnsmasq: 'ipset' config sections
authorAleksandr Mezin <mezin.alexander@gmail.com>
Fri, 23 Oct 2020 05:02:37 +0000 (11:02 +0600)
committerHans Dedecker <dedeckeh@gmail.com>
Wed, 11 Nov 2020 19:47:34 +0000 (20:47 +0100)
Allow configuring ipsets with dedicated config sections:

    config ipset
        list name 'ss_rules_dst_forward'
        list name 'ss_rules6_dst_forward'
        list domain 't.me'
        list domain 'telegram.org'

instead of current, rather inconvenient syntax:

    config dnsmasq
        ...
        list ipset '/t.me/telegram.org/ss_rules_dst_forward,ss_rules6_dst_forward'

Current syntax will still continue to work though.

With this change, a LuCI GUI for DNS ipsets should be easy to implement.

Signed-off-by: Aleksandr Mezin <mezin.alexander@gmail.com>
Signed-off-by: Hans Dedecker <dedeckeh@gmail.com> [PKG_RELEASE increase]
package/network/services/dnsmasq/Makefile
package/network/services/dnsmasq/files/dnsmasq.init

index 4086aa25e06107a576e3760ba79b2bec7507bd20..ba10ded333ae42e3d4818d9685b5471398429fe7 100644 (file)
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
 PKG_NAME:=dnsmasq
 PKG_UPSTREAM_VERSION:=2.82
 PKG_VERSION:=$(subst test,~~test,$(subst rc,~rc,$(PKG_UPSTREAM_VERSION)))
-PKG_RELEASE:=9
+PKG_RELEASE:=10
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_UPSTREAM_VERSION).tar.xz
 PKG_SOURCE_URL:=http://thekelleys.org.uk/dnsmasq
index 7ecc542b4469df02df70ce8f012fd01f45a58d91..680e72f9e77b96b0c345a6c4d82fc3e81195b30b 100644 (file)
@@ -769,6 +769,29 @@ dhcp_relay_add() {
        fi
 }
 
+dnsmasq_ipset_add() {
+       local cfg="$1"
+       local ipsets domains
+
+       add_ipset() {
+               ipsets="${ipsets:+$ipsets,}$1"
+       }
+
+       add_domain() {
+               # leading '/' is expected
+               domains="$domains/$1"
+       }
+
+       config_list_foreach "$cfg" "name" add_ipset
+       config_list_foreach "$cfg" "domain" add_domain
+
+       if [ -z "$ipsets" ] || [ -z "$domains" ]; then
+               return 0
+       fi
+
+       xappend "--ipset=$domains/$ipsets"
+}
+
 dnsmasq_start()
 {
        local cfg="$1"
@@ -1056,6 +1079,10 @@ dnsmasq_start()
        config_foreach filter_dnsmasq cname dhcp_cname_add "$cfg"
        echo >> $CONFIGFILE_TMP
 
+       echo >> $CONFIGFILE_TMP
+       config_foreach filter_dnsmasq ipset dnsmasq_ipset_add "$cfg"
+       echo >> $CONFIGFILE_TMP
+
        echo >> $CONFIGFILE_TMP
        mv -f $CONFIGFILE_TMP $CONFIGFILE
        mv -f $HOSTFILE_TMP $HOSTFILE