From fce823180b1e9a1435e7d2f1eec4f468d862df24 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 18 Oct 2007 18:15:06 +0000 Subject: r15925@catbus: nickm | 2007-10-18 14:13:57 -0400 Add tor-ctrl.sh to dist, and make it fit in 80-col terminals. svn:r12029 --- contrib/Makefile.am | 2 +- contrib/tor-ctrl.sh | 208 +++++++++++++++++++++++++++------------------------- 2 files changed, 110 insertions(+), 100 deletions(-) diff --git a/contrib/Makefile.am b/contrib/Makefile.am index 6e401a0c23..e486a7bb41 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -3,7 +3,7 @@ DIST_SUBDIRS = osx suse confdir = $(sysconfdir)/tor -EXTRA_DIST = exitlist tor-tsocks.conf torify.1 tor.nsi.in tor.sh torctl rc.subr cross.sh tor-mingw.nsi.in package_nsis-mingw.sh tor.ico +EXTRA_DIST = exitlist tor-tsocks.conf torify.1 tor.nsi.in tor.sh torctl rc.subr cross.sh tor-mingw.nsi.in package_nsis-mingw.sh tor.ico tor-ctrl.sh conf_DATA = tor-tsocks.conf diff --git a/contrib/tor-ctrl.sh b/contrib/tor-ctrl.sh index 978d64f464..0bee9d8990 100644 --- a/contrib/tor-ctrl.sh +++ b/contrib/tor-ctrl.sh @@ -1,22 +1,29 @@ #!/bin/bash # -# tor-ctrl is a commandline tool for executing commands on a tor server via the controlport. -# In order to get this to work, add "ControlPort 9051" and "CookieAuthentication 1" to your torrc and reload tor. -# Or - if you want a fixed password - leave out "CookieAuthentication 1" and use the following line to create -# the appropriate HashedControlPassword entry for your torrc (you need to change yourpassword, of course): +# tor-ctrl is a commandline tool for executing commands on a tor server via +# the controlport. In order to get this to work, add "ControlPort 9051" and +# "CookieAuthentication 1" to your torrc and reload tor. Or - if you want a +# fixed password - leave out "CookieAuthentication 1" and use the following +# line to create the appropriate HashedControlPassword entry for your torrc +# (you need to change yourpassword, of course): +# # echo "HashedControlPassword $(tor --hash-password yourpassword | tail -n 1)" # -# tor-ctrl will return 0 if it was successful and 1 if not, 2 will be returned if something (telnet, xxd) is missing. -# 4 will be returned if it executed serveral commands from a file. +# tor-ctrl will return 0 if it was successful and 1 if not, 2 will be returned +# if something (telnet, xxd) is missing. 4 will be returned if it executed +# serveral commands from a file. +# +# For setting the bandwidth for specific times of the day, I suggest calling +# tor-ctrl via cron, e.g.: # -# For setting the bandwidth for specific times of the day, I suggest calling tor-ctrl via cron, e.g.: # 0 22 * * * /path/to/tor-ctrl -c "SETCONF bandwidthrate=1mb" # 0 7 * * * /path/to/tor-ctrl -c "SETCONF bandwidthrate=100kb" # -# This would set the bandwidth to 100kb at 07:00 and to 1mb at 22:00. -# You can use notations like 1mb, 1kb or the number of bytes. +# This would set the bandwidth to 100kb at 07:00 and to 1mb at 22:00. You can +# use notations like 1mb, 1kb or the number of bytes. # -# Many, many other things are possible, see http://tor.eff.org/svn/trunk/doc/spec/control-spec.txt +# Many, many other things are possible, see +# http://tor.eff.org/svn/trunk/doc/spec/control-spec.txt # # Copyright (c) 2007 by Stefan Behte # @@ -43,8 +50,9 @@ # http://ge.mine.nu/ # # 2007-10-03: First version, only changing bandwidth possible -# 2007-10-04: Renaming to "tor-ctrl", added a lot of functions, it's now a general-purpose tool -# added control_auth_cookie/controlpassword auth, getopts, program checks, readinf from file etc. +# 2007-10-04: Renaming to "tor-ctrl", added a lot of functions, it's now a +# general-purpose tool added control_auth_cookie/controlpassword +# auth, getopts, program checks, readinf from file etc. VERSION=v1 TORCTLIP=127.0.0.1 @@ -58,40 +66,41 @@ usage() cat </dev/null # are you there? - if [ "$?" != "0" ] - then - echo "$p is missing." - exit 2 - fi - done + programs="telnet" + if [ "$PASSWORD" = "" ] + then + # you only need xxd when using control_auth_cookie + programs="$programs xxd" + fi + + for p in $programs + do + which $p &>/dev/null # are you there? + if [ "$?" != "0" ] + then + echo "$p is missing." + exit 2 + fi + done } sendcmd() { - echo "$@" - sleep ${SLEEP_AFTER_CMD} + echo "$@" + sleep ${SLEEP_AFTER_CMD} } login() { - if [ "$PASSWORD" = "" ] - then - sendcmd "AUTHENTICATE $(xxd -c 32 -g 0 ${TOR_COOKIE} | awk '{print $2}')" - else - sendcmd "AUTHENTICATE \"${PASSWORD}\"" - fi + if [ "$PASSWORD" = "" ] + then + sendcmd "AUTHENTICATE $(xxd -c 32 -g 0 ${TOR_COOKIE} | awk '{print $2}')" + else + sendcmd "AUTHENTICATE \"${PASSWORD}\"" + fi } cmdpipe() { - login - sendcmd "$@" - sendcmd "QUIT" + login + sendcmd "$@" + sendcmd "QUIT" } vecho() { - if [ $VERBOSE -ge 1 ] - then - echo "$@" - fi + if [ $VERBOSE -ge 1 ] + then + echo "$@" + fi } myecho() { - STR=$(cat) - vecho "$STR" - - echo "$STR" | if [ "$(grep -c ^"250 ")" = 3 ] - then - exit 0 - else - exit 1 - fi + STR=$(cat) + vecho "$STR" + + echo "$STR" | if [ "$(grep -c ^"250 ")" = 3 ] + then + exit 0 + else + exit 1 + fi } filepipe() { - login - cat "$1" | while read line - do - sendcmd "$line" - done - sendcmd "QUIT" + login + cat "$1" | while read line + do + sendcmd "$line" + done + sendcmd "QUIT" } while getopts ":a:c:s:p:P:f:vh" Option do - case $Option in - a) TOR_COOKIE="${OPTARG}";; - c) CMD="${OPTARG}";; - s) SLEEP_AFTER_CMD="${OPTARG}";; - p) PASSWORD="${OPTARG}";; - P) TORCTLPORT="${OPTARG}";; - f) FILE="${OPTARG}";; - v) VERBOSE=1;; - h) usage;; - *) usage;; - esac + case $Option in + a) TOR_COOKIE="${OPTARG}";; + c) CMD="${OPTARG}";; + s) SLEEP_AFTER_CMD="${OPTARG}";; + p) PASSWORD="${OPTARG}";; + P) TORCTLPORT="${OPTARG}";; + f) FILE="${OPTARG}";; + v) VERBOSE=1;; + h) usage;; + *) usage;; + esac done if [ -e "$FILE" ] then - checkprogs - filepipe "$FILE" | telnet $TORCTLIP $TORCTLPORT 2>/dev/null | myecho - exit 4 + checkprogs + filepipe "$FILE" | telnet $TORCTLIP $TORCTLPORT 2>/dev/null | myecho + exit 4 fi if [ "$CMD" != "" ] then - checkprogs - cmdpipe $CMD | telnet $TORCTLIP $TORCTLPORT 2>/dev/null | myecho + checkprogs + cmdpipe $CMD | telnet $TORCTLIP $TORCTLPORT 2>/dev/null | myecho else - usage + usage fi -- cgit v1.2.3-54-g00ecf