b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame^] | 1 | #!/bin/sh /etc/rc.common |
| 2 | # Copyright (C) 2008-2011 OpenWrt.org |
| 3 | |
| 4 | START=50 |
| 5 | USE_PROCD=1 |
| 6 | |
| 7 | CFGFILE=/var/etc/tinyproxy.conf |
| 8 | PROG=/usr/bin/tinyproxy |
| 9 | |
| 10 | section_enabled() { |
| 11 | local enabled |
| 12 | config_get_bool enabled "$1" 'enabled' 0 |
| 13 | [ "$enabled" -gt 0 ] |
| 14 | } |
| 15 | |
| 16 | write_upstream() { |
| 17 | local type |
| 18 | local via |
| 19 | local target |
| 20 | |
| 21 | config_get "type" "$1" "type" |
| 22 | config_get via "$1" via |
| 23 | config_get target "$1" target |
| 24 | [ -n "$target" ] && target=' "'"$target"'"' |
| 25 | |
| 26 | [ "$type" = "proxy" ] && [ -n "$via" ] && \ |
| 27 | echo "upstream $via$target" |
| 28 | |
| 29 | [ "$type" = "reject" ] && [ -n "$target" ] && \ |
| 30 | echo "no upstream$target" |
| 31 | } |
| 32 | |
| 33 | proxy_atom() { |
| 34 | local SECTION=$1 |
| 35 | local OPTION=$2 |
| 36 | local DEFAULT=$3 |
| 37 | |
| 38 | config_get _value "$SECTION" "$OPTION" |
| 39 | [ -z "$_value" ] && _value="$DEFAULT" |
| 40 | [ -n "$_value" ] && echo "$OPTION $_value" |
| 41 | } |
| 42 | |
| 43 | proxy_string() { |
| 44 | local SECTION=$1 |
| 45 | local OPTION=$2 |
| 46 | local ALIAS=$3 |
| 47 | local DEFAULT=$4 |
| 48 | |
| 49 | config_get _value "$SECTION" "$OPTION" |
| 50 | [ -z "$_value" ] && _value="$DEFAULT" |
| 51 | [ -n "$_value" ] && echo "${ALIAS:-${OPTION}} "'"'"$_value"'"' |
| 52 | [ -n "$_value" ] && [ "$OPTION" = "LogFile" ] && { |
| 53 | touch "$_value" |
| 54 | chmod 666 "$_value" |
| 55 | } |
| 56 | } |
| 57 | |
| 58 | proxy_flag() { |
| 59 | local SECTION=$1 |
| 60 | local OPTION=$2 |
| 61 | local TRUE="${3:-On}" |
| 62 | local FALSE="${4:-Off}" |
| 63 | |
| 64 | config_get_bool _value "$SECTION" "$OPTION" 0 |
| 65 | [ "$_value" -eq "1" ] && _value="$TRUE" || _value="$FALSE" |
| 66 | echo "$OPTION $_value" |
| 67 | } |
| 68 | |
| 69 | proxy_list() { |
| 70 | local SECTION=$1 |
| 71 | local OPTION=$2 |
| 72 | local ENCLOSE=$3 |
| 73 | |
| 74 | config_get _value "$SECTION" "$OPTION" |
| 75 | [ -n "$_value" ] && { |
| 76 | for entry in $_value; do |
| 77 | echo "$OPTION ${ENCLOSE}${entry}${ENCLOSE}" |
| 78 | done |
| 79 | } |
| 80 | } |
| 81 | |
| 82 | start_proxy() { |
| 83 | section_enabled "$1" || return 1 |
| 84 | |
| 85 | mkdir -p /var/etc |
| 86 | chmod 0755 /var/etc |
| 87 | { |
| 88 | echo '### AUTOGENERATED CONFIGURATION' |
| 89 | echo '### DO NOT EDIT' |
| 90 | echo '### SEE /etc/config/tinyproxy INSTEAD' |
| 91 | echo '' |
| 92 | |
| 93 | proxy_atom "$1" User |
| 94 | proxy_atom "$1" Group |
| 95 | proxy_atom "$1" Port 8888 |
| 96 | proxy_atom "$1" Listen |
| 97 | proxy_atom "$1" Bind |
| 98 | proxy_atom "$1" Timeout |
| 99 | |
| 100 | proxy_string "$1" ErrorFile_400 "ErrorFile 400" |
| 101 | proxy_string "$1" ErrorFile_403 "ErrorFile 403" |
| 102 | proxy_string "$1" ErrorFile_404 "ErrorFile 404" |
| 103 | proxy_string "$1" ErrorFile_408 "ErrorFile 408" |
| 104 | proxy_string "$1" ErrorFile_503 "ErrorFile 503" |
| 105 | |
| 106 | proxy_string "$1" DefaultErrorFile |
| 107 | proxy_string "$1" StatHost StatHost 127.0.0.1 |
| 108 | proxy_string "$1" StatFile |
| 109 | proxy_string "$1" LogFile |
| 110 | |
| 111 | proxy_flag "$1" Syslog |
| 112 | |
| 113 | proxy_atom "$1" LogLevel |
| 114 | |
| 115 | proxy_flag "$1" XTinyproxy |
| 116 | |
| 117 | proxy_atom "$1" MaxClients |
| 118 | proxy_atom "$1" MinSpareServers |
| 119 | proxy_atom "$1" MaxSpareServers |
| 120 | proxy_atom "$1" StartServers |
| 121 | proxy_atom "$1" MaxRequestsPerChild |
| 122 | proxy_list "$1" Allow |
| 123 | |
| 124 | proxy_string "$1" ViaProxyName |
| 125 | proxy_string "$1" Filter |
| 126 | |
| 127 | proxy_flag "$1" FilterURLs |
| 128 | proxy_flag "$1" FilterExtended |
| 129 | proxy_flag "$1" FilterCaseSensitive |
| 130 | proxy_flag "$1" FilterDefaultDeny Yes No |
| 131 | |
| 132 | proxy_list "$1" Anonymous '"' |
| 133 | proxy_list "$1" ConnectPort |
| 134 | |
| 135 | config_foreach write_upstream upstream |
| 136 | } > "$CFGFILE" |
| 137 | |
| 138 | procd_open_instance |
| 139 | procd_set_param command "$PROG" |
| 140 | procd_append_param command -c "$CFGFILE" |
| 141 | procd_append_param command -d |
| 142 | procd_close_instance |
| 143 | } |
| 144 | |
| 145 | start_service() { |
| 146 | config_load 'tinyproxy' |
| 147 | config_foreach start_proxy 'tinyproxy' |
| 148 | } |