From 6b290744dba7b24eb2ce053e7da37249df3edf69 Mon Sep 17 00:00:00 2001 From: Stan Grishin Date: Fri, 20 Mar 2020 21:22:49 +0000 Subject: https-dns-proxy: support for dnsmasq noresolv option Signed-off-by: Stan Grishin --- net/https-dns-proxy/files/https-dns-proxy.init | 86 ++++++++++++++++---------- 1 file changed, 55 insertions(+), 31 deletions(-) (limited to 'net/https-dns-proxy/files/https-dns-proxy.init') diff --git a/net/https-dns-proxy/files/https-dns-proxy.init b/net/https-dns-proxy/files/https-dns-proxy.init index 0767da935..e4a4d3b73 100755 --- a/net/https-dns-proxy/files/https-dns-proxy.init +++ b/net/https-dns-proxy/files/https-dns-proxy.init @@ -33,16 +33,6 @@ append_parm() { xappend "$switch $_loctmp" } -append_match() { - local section="$1" - local option="$2" - local value="$3" - local match="$4" - local _loctmp - config_get_bool _loctmp "$section" "$option" - [ "$_loctmp" = "$match" ] && xappend "$value" -} - start_instance() { local cfg="$1" param listen_addr listen_port i @@ -56,25 +46,35 @@ start_instance() { append_parm "$cfg" 'proxy_server' '-t' append_parm "$cfg" 'logfile' '-l' append_bool "$cfg" 'use_http1' '-x' - append_match "$cfg" 'verbosity' '-v' '1' - append_match "$cfg" 'verbosity' '-vv' '2' - append_match "$cfg" 'verbosity' '-vvv' '3' - append_match "$cfg" 'verbosity' '-vvvv' '4' + config_get_bool ipv6_resolvers_only "$cfg" 'use_ipv6_resolvers_only' '0' + config_get verbosity "$cfg" 'verbosity' "0" + +# shellcheck disable=SC2086,SC2154 + for i in $(seq 1 $verbosity); do + xappend "-v" + done +# shellcheck disable=SC2154 + if [ "$ipv6_resolvers_only" = 0 ]; then + xappend "-4" + fi procd_open_instance # shellcheck disable=SC2086 - procd_set_param command ${PROG} -4 ${param} + procd_set_param command ${PROG} ${param} + procd_set_param stderr 1 + procd_set_param stdout 1 procd_set_param respawn procd_close_instance config_get listen_addr "$cfg" 'listen_addr' '127.0.0.1' config_get listen_port "$cfg" 'listen_port' "$p" + if [ "$dnsmasqConfig" = "*" ]; then config_load 'dhcp' - config_foreach dnsmasq_add_doh_server 'dnsmasq' "${listen_addr}#${listen_port}" + config_foreach dnsmasq_add_doh_server 'dnsmasq' "${listen_addr}" "${listen_port}" elif [ -n "$dnsmasqConfig" ]; then for i in $dnsmasqConfig; do - dnsmasq_add_doh_server "@dnsmasq[${i}]" "${listen_addr}#${listen_port}" + dnsmasq_add_doh_server "@dnsmasq[${i}]" "${listen_addr}" "${listen_port}" done fi p="$((p+1))" @@ -112,32 +112,56 @@ service_triggers() { } dnsmasq_add_doh_server() { - local cfg="$1" value="$2" - uci -q del_list dhcp."$cfg".server="$value" - uci -q add_list dhcp."$cfg".server="$value" + local cfg="$1" address="$2" port="$3" + case $address in + 0.0.0.0|::ffff:0.0.0.0) address='127.0.0.1';; + ::) address='::1';; + esac + uci -q del_list "dhcp.${cfg}.server=${address}#${port}" + uci -q add_list "dhcp.${cfg}.server=${address}#${port}" } dnsmasq_create_server_backup() { local cfg="$1" local i - uci -q get "dhcp.$cfg.doh_backup_server" >/dev/null && return 0 - for i in $(uci -q get "dhcp.$cfg.server"); do - uci -q add_list dhcp."$cfg".doh_backup_server="$i" - if [ "$i" = "${i//127.0.0.1}" ] && [ "$i" = "$(echo "$i" | tr -d /)" ]; then - uci -q del_list dhcp."$cfg".server="$i" + uci -q get "dhcp.${cfg}" >/dev/null || return 0 + if ! uci -q get "dhcp.${cfg}.doh_backup_noresolv" >/dev/null; then + if [ -z "$(uci -q get "dhcp.${cfg}.noresolv")" ]; then + uci -q set "dhcp.${cfg}.noresolv=1" + uci -q set "dhcp.${cfg}.doh_backup_noresolv=-1" + elif [ "$(uci -q get "dhcp.${cfg}.noresolv")" != "1" ]; then + uci -q set "dhcp.${cfg}.noresolv=1" + uci -q set "dhcp.${cfg}.doh_backup_noresolv=0" fi - done + fi + if ! uci -q get "dhcp.${cfg}.doh_backup_server" >/dev/null; then + for i in $(uci -q get "dhcp.${cfg}.server"); do + uci -q add_list "dhcp.${cfg}.doh_backup_server=$i" + if [ "$i" = "${i//127.0.0.1}" ] && [ "$i" = "$(echo "$i" | tr -d /)" ]; then + uci -q del_list "dhcp.${cfg}.server=$i" + fi + done + fi } dnsmasq_restore_server_backup() { local cfg="$1" local i - if uci -q get "dhcp.$cfg.doh_backup_server" >/dev/null; then - uci -q del "dhcp.$cfg.server" - for i in $(uci -q get "dhcp.$cfg.doh_backup_server"); do - uci -q add_list dhcp."$cfg".server="$i" + uci -q get "dhcp.${cfg}" >/dev/null || return 0 + if uci -q get "dhcp.${cfg}.doh_backup_noresolv" >/dev/null; then + if [ "$(uci -q get "dhcp.${cfg}.doh_backup_noresolv")" = "0" ]; then + uci -q set "dhcp.${cfg}.noresolv=0" + else + uci -q del "dhcp.${cfg}.noresolv" + fi + uci -q del "dhcp.${cfg}.doh_backup_noresolv" + fi + if uci -q get "dhcp.${cfg}.doh_backup_server" >/dev/null; then + uci -q del "dhcp.${cfg}.server" + for i in $(uci -q get "dhcp.${cfg}.doh_backup_server"); do + uci -q add_list "dhcp.${cfg}.server=$i" done - uci -q del "dhcp.$cfg.doh_backup_server" + uci -q del "dhcp.${cfg}.doh_backup_server" fi } -- cgit