1 #!/bin/sh /etc/rc.common
2 # Copyright 2019 Stan Grishin (stangri@melmac.net)
3 # shellcheck disable=SC2039
10 PROG
=/usr
/sbin
/https-dns-proxy
12 xappend
() { param
="$param $1"; }
20 [ -z "$default" ] && default
="0"
21 config_get_bool _loctmp
"$section" "$option" "$default"
22 [ "$_loctmp" != "0" ] && xappend
"$value"
31 config_get _loctmp
"$section" "$option" "$default"
32 [ -z "$_loctmp" ] && return 0
33 xappend
"$switch $_loctmp"
37 local cfg
="$1" param listen_addr listen_port i
39 append_parm
"$cfg" 'listen_addr' '-a' '127.0.0.1'
40 append_parm
"$cfg" 'listen_port' '-p' "$p"
41 append_parm
"$cfg" 'bootstrap_dns' '-b'
42 append_parm
"$cfg" 'resolver_url' '-r'
43 append_parm
"$cfg" 'user' '-u' 'nobody'
44 append_parm
"$cfg" 'group' '-g' 'nogroup'
45 append_parm
"$cfg" 'proxy_server' '-t'
46 append_parm
"$cfg" 'logfile' '-l'
47 append_bool
"$cfg" 'use_http1' '-x'
48 config_get_bool ipv6_resolvers_only
"$cfg" 'use_ipv6_resolvers_only' '0'
49 config_get verbosity
"$cfg" 'verbosity' "0"
51 # shellcheck disable=SC2086,SC2154
52 for i
in $
(seq 1 $verbosity); do
55 # shellcheck disable=SC2154
56 if [ "$ipv6_resolvers_only" = 0 ]; then
61 # shellcheck disable=SC2086
62 procd_set_param
command ${PROG} ${param}
63 procd_set_param stderr
1
64 procd_set_param stdout
1
65 procd_set_param respawn
68 config_get listen_addr
"$cfg" 'listen_addr' '127.0.0.1'
69 config_get listen_port
"$cfg" 'listen_port' "$p"
71 if [ "$dnsmasqConfig" = "*" ]; then
73 config_foreach dnsmasq_add_doh_server
'dnsmasq' "${listen_addr}" "${listen_port}"
74 elif [ -n "$dnsmasqConfig" ]; then
75 for i
in $dnsmasqConfig; do
76 dnsmasq_add_doh_server
"@dnsmasq[${i}]" "${listen_addr}" "${listen_port}"
83 procd_add_reload_trigger
'https-dns-proxy'
88 config_load
'https-dns-proxy'
89 config_get dnsmasqConfig
'config' 'update_dnsmasq_config' '*'
91 config_load
'https-dns-proxy'
92 config_foreach start_instance
'https-dns-proxy'
93 if [ -n "$(uci -q changes dhcp)" ]; then
95 [ -x /etc
/init.d
/dnsmasq
] && /etc
/init.d
/dnsmasq restart
>/dev
/null
2>&1
100 config_load
'https-dns-proxy'
101 config_get dnsmasqConfig
'config' 'update_dnsmasq_config' '*'
102 dhcp_backup
'restore'
103 if [ -n "$(uci -q changes dhcp)" ]; then
105 [ -x /etc
/init.d
/dnsmasq
] && /etc
/init.d
/dnsmasq restart
>/dev
/null
2>&1
110 procd_add_reload_trigger
'https-dns-proxy'
113 dnsmasq_add_doh_server
() {
114 local cfg
="$1" address
="$2" port
="$3"
116 0.0.0.0|
::ffff
:0.0.0.0) address
='127.0.0.1';;
119 uci
-q del_list
"dhcp.${cfg}.server=${address}#${port}"
120 uci
-q add_list
"dhcp.${cfg}.server=${address}#${port}"
123 dnsmasq_create_server_backup
() {
126 uci
-q get
"dhcp.${cfg}" >/dev
/null ||
return 0
127 if ! uci
-q get
"dhcp.${cfg}.doh_backup_noresolv" >/dev
/null
; then
128 if [ -z "$(uci -q get "dhcp.
${cfg}.noresolv
")" ]; then
129 uci
-q set "dhcp.${cfg}.noresolv=1"
130 uci
-q set "dhcp.${cfg}.doh_backup_noresolv=-1"
131 elif [ "$(uci -q get "dhcp.
${cfg}.noresolv
")" != "1" ]; then
132 uci
-q set "dhcp.${cfg}.noresolv=1"
133 uci
-q set "dhcp.${cfg}.doh_backup_noresolv=0"
136 if ! uci
-q get
"dhcp.${cfg}.doh_backup_server" >/dev
/null
; then
137 for i
in $
(uci
-q get
"dhcp.${cfg}.server"); do
138 uci
-q add_list
"dhcp.${cfg}.doh_backup_server=$i"
139 if [ "$i" = "${i//127.0.0.1}" ] && [ "$i" = "$(echo "$i" | tr -d /)" ]; then
140 uci
-q del_list
"dhcp.${cfg}.server=$i"
146 dnsmasq_restore_server_backup
() {
149 uci
-q get
"dhcp.${cfg}" >/dev
/null ||
return 0
150 if uci
-q get
"dhcp.${cfg}.doh_backup_noresolv" >/dev
/null
; then
151 if [ "$(uci -q get "dhcp.
${cfg}.doh_backup_noresolv
")" = "0" ]; then
152 uci
-q set "dhcp.${cfg}.noresolv=0"
154 uci
-q del
"dhcp.${cfg}.noresolv"
156 uci
-q del
"dhcp.${cfg}.doh_backup_noresolv"
158 if uci
-q get
"dhcp.${cfg}.doh_backup_server" >/dev
/null
; then
159 uci
-q del
"dhcp.${cfg}.server"
160 for i
in $
(uci
-q get
"dhcp.${cfg}.doh_backup_server"); do
161 uci
-q add_list
"dhcp.${cfg}.server=$i"
163 uci
-q del
"dhcp.${cfg}.doh_backup_server"
172 if [ "$dnsmasqConfig" = "*" ]; then
173 config_foreach dnsmasq_create_server_backup
'dnsmasq'
174 elif [ -n "$dnsmasqConfig" ]; then
175 for i
in $dnsmasqConfig; do
176 dnsmasq_create_server_backup
"@dnsmasq[${i}]"
181 config_foreach dnsmasq_restore_server_backup
'dnsmasq'