You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
3.9 KiB

  1. #!/bin/sh /etc/rc.common
  2. START=50
  3. USE_PROCD=1
  4. PROG=/usr/sbin/dnscrypt-proxy
  5. CONFIG_DIR=/var/etc
  6. USER=nobody
  7. dnscrypt_instance() {
  8. local config_path="$CONFIG_DIR/dnscrypt-proxy-$1.conf"
  9. create_config_file $1 "$config_path"
  10. procd_open_instance
  11. procd_set_param command $PROG "$config_path"
  12. procd_close_instance
  13. }
  14. create_config_file() {
  15. local address port resolver resolvers_list ephemeral_keys client_key syslog syslog_prefix local_cache query_log_file block_ipv6 provider_name provider_key resolver_address
  16. local config_path="$2"
  17. [ ! -d "$CONFIG_DIR" ] && mkdir -p "$CONFIG_DIR"
  18. [ -f "$config_path" ] && rm "$config_path"
  19. config_get address $1 'address' '127.0.0.1'
  20. config_get port $1 'port' '5353'
  21. config_get resolver $1 'resolver' ''
  22. config_get provider_name $1 'providername' ''
  23. config_get provider_key $1 'providerkey' ''
  24. config_get resolver_address $1 'resolveraddress' ''
  25. config_get resolvers_list $1 'resolvers_list' '/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv'
  26. config_get client_key $1 'client_key' ''
  27. config_get syslog_prefix $1 'syslog_prefix' 'dnscrypt-proxy'
  28. config_get query_log_file $1 'query_log_file' ''
  29. config_get_bool syslog $1 'syslog' '1'
  30. config_get_bool ephemeral_keys $1 'ephemeral_keys' '0'
  31. config_get_bool local_cache $1 'local_cache' '0'
  32. config_get_bool block_ipv6 $1 'block_ipv6' '0'
  33. append_param_not_empty "ResolverName" "$resolver" $config_path
  34. append_param "ResolversList" "$resolvers_list" $config_path
  35. append_param_not_empty "ProviderName" "$provider_name" $config_path
  36. append_param_not_empty "ProviderKey" "$provider_key" $config_path
  37. append_param_not_empty "ResolverAddress" "$resolver_address" $config_path
  38. append_param "User" "$USER" $config_path
  39. append_param "LocalAddress" "$address:$port" $config_path
  40. append_param_not_empty "ClientKey" "$client_key" $config_path
  41. append_on_off "EphemeralKeys" $ephemeral_keys $config_path
  42. append_on_off "Syslog" $syslog $config_path
  43. append_param "SyslogPrefix" "$syslog_prefix" $config_path
  44. append_on_off "LocalCache" $local_cache $config_path
  45. append_param_not_empty "QueryLogFile" "$query_log_file" $config_path
  46. append_yes_no "BlockIPv6" $block_ipv6 $config_path
  47. config_list_foreach $1 'blacklist' append_blacklists $config_path
  48. }
  49. append_on_off() {
  50. local param_name=$1
  51. local param_value=$2
  52. local config_path=$3
  53. local value
  54. if [ $param_value -eq 1 ]
  55. then
  56. value="on"
  57. else
  58. value="off"
  59. fi
  60. echo "$param_name $value" >> $config_path
  61. }
  62. append_yes_no() {
  63. local param_name=$1
  64. local param_value=$2
  65. local config_path=$3
  66. local value
  67. if [ $param_value -eq 1 ]
  68. then
  69. value="yes"
  70. else
  71. value="no"
  72. fi
  73. echo "$param_name $value" >> $config_path
  74. }
  75. append_param() {
  76. local param_name=$1
  77. local param_value=$2
  78. local config_path=$3
  79. echo "$param_name $param_value" >> $config_path
  80. }
  81. append_param_not_empty() {
  82. local param_name=$1
  83. local param_value=$2
  84. local config_path=$3
  85. if [ ! -z "$param_value" -a "$param_value" != " " ]
  86. then
  87. append_param "$param_name" "$param_value" "$config_path"
  88. fi
  89. }
  90. append_blacklists() {
  91. local value="$1"
  92. local config_path="$2"
  93. append_param_not_empty "BlackList" "$value" $config_path
  94. }
  95. start_service() {
  96. config_load dnscrypt-proxy
  97. config_foreach dnscrypt_instance dnscrypt-proxy
  98. }
  99. service_triggers() {
  100. procd_add_reload_trigger 'dnscrypt-proxy'
  101. }