ASR_BASE
Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/external/subpack/net/dnscrypt-proxy/files/dnscrypt-proxy.init b/external/subpack/net/dnscrypt-proxy/files/dnscrypt-proxy.init
new file mode 100644
index 0000000..7df6b22
--- /dev/null
+++ b/external/subpack/net/dnscrypt-proxy/files/dnscrypt-proxy.init
@@ -0,0 +1,167 @@
+#!/bin/sh /etc/rc.common
+
+# Startup before dnsmasq
+START=18
+USE_PROCD=1
+PROG=/usr/sbin/dnscrypt-proxy
+CONFIG_DIR=/var/etc
+USER=nobody
+
+boot() {
+ dnscrypt_boot=1
+ rc_procd start_service
+}
+
+dnscrypt_instance() {
+ local config_path="$CONFIG_DIR/dnscrypt-proxy-$1.conf"
+ create_config_file $1 "$config_path"
+
+ procd_open_instance
+ procd_set_param command $PROG "$config_path"
+ procd_close_instance
+}
+
+create_config_file() {
+ local address port resolver resolvers_list ephemeral_keys client_key log_level syslog syslog_prefix local_cache query_log_file block_ipv6 provider_name provider_key resolver_address
+ local config_path="$2"
+ local plugins_support_enabled=$(dnscrypt-proxy --version | grep 'Support for plugins: present' | wc -l)
+
+ [ ! -d "$CONFIG_DIR" ] && mkdir -p "$CONFIG_DIR"
+ [ -f "$config_path" ] && rm "$config_path"
+
+ config_get address $1 'address' '127.0.0.1'
+ config_get port $1 'port' '5353'
+ config_get resolver $1 'resolver' ''
+ config_get provider_name $1 'providername' ''
+ config_get provider_key $1 'providerkey' ''
+ config_get resolver_address $1 'resolveraddress' ''
+ config_get resolvers_list $1 'resolvers_list' '/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv'
+ config_get client_key $1 'client_key' ''
+ config_get syslog_prefix $1 'syslog_prefix' 'dnscrypt-proxy'
+ config_get query_log_file $1 'query_log_file' ''
+ config_get log_level $1 'log_level' '6'
+ config_get blacklist $1 'blacklist' ''
+ config_get_bool syslog $1 'syslog' '1'
+ config_get_bool ephemeral_keys $1 'ephemeral_keys' '0'
+ config_get_bool local_cache $1 'local_cache' '0'
+ config_get_bool block_ipv6 $1 'block_ipv6' '0'
+
+ append_param_not_empty "ResolverName" "$resolver" $config_path
+ append_param "ResolversList" "$resolvers_list" $config_path
+ append_param_not_empty "ProviderName" "$provider_name" $config_path
+ append_param_not_empty "ProviderKey" "$provider_key" $config_path
+ append_param_not_empty "ResolverAddress" "$resolver_address" $config_path
+ append_param "User" "$USER" $config_path
+ append_param "LocalAddress" "$address:$port" $config_path
+ append_param_not_empty "ClientKey" "$client_key" $config_path
+ append_on_off "EphemeralKeys" $ephemeral_keys $config_path
+ append_param "LogLevel" "$log_level" $config_path
+ append_on_off "Syslog" $syslog $config_path
+ append_param "SyslogPrefix" "$syslog_prefix" $config_path
+ append_on_off "LocalCache" $local_cache $config_path
+ append_param_not_empty "QueryLogFile" "$query_log_file" $config_path
+
+ if [ $plugins_support_enabled -ne 0 ] && [ $block_ipv6 -ne 0 ]
+ then
+ append_yes_no "BlockIPv6" $block_ipv6 $config_path
+ elif [ $block_ipv6 -ne 0 ]
+ then
+ log_ignored_param "block_ipv6"
+ fi
+
+ if [ $plugins_support_enabled -ne 0 ] && [ -n "$blacklist" ]
+ then
+ config_list_foreach $1 'blacklist' append_blacklists $config_path
+ elif [ -n "$blacklist" ]
+ then
+ log_ignored_param "blacklist"
+ fi
+}
+
+log_ignored_param() {
+ local param_name=$1
+ logger -t dnscrypt-proxy -p user.warn "dnscrypt-proxy plugins support not present, ignoring '$param_name' parameter."
+}
+
+append_on_off() {
+ local param_name=$1
+ local param_value=$2
+ local config_path=$3
+ local value
+
+ if [ $param_value -eq 1 ]
+ then
+ value="on"
+ else
+ value="off"
+ fi
+
+ echo "$param_name $value" >> $config_path
+}
+
+append_yes_no() {
+ local param_name=$1
+ local param_value=$2
+ local config_path=$3
+ local value
+
+ if [ $param_value -eq 1 ]
+ then
+ value="yes"
+ else
+ value="no"
+ fi
+
+ echo "$param_name $value" >> $config_path
+}
+
+append_param() {
+ local param_name=$1
+ local param_value=$2
+ local config_path=$3
+
+ echo "$param_name $param_value" >> $config_path
+}
+
+append_param_not_empty() {
+ local param_name=$1
+ local param_value=$2
+ local config_path=$3
+
+ if [ ! -z "$param_value" -a "$param_value" != " " ]
+ then
+ append_param "$param_name" "$param_value" "$config_path"
+ fi
+}
+
+append_blacklists() {
+ local value="$1"
+ local config_path="$2"
+ append_param_not_empty "BlackList" "$value" $config_path
+}
+
+start_service() {
+ if [ -n "${dnscrypt_boot}" ]
+ then
+ return 0
+ fi
+ config_load dnscrypt-proxy
+ config_foreach dnscrypt_instance dnscrypt-proxy
+}
+
+service_triggers() {
+ local trigger
+ local triggerlist="$(uci_get dnscrypt-proxy.@global[0].procd_trigger)"
+
+ PROCD_RELOAD_DELAY=2000
+ if [ -n "${triggerlist}" ]
+ then
+ for trigger in ${triggerlist}
+ do
+ procd_add_interface_trigger "interface.*.up" "${trigger}" /etc/init.d/dnscrypt-proxy reload
+ done
+ else
+ procd_add_raw_trigger "interface.*.up" 2000 /etc/init.d/dnscrypt-proxy reload
+ fi
+ procd_add_reload_trigger 'dnscrypt-proxy'
+}