summaryrefslogtreecommitdiff
path: root/net/https-dns-proxy/files
diff options
context:
space:
mode:
authorStan Grishin <stangri@melmac.net>2019-10-31 12:55:08 -0700
committerStan Grishin <stangri@melmac.net>2019-10-31 12:55:08 -0700
commit338dc52e5c8e9d56b3058e71967d80b58d4441d8 (patch)
treec0cae848c79226fe24ab7159812ba0b4e004f031 /net/https-dns-proxy/files
parentdf72b551a2aa8eb441cc1708ccf9cb75dc031405 (diff)
https-dns-proxy: implement dnsmasq integration
Signed-off-by: Stan Grishin <stangri@melmac.net>
Diffstat (limited to 'net/https-dns-proxy/files')
-rw-r--r--net/https-dns-proxy/files/https_dns_proxy.init72
1 files changed, 67 insertions, 5 deletions
diff --git a/net/https-dns-proxy/files/https_dns_proxy.init b/net/https-dns-proxy/files/https_dns_proxy.init
index 645c17aa4..5dee453d2 100644
--- a/net/https-dns-proxy/files/https_dns_proxy.init
+++ b/net/https-dns-proxy/files/https_dns_proxy.init
@@ -1,7 +1,9 @@
#!/bin/sh /etc/rc.common
+# Copyright 2019 Stan Grishin (stangri@melmac.net)
+# shellcheck disable=SC2039
-START=80
-USE_PROCD=1
+export START=80
+export USE_PROCD=1
PROG=/usr/sbin/https_dns_proxy
@@ -19,10 +21,10 @@ append_parm() {
}
start_instance() {
- local cfg="$1" param
+ local cfg="$1" param listen_addr listen_port
append_parm "$cfg" 'listen_addr' '-a' '127.0.0.1'
- append_parm "$cfg" 'listen_port' '-p' '5053'
+ append_parm "$cfg" 'listen_port' '-p' "$p"
append_parm "$cfg" 'bootstrap_dns' '-b'
append_parm "$cfg" 'url_prefix' '-r'
append_parm "$cfg" 'user' '-u' 'nobody'
@@ -31,16 +33,76 @@ start_instance() {
append_parm "$cfg" 'proxy_server' '-t'
procd_open_instance
+# shellcheck disable=SC2086
procd_set_param command ${PROG} ${param}
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"
+ config_load 'dhcp'
+# shellcheck disable=SC2154
+ config_foreach dnsmasq_add_doh_server 'dnsmasq' "${listen_addr}#${listen_port}"
+ p="$((p+1))"
}
service_triggers() {
- procd_add_reload_trigger "https_dns_proxy"
+ procd_add_reload_trigger 'https_dns_proxy'
}
start_service() {
+ local p=5053
+ dhcp_backup 'create'
config_load 'https_dns_proxy'
config_foreach start_instance 'https_dns_proxy'
+ if [ -z "$(uci -q get dhcp.@dnsmasq[0].server)" ]; then
+ dhcp_backup 'restore'
+ fi
+ if [ -n "$(uci -q changes dhcp)" ]; then
+ uci -q commit dhcp
+ [ -x /etc/init.d/dnsmasq ] && /etc/init.d/dnsmasq restart >/dev/null 2>&1
+ fi
+}
+
+stop_service() {
+ dhcp_backup 'restore'
+ if [ -n "$(uci -q changes dhcp)" ]; then
+ uci -q commit dhcp
+ [ -x /etc/init.d/dnsmasq ] && /etc/init.d/dnsmasq restart >/dev/null 2>&1
+ fi
+}
+
+dnsmasq_add_doh_server() {
+ local cfg="$1" value="$2"
+ uci -q add_list dhcp."$cfg".server="$value"
+}
+
+dnsmasq_create_server_backup() {
+ local cfg="$1" i
+ 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"
+ done
+ fi
+ uci -q del "dhcp.$cfg.server"
+}
+
+dnsmasq_restore_server_backup() {
+ local cfg="$1" 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"
+ done
+ fi
+}
+
+dhcp_backup() {
+ config_load 'dhcp'
+ case "$1" in
+ create)
+ config_foreach dnsmasq_create_server_backup 'dnsmasq';;
+ restore)
+ config_foreach dnsmasq_restore_server_backup 'dnsmasq';;
+ esac
}