dnsmasq: use host-record instead of address
authorJo-Philipp Wich <jow@openwrt.org>
Mon, 17 Jun 2013 11:55:30 +0000 (11:55 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Mon, 17 Jun 2013 11:55:30 +0000 (11:55 +0000)
Using "--address" for individual host A records is broken, use "--host-record" instead.
The following patch changes dnsmasq.init to build individual host records using "--host-record" instead of "--address".

Signed-off-by: Adam Gensler <openwrt at gnslr.us>
[jow: shorter description, simplified shell script code]

SVN-Revision: 36943

package/network/services/dnsmasq/Makefile
package/network/services/dnsmasq/files/dnsmasq.init

index 467c93494ea45d291714cbe4aac74971395316a6..6938ba154a5876b0d325163c158c62793c25da26 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=dnsmasq
 PKG_VERSION:=2.66
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://thekelleys.org.uk/dnsmasq
index cc5ff7da6a639dad74d10477b657197d80d6707e..630c07d1d8ef405867a8dfb30c28115623c64339 100644 (file)
@@ -74,7 +74,7 @@ append_addnhosts() {
 }
 
 append_bogusnxdomain() {
-       xappend "--bogus-nxdomain=$1"
+    xappend "--bogus-nxdomain=$1"
 }
 
 dnsmasq() {
@@ -393,7 +393,7 @@ dhcp_option_add() {
 
 dhcp_domain_add() {
        local cfg="$1"
-       local ip name names
+       local ip name names record
 
        config_get names "$cfg" name "$2"
        [ -n "$names" ] || return 0
@@ -401,22 +401,11 @@ dhcp_domain_add() {
        config_get ip "$cfg" ip "$3"
        [ -n "$ip" ] || return 0
 
-       local oIFS="$IFS"; IFS="."; set -- $ip; IFS="$oIFS"
-       local raddr="${4:+$4.$3.$2.$1.in-addr.arpa}"
-
        for name in $names; do
-               local fqdn="$name"
-
-               [ "${fqdn%.*}" == "$fqdn" ] && \
-                       fqdn="$fqdn${DOMAIN:+.$DOMAIN}"
-
-               xappend "--address=/$fqdn/$ip"
-
-               [ -n "$raddr" ] && {
-                       xappend "--ptr-record=$raddr,$fqdn"
-                       raddr=""
-               }
+               record="${record:+$record/}$name"
        done
+
+       xappend "--address=/$record/$ip"
 }
 
 dhcp_srv_add() {
@@ -469,6 +458,27 @@ dhcp_cname_add() {
        xappend "--cname=${cname},${target}"
 }
 
+dhcp_hostrecord_add() {
+       local cfg="$1"
+       local names addresses record val
+
+       config_get names "$cfg" name "$2"
+       if [ -z "$names" ]; then
+               return 0
+       fi
+
+       config_get addresses "$cfg" ip "$3"
+       if [ -z "$addresses" ]; then
+               return 0
+       fi
+
+       for val in $names $addresses; do
+               record="${record:+$record,}$val"
+       done
+
+       xappend "--host-record=$record"
+}
+
 start() {
        include /lib/network
        scan_interfaces
@@ -501,6 +511,14 @@ start() {
        config_foreach dhcp_remoteid_add remoteid
        config_foreach dhcp_subscrid_add subscrid
        config_foreach dhcp_domain_add domain
+       config_foreach dhcp_hostrecord_add hostrecord
+
+       # add own hostname
+       [ $ADD_LOCAL_HOSTNAME -eq 1 ] && [ -n "$lanaddr" ] && {
+               local hostname="$(uci_get system @system[0] hostname OpenWrt)"
+               dhcp_hostrecord_add "" "$hostname${DOMAIN:+.$DOMAIN $hostname}" "$lanaddr"
+       }
+
        echo >> $CONFIGFILE
        config_foreach dhcp_srv_add srvhost
        config_foreach dhcp_mx_add mxhost
@@ -510,12 +528,6 @@ start() {
        config_foreach dhcp_cname_add cname
        echo >> $CONFIGFILE
 
-       # add own hostname
-       [ $ADD_LOCAL_HOSTNAME -eq 1 ] && [ -n "$lanaddr" ] && {
-               local hostname="$(uci_get system.@system[0].hostname)"
-               dhcp_domain_add "" "${hostname:-OpenWrt}" "$lanaddr"
-       }
-
        service_start /usr/sbin/dnsmasq -C $CONFIGFILE && {
                rm -f /tmp/resolv.conf
                [ $ADD_LOCAL_DOMAIN -eq 1 ] && [ -n "$DOMAIN" ] && {