diff --git a/contrib/torify.in b/contrib/torify.in index 5bf7d4dbcf..d9aac1d66e 100755 --- a/contrib/torify.in +++ b/contrib/torify.in @@ -3,57 +3,52 @@ # Wrapper script for use of the tsocks(8) transparent socksification library # See the tsocks(1) and torify(1) manpages. -# Copyright (c) 2004, 2006 Peter Palfrader +# Copyright (c) 2004, 2006, 2009 Peter Palfrader # Modified by Jacob Appelbaum April 16th 2006 # May be distributed under the same terms as Tor itself - -# Define and ensure we have tsocks -# XXX: what if we don't have which? -TORSOCKS="`which torsocks`" -TSOCKS="`which tsocks`" -PROG="" -if [ ! -x "$TSOCKS" ] -then - echo "$0: Can't find tsocks in PATH. Perhaps you haven't installed it?" >&2 -else - PROG=$TSOCKS -fi -if [ ! -x "$TORSOCKS" ] -then - echo "$0: Can't find torsocks in PATH. Perhaps you haven't installed it?" >&2 -else - PROG=$TORSOCKS -fi - -if [ ! -x "$PROG" ] -then - echo "$0: Can't find the required tor helpers in our PATH. Perhaps you haven't installed them?" >&2 - exit 1; -fi +# taken from Debian's Developer's Reference, 6.4 +pathfind() { + OLDIFS="$IFS" + IFS=: + for p in $PATH; do + if [ -x "$p/$*" ]; then + IFS="$OLDIFS" + return 0 + fi + done + IFS="$OLDIFS" + return 1 +} # Check for any argument list -if [ "$#" = 0 ] -then +if [ "$#" = 0 ]; then echo "Usage: $0 [-hv] [...]" >&2 exit 1 fi -if [ "$#" = 1 ] && ( [ "$1" = "-h" ] || [ "$1" = "--help" ] ) -then + +if [ "$#" = 1 ] && ( [ "$1" = "-h" ] || [ "$1" = "--help" ] ); then echo "Usage: $0 [-hv] [...]" exit 0 fi -if [ "$1" = "-v" ] || [ "$1" = "--verbose" ] -then - echo "We're armed with the following tsocks: $TSOCKS" - echo "We're armed with the following torsocks: $TORSOCKS" - echo "We're attempting to use $PROG for all tor action." +if [ "$1" = "-v" ] || [ "$1" = "--verbose" ]; then + verbose=1 shift 1 +else + verbose=0 fi -if [ "$PROG" = "$TSOCKS" ] -then +if pathfind torsocks; then + ! [ "$verbose" -ge 1 ] || echo "Using torsocks as socksifier." >&2 + + exec torsocks "$@" + echo "$0: Failed to exec torsocks $@" >&2 + exit 1 + +elif pathfind tsocks; then + ! [ "$verbose" -ge 1 ] || echo "Using tsocks as socksifier." >&2 + # Define our tsocks config file TSOCKS_CONF_FILE="/etc/tor/tor-tsocks.conf" export TSOCKS_CONF_FILE @@ -61,7 +56,7 @@ then # Check that we've got a tsocks config file if [ -r "$TSOCKS_CONF_FILE" ] then - echo "WARNING: tsocks is known to leak DNS and UDP data." >&2 + echo "WARNING: tsocks is known to leak DNS and UDP data. If you had torsocks we would use that." >&2 exec tsocks "$@" echo "$0: Failed to exec tsocks $@" >&2 exit 1 @@ -69,8 +64,8 @@ then echo "$0: Missing tsocks configuration file \"$TSOCKS_CONF_FILE\"." >&2 exit 1 fi -fi -if [ "$PROG" = "$TORSOCKS" ] -then - exec torsocks "$@" + +else + echo "$0: Can't find neither tsocks nor torsocks in your PATH. Perhaps you haven't installed either?" >&2 + exit 1 fi