Просмотр исходного кода

dnsmasq: support dhcp_option config as a list

Configuring dhcp_option as an option does not allow the usage of white
spaces in the option value; fix this by supporting dhcp_option as a list
config while still supporting the option config to maintain backwards
compatibility

Signed-off-by: Jo-Philipp Wich <[email protected]>
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker 8 лет назад
Родитель
Сommit
9412fc2949
1 измененных файлов с 21 добавлено и 4 удалено
  1. 21 4
      package/network/services/dnsmasq/files/dnsmasq.init

+ 21 - 4
package/network/services/dnsmasq/files/dnsmasq.init

@@ -538,6 +538,14 @@ dhcp_add() {
 	dhcp_option_add "$cfg" "$networkid"
 }
 
+dhcp_option_append() {
+	local option="$1"
+	local networkid="$2"
+	local force="$3"
+
+	xappend "--dhcp-option${force:+-force}=${networkid:+$networkid,}$option"
+}
+
 dhcp_option_add() {
 	# NOTE: dnsmasq has explicit "option6:" prefix for DHCPv6 so no collisions
 	local cfg="$1"
@@ -546,11 +554,20 @@ dhcp_option_add() {
 
 	[ "$force" = "0" ] && force=
 
-	config_get dhcp_option "$cfg" dhcp_option
-	for o in $dhcp_option; do
-		xappend "--dhcp-option${force:+-force}=${networkid:+$networkid,}$o"
-	done
+	local list_len
+	config_get list_len "$cfg" dhcp_option_LENGTH
+
+	if [ -n "$list_len" ]; then
+		config_list_foreach "$cfg" dhcp_option dhcp_option_append "$networkid" "$force"
+	else
+		echo "Warning: the 'option dhcp_option' syntax is deprecated, use 'list dhcp_option'" >&2
+		config_get dhcp_option "$cfg" dhcp_option
 
+		local option
+		for option in $dhcp_option; do
+			dhcp_option_append "$option" "$networkid" "$force"
+		done
+	fi
 }
 
 dhcp_domain_add() {