#!/bin/sh /etc/rc.common # Copyright (C) 2008-2011 OpenWrt.org START=50 USE_PROCD=1 CFGFILE=/var/etc/tinyproxy.conf PROG=/usr/bin/tinyproxy section_enabled() { local enabled config_get_bool enabled "$1" 'enabled' 0 [ "$enabled" -gt 0 ] } write_upstream() { local type local via local target config_get "type" "$1" "type" config_get via "$1" via config_get target "$1" target [ -n "$target" ] && target=' "'"$target"'"' [ "$type" = "proxy" ] && [ -n "$via" ] && \ echo "upstream $via$target" [ "$type" = "reject" ] && [ -n "$target" ] && \ echo "no upstream$target" } proxy_atom() { local SECTION=$1 local OPTION=$2 local DEFAULT=$3 config_get _value "$SECTION" "$OPTION" [ -z "$_value" ] && _value="$DEFAULT" [ -n "$_value" ] && echo "$OPTION $_value" } proxy_string() { local SECTION=$1 local OPTION=$2 local ALIAS=$3 local DEFAULT=$4 config_get _value "$SECTION" "$OPTION" [ -z "$_value" ] && _value="$DEFAULT" [ -n "$_value" ] && echo "${ALIAS:-${OPTION}} "'"'"$_value"'"' [ -n "$_value" ] && [ "$OPTION" = "LogFile" ] && { touch "$_value" chmod 666 "$_value" } } proxy_flag() { local SECTION=$1 local OPTION=$2 local TRUE="${3:-On}" local FALSE="${4:-Off}" config_get_bool _value "$SECTION" "$OPTION" 0 [ "$_value" -eq "1" ] && _value="$TRUE" || _value="$FALSE" echo "$OPTION $_value" } proxy_list() { local SECTION=$1 local OPTION=$2 local ENCLOSE=$3 config_get _value "$SECTION" "$OPTION" [ -n "$_value" ] && { for entry in $_value; do echo "$OPTION ${ENCLOSE}${entry}${ENCLOSE}" done } } start_proxy() { section_enabled "$1" || return 1 mkdir -p /var/etc chmod 0755 /var/etc { echo '### AUTOGENERATED CONFIGURATION' echo '### DO NOT EDIT' echo '### SEE /etc/config/tinyproxy INSTEAD' echo '' proxy_atom "$1" User proxy_atom "$1" Group proxy_atom "$1" Port 8888 proxy_atom "$1" Listen proxy_atom "$1" Bind proxy_atom "$1" Timeout proxy_string "$1" ErrorFile_400 "ErrorFile 400" proxy_string "$1" ErrorFile_403 "ErrorFile 403" proxy_string "$1" ErrorFile_404 "ErrorFile 404" proxy_string "$1" ErrorFile_408 "ErrorFile 408" proxy_string "$1" ErrorFile_503 "ErrorFile 503" proxy_string "$1" DefaultErrorFile proxy_string "$1" StatHost StatHost 127.0.0.1 proxy_string "$1" StatFile proxy_string "$1" LogFile proxy_flag "$1" Syslog proxy_atom "$1" LogLevel proxy_flag "$1" XTinyproxy proxy_atom "$1" MaxClients proxy_atom "$1" MinSpareServers proxy_atom "$1" MaxSpareServers proxy_atom "$1" StartServers proxy_atom "$1" MaxRequestsPerChild proxy_list "$1" Allow proxy_string "$1" ViaProxyName proxy_string "$1" Filter proxy_flag "$1" FilterURLs proxy_flag "$1" FilterExtended proxy_flag "$1" FilterCaseSensitive proxy_flag "$1" FilterDefaultDeny Yes No proxy_list "$1" Anonymous '"' proxy_list "$1" ConnectPort config_foreach write_upstream upstream } > "$CFGFILE" procd_open_instance procd_set_param command "$PROG" procd_append_param command -c "$CFGFILE" procd_append_param command -d procd_close_instance } start_service() { config_load 'tinyproxy' config_foreach start_proxy 'tinyproxy' }