dnsmasq: allow de-selecting features from -full variant.
[openwrt/staging/chunkeey.git] / package / network / services / dnsmasq / files / dnsmasq.init
index f7edb28806b15cace0b32ec03ccf7400c42ecf13..209952b5e68e3944f9e6c3a075e292049fe30603 100644 (file)
@@ -14,6 +14,7 @@ ADD_LOCAL_HOSTNAME=1
 
 CONFIGFILE="/var/etc/dnsmasq.conf"
 HOSTFILE="/tmp/hosts/dhcp"
+TRUSTANCHORSFILE="/usr/share/dnsmasq/trust-anchors.conf"
 
 xappend() {
        local value="$1"
@@ -84,6 +85,10 @@ append_address() {
        xappend "--address=$1"
 }
 
+append_ipset() {
+       xappend "--ipset=$1"
+}
+
 append_interface() {
        local ifname=$(uci_get_state network "$1" ifname "$1")
        xappend "--interface=$ifname"
@@ -134,6 +139,7 @@ dnsmasq() {
        append_parm "$cfg" "local" "--server"
        config_list_foreach "$cfg" "server" append_server
        config_list_foreach "$cfg" "address" append_address
+       config_list_foreach "$cfg" "ipset" append_ipset
        config_list_foreach "$cfg" "interface" append_interface
        config_list_foreach "$cfg" "notinterface" append_notinterface
        config_list_foreach "$cfg" "addnhosts" append_addnhosts
@@ -186,6 +192,13 @@ dnsmasq() {
                config_list_foreach "$cfg" rebind_domain append_rebind_domain
        }
 
+       config_get_bool dnssec "$cfg" dnssec 0
+       [ "$dnssec" -gt 0 ] && {
+               xappend "--conf-file=$TRUSTANCHORSFILE"
+               xappend "--dnssec"
+               append_bool "$cfg" dnsseccheckunsigned "--dnssec-check-unsigned"
+       }
+
        dhcp_option_add "$cfg" "" 0
 
        xappend "--dhcp-broadcast=tag:needs-broadcast"
@@ -285,15 +298,22 @@ dhcp_host_add() {
        config_get ip "$cfg" ip
        [ -n "$ip" -o -n "$name" ] || return 0
 
+       config_get_bool dns "$cfg" dns 0
+       [ "$dns" = "1" -a -n "$ip" -a -n "$name" ] && {
+               echo "$ip $name${DOMAIN:+.$DOMAIN}" >> $HOSTFILE
+       }
+
        config_get mac "$cfg" mac
-       [ -z "$mac" ] && {
+       if [ -n "$mac" ]; then
+               # --dhcp-host=00:20:e0:3b:13:af,192.168.0.199,lap
+               macs=""
+               for m in $mac; do append macs "$m" ","; done
+       else
+               # --dhcp-host=lap,192.168.0.199
                [ -n "$name" ] || return 0
-               mac="$name"
+               macs="$name"
                name=""
-       }
-
-       macs=""
-       for m in $mac; do append macs "$m" ","; done
+       fi
 
        config_get tag "$cfg" tag
 
@@ -301,11 +321,6 @@ dhcp_host_add() {
        [ "$broadcast" = "0" ] && broadcast=
 
        xappend "--dhcp-host=$macs${networkid:+,net:$networkid}${broadcast:+,set:needs-broadcast}${tag:+,set:$tag}${ip:+,$ip}${name:+,$name}"
-
-       config_get_bool dns "$cfg" dns 0
-       [ "$dns" = "1" ] && {
-               echo "$ip $name${DOMAIN:+.$DOMAIN}" >> $HOSTFILE
-       }
 }
 
 dhcp_tag_add() {
@@ -365,6 +380,9 @@ dhcp_add() {
        config_get net "$cfg" interface
        [ -n "$net" ] || return 0
 
+       config_get dhcpv4 "$cfg" dhcpv4
+       [ "$dhcpv4" != "disabled" ] || return 0
+
        config_get networkid "$cfg" networkid
        [ -n "$networkid" ] || networkid="$net"
 
@@ -430,13 +448,10 @@ dhcp_domain_add() {
        [ -n "$ip" ] || return 0
 
        for name in $names; do
-               [ "${name%.*}" == "$name" ] && \
-                       name="$name${DOMAIN:+.$DOMAIN}"
-
-               record="${record:+$record/}$name"
+               record="${record:+$record }$name"
        done
 
-       xappend "--address=/$record/$ip"
+       echo "$ip $record" >> $HOSTFILE
 }
 
 dhcp_srv_add() {
@@ -528,6 +543,7 @@ start_service() {
        procd_open_instance
        procd_set_param command $PROG -C $CONFIGFILE -k
        procd_set_param file $CONFIGFILE
+       procd_set_param respawn
        procd_close_instance
 
        # before we can call xappend
@@ -560,7 +576,7 @@ start_service() {
        local lanaddr
        [ $ADD_LOCAL_HOSTNAME -eq 1 ] && network_get_ipaddr lanaddr "lan" && {
                local hostname="$(uci_get system @system[0] hostname OpenWrt)"
-               dhcp_hostrecord_add "" "${hostname%.$DOMAIN}${DOMAIN:+.$DOMAIN ${hostname%.$DOMAIN}}" "$lanaddr"
+               dhcp_domain_add "" "$hostname" "$lanaddr"
        }
 
        echo >> $CONFIGFILE