| #!/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' |
| } |