Merge pull request #4853 from StevenHessing/noddos
[feed/packages.git] / net / dnscrypt-proxy / files / dnscrypt-proxy.init
1 #!/bin/sh /etc/rc.common
2
3 START=30
4 USE_PROCD=1
5 PROG=/usr/sbin/dnscrypt-proxy
6 CONFIG_DIR=/var/etc
7 USER=nobody
8
9 boot() {
10 dnscrypt_boot=1
11 rc_procd start_service
12 }
13
14 dnscrypt_instance() {
15 local config_path="$CONFIG_DIR/dnscrypt-proxy-$1.conf"
16 create_config_file $1 "$config_path"
17
18 procd_open_instance
19 procd_set_param command $PROG "$config_path"
20 procd_close_instance
21 }
22
23 create_config_file() {
24 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
25 local config_path="$2"
26 local plugins_support_enabled=$(dnscrypt-proxy --version | grep 'Support for plugins: present' | wc -l)
27
28 [ ! -d "$CONFIG_DIR" ] && mkdir -p "$CONFIG_DIR"
29 [ -f "$config_path" ] && rm "$config_path"
30
31 config_get address $1 'address' '127.0.0.1'
32 config_get port $1 'port' '5353'
33 config_get resolver $1 'resolver' ''
34 config_get provider_name $1 'providername' ''
35 config_get provider_key $1 'providerkey' ''
36 config_get resolver_address $1 'resolveraddress' ''
37 config_get resolvers_list $1 'resolvers_list' '/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv'
38 config_get client_key $1 'client_key' ''
39 config_get syslog_prefix $1 'syslog_prefix' 'dnscrypt-proxy'
40 config_get query_log_file $1 'query_log_file' ''
41 config_get log_level $1 'log_level' '6'
42 config_get blacklist $1 'blacklist' ''
43 config_get_bool syslog $1 'syslog' '1'
44 config_get_bool ephemeral_keys $1 'ephemeral_keys' '0'
45 config_get_bool local_cache $1 'local_cache' '0'
46 config_get_bool block_ipv6 $1 'block_ipv6' '0'
47
48 append_param_not_empty "ResolverName" "$resolver" $config_path
49 append_param "ResolversList" "$resolvers_list" $config_path
50 append_param_not_empty "ProviderName" "$provider_name" $config_path
51 append_param_not_empty "ProviderKey" "$provider_key" $config_path
52 append_param_not_empty "ResolverAddress" "$resolver_address" $config_path
53 append_param "User" "$USER" $config_path
54 append_param "LocalAddress" "$address:$port" $config_path
55 append_param_not_empty "ClientKey" "$client_key" $config_path
56 append_on_off "EphemeralKeys" $ephemeral_keys $config_path
57 append_param "LogLevel" "$log_level" $config_path
58 append_on_off "Syslog" $syslog $config_path
59 append_param "SyslogPrefix" "$syslog_prefix" $config_path
60 append_on_off "LocalCache" $local_cache $config_path
61 append_param_not_empty "QueryLogFile" "$query_log_file" $config_path
62
63 if [ $plugins_support_enabled -ne 0 ] && [ $block_ipv6 -ne 0 ]
64 then
65 append_yes_no "BlockIPv6" $block_ipv6 $config_path
66 elif [ $block_ipv6 -ne 0 ]
67 then
68 log_ignored_param "block_ipv6"
69 fi
70
71 if [ $plugins_support_enabled -ne 0 ] && [ -n "$blacklist" ]
72 then
73 config_list_foreach $1 'blacklist' append_blacklists $config_path
74 elif [ -n "$blacklist" ]
75 then
76 log_ignored_param "blacklist"
77 fi
78 }
79
80 log_ignored_param() {
81 local param_name=$1
82 logger -t dnscrypt-proxy -p user.warn "dnscrypt-proxy plugins support not present, ignoring '$param_name' parameter."
83 }
84
85 append_on_off() {
86 local param_name=$1
87 local param_value=$2
88 local config_path=$3
89 local value
90
91 if [ $param_value -eq 1 ]
92 then
93 value="on"
94 else
95 value="off"
96 fi
97
98 echo "$param_name $value" >> $config_path
99 }
100
101 append_yes_no() {
102 local param_name=$1
103 local param_value=$2
104 local config_path=$3
105 local value
106
107 if [ $param_value -eq 1 ]
108 then
109 value="yes"
110 else
111 value="no"
112 fi
113
114 echo "$param_name $value" >> $config_path
115 }
116
117 append_param() {
118 local param_name=$1
119 local param_value=$2
120 local config_path=$3
121
122 echo "$param_name $param_value" >> $config_path
123 }
124
125 append_param_not_empty() {
126 local param_name=$1
127 local param_value=$2
128 local config_path=$3
129
130 if [ ! -z "$param_value" -a "$param_value" != " " ]
131 then
132 append_param "$param_name" "$param_value" "$config_path"
133 fi
134 }
135
136 append_blacklists() {
137 local value="$1"
138 local config_path="$2"
139 append_param_not_empty "BlackList" "$value" $config_path
140 }
141
142 start_service() {
143 if [ -n "${dnscrypt_boot}" ]
144 then
145 return 0
146 fi
147 config_load dnscrypt-proxy
148 config_foreach dnscrypt_instance dnscrypt-proxy
149 }
150
151 service_triggers() {
152 local trigger
153 local triggerlist="$(uci_get dnscrypt-proxy.@global[0].procd_trigger)"
154
155 PROCD_RELOAD_DELAY=2000
156 if [ -n "${triggerlist}" ]
157 then
158 for trigger in ${triggerlist}
159 do
160 procd_add_interface_trigger "interface.*.up" "${trigger}" /etc/init.d/dnscrypt-proxy reload
161 done
162 else
163 procd_add_raw_trigger "interface.*.up" 2000 /etc/init.d/dnscrypt-proxy reload
164 fi
165 procd_add_reload_trigger 'dnscrypt-proxy'
166 }