blob: 1feac669c3d1433ed78404e8a72f0740e4822c2e [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#!/bin/sh /etc/rc.common
2# Copyright (C) 2008-2011 OpenWrt.org
3
4START=50
5USE_PROCD=1
6
7CFGFILE=/var/etc/tinyproxy.conf
8PROG=/usr/bin/tinyproxy
9
10section_enabled() {
11 local enabled
12 config_get_bool enabled "$1" 'enabled' 0
13 [ "$enabled" -gt 0 ]
14}
15
16write_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
33proxy_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
43proxy_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
58proxy_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
69proxy_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
82start_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
145start_service() {
146 config_load 'tinyproxy'
147 config_foreach start_proxy 'tinyproxy'
148}