#!/bin/sh /etc/rc.common START=50 BIN=tcpproxy DAEMON=/usr/bin/$BIN DAEMON_ARGS="" DESC=$BIN RUN_D=/var/run CONFIG_DIR=/var/etc CONFIG_FILE=$CONFIG_DIR/$BIN.conf tcpproxy_write_config() { local cfg="$1" config_get_bool value "$cfg" disabled 0 [ "$value" -ne 0 ] && return local local_addr="" local resolv="" local local_port="" local remote_addr="" local remote_resolv="" local remote_port="" local source_addr="" config_get local_addr "$cfg" local_addr config_get local_port "$cfg" local_port config_get resolv "$cfg" resolv config_get remote_addr "$cfg" remote_addr config_get remote_port "$cfg" remote_port config_get remote_resolv "$cfg" remote_resolv config_get source_addr "$cfg" source_addr if [ -z "$local_addr" ]; then local_addr="*" fi echo "listen $local_addr $local_port" >> $CONFIG_FILE echo "{" >> $CONFIG_FILE if [ -n "$resolv" ]; then echo " resolv: $resolv;" >> $CONFIG_FILE fi echo " remote: $remote_addr $remote_port;" >> $CONFIG_FILE if [ -n "$remote_resolv" ]; then echo " remote-resolv: $remote_resolv;" >> $CONFIG_FILE fi if [ -n "$source_addr" ]; then echo " source: $source_addr;" >> $CONFIG_FILE fi echo "};" >> $CONFIG_FILE echo "" >> $CONFIG_FILE } tcpproxy_generate_args() { local cfg="$1" local option local value for option in username groupname chroot log do config_get value "$cfg" "$option" option=`echo $option | tr '_' '-'` if [ -n "$value" ]; then DAEMON_ARGS="$DAEMON_ARGS --$option $value" fi done } tcpproxy_rebuild_config() { mkdir -p $CONFIG_DIR rm -f $CONFIG_FILE touch $CONFIG_FILE config_load $BIN config_foreach tcpproxy_write_config listen } start() { echo -n "Starting $DESC " tcpproxy_rebuild_config config_foreach tcpproxy_generate_args $BIN $DAEMON $DAEMON_ARGS --config $CONFIG_FILE --write-pid "$RUN_D/$BIN.pid" echo "." } reload() { echo -n "Reloading $DESC " tcpproxy_rebuild_config kill -SIGHUP `cat "$RUN_D/$BIN.pid"` echo "." } stop() { echo -n "Stopping $DESC " kill `cat $RUN_D/$BIN.pid` > /dev/null 2>&1 echo "." }