[tor-commits] [torsocks/master] Improve torsocks script in src/bin
dgoulet at torproject.org
dgoulet at torproject.org
Fri Apr 4 22:40:26 UTC 2014
commit 3922f91c0fa2f3bf49c49098cae451d9e940068e
Author: David Goulet <dgoulet at ev0ke.net>
Date: Fri Aug 23 18:36:09 2013 -0400
Improve torsocks script in src/bin
Signed-off-by: David Goulet <dgoulet at ev0ke.net>
---
configure.ac | 2 +
src/Makefile.am | 2 +-
src/bin/Makefile.am | 10 +++
src/bin/torsocks | 154 +++++++++++++++++++++++++++++++++++++++++++++
src/bin/torsocks.in | 154 +++++++++++++++++++++++++++++++++++++++++++++
src/lib/Makefile.am | 4 --
src/lib/torsocks.in | 167 -------------------------------------------------
src/lib/usewithtor.in | 113 ---------------------------------
8 files changed, 321 insertions(+), 285 deletions(-)
diff --git a/configure.ac b/configure.ac
index 4cd3b14..d1726de 100644
--- a/configure.ac
+++ b/configure.ac
@@ -367,6 +367,8 @@ AC_SUBST(DEFAULT_INCLUDES)
AC_CONFIG_FILES([
Makefile
src/Makefile
+ src/bin/Makefile
+ src/bin/torsocks
src/common/Makefile
src/lib/Makefile
doc/Makefile
diff --git a/src/Makefile.am b/src/Makefile.am
index 67c8cf5..103337c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1 +1 @@
-SUBDIRS = common lib
+SUBDIRS = common lib bin
diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am
new file mode 100644
index 0000000..396e2c0
--- /dev/null
+++ b/src/bin/Makefile.am
@@ -0,0 +1,10 @@
+# Makefile used by configure to create real Makefile
+
+libdir = @libdir@/torsocks
+
+# Install invocation scripts
+bin_SCRIPTS = torsocks
+INSTALL_SCRIPT = $(install_sh) -c -m 755
+
+# Install main library to $(prefix)/lib/tor (must match torsocks.in)
+CLEANFILES = torsocks
diff --git a/src/bin/torsocks b/src/bin/torsocks
new file mode 100644
index 0000000..17bc458
--- /dev/null
+++ b/src/bin/torsocks
@@ -0,0 +1,154 @@
+#!/bin/sh
+# ***************************************************************************
+# * *
+# * *
+# * Copyright (C) 2008 by Robert Hogan *
+# * robert at roberthogan.net *
+# * Copyright (C) 2012 by Jacob Appelbaum <jacob at torproject.org> *
+# * Copyright (C) 2013 by David Goulet <dgoulet at ev0ke.net> *
+# * *
+# * This program is free software; you can redistribute it and/or modify *
+# * it under the terms of the GNU General Public License as published by *
+# * the Free Software Foundation; either version 2 of the License, or *
+# * (at your option) any later version. *
+# * *
+# * This program is distributed in the hope that it will be useful, *
+# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+# * GNU General Public License for more details. *
+# * *
+# * You should have received a copy of the GNU General Public License *
+# * along with this program; if not, write to the *
+# * Free Software Foundation, Inc., *
+# * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+# ***************************************************************************
+# * *
+# * This is a modified version of a source file from the Tor project. *
+# * Original copyright information follows: *
+# ***************************************************************************
+# Wrapper script for use of the torsocks(8) transparent socksification library
+#
+# There are three forms of usage for this script:
+#
+# /usr/local/bin/torsocks program [program arguments...]
+#
+# This form sets the users LD_PRELOAD environment variable so that torsocks(8)
+# will be loaded to socksify the application then executes the specified
+# program (with the provided arguments). The following simple example might
+# be used to ssh to www.foo.org via a torsocks.conf(5) configured socks server:
+#
+# /usr/local/bin/torsocks ssh www.foo.org
+#
+# The second form allows for torsocks(8) to be switched on and off for a
+# session (that is, it adds and removes torsocks from the LD_PRELOAD environment
+# variable). This form must be _sourced_ into the user's existing session
+# (and will only work with bourne shell users):
+#
+# . /usr/local/bin/torsocks on
+# telnet www.foo.org
+# . /usr/local/bin/torsocks off
+#
+# Or
+#
+# source /usr/local/bin/torsocks on
+# telnet www.foo.org
+# source /usr/local/bin/torsocks off
+#
+# This script is originally from the debian torsocks package by
+# Tamas Szerb <toma at rulez.org>
+# Modified by Robert Hogan <robert at roberthogan.net> April 16th 2006
+# Modified by David Goulet <dgoulet at ev0ke.net> 2013
+
+LIBDIR="/usr/local/${exec_prefix}/lib/torsocks"
+LIB_NAME="libtorsocks"
+SHLIB_EXT="so"
+SHLIB="${LIBDIR}/${LIB_NAME}.${SHLIB_EXT}"
+
+# Set LD_PRELOAD variable with torsocks library path.
+set_ld_preload ()
+{
+ if [ -z "$LD_PRELOAD" ]; then
+ export LD_PRELOAD="${SHLIB}"
+ else
+ echo $LD_PRELOAD | grep -q "${SHLIB}" || \
+ export LD_PRELOAD="${SHLIB} $LD_PRELOAD"
+ fi
+
+ # OS X specific env variable
+ case "$OSTYPE" in
+ darwin*)
+ export DYLD_FORCE_FLAT_NAMESPACE=1
+ ;;
+ esac
+}
+
+# Spawn a torified shell.
+tor_shell ()
+{
+ set_ld_preload
+ echo "$0: New torified shell coming right up..."
+ ${SHELL:-/bin/sh}
+}
+
+torify_app ()
+{
+ local app_path=`which $1`
+
+ # NEVER remove that line or else nothing it torified.
+ set_ld_preload
+
+ if [ -z $app_path ]; then
+ echo "ERROR: $1 cannot be found." >&2
+ exit 1
+ elif [ -u $app_path -o -g $app_path ]; then
+ echo "ERROR: $1 is set${2}id. torsocks will not work on a set${2}id executable." >&2
+ exit 1
+ fi
+
+ exec "$@"
+}
+
+usage ()
+{
+ echo "$0: Please see torsocks(1) or read comment at top of $0"
+}
+
+if [ $# -eq 0 ] ; then
+ usage
+ exit 1
+fi
+
+# Ensure libtorsocks exists,
+if [ ! -f $SHLIB ]; then
+ echo "$0: $SHLIB does not exist! Try re-installing torsocks."
+ exit
+fi
+
+case "$1" in
+ on)
+ set_ld_preload
+ ;;
+ off)
+ export LD_PRELOAD=`echo -n $LD_PRELOAD | sed "s#$SHLIB *##"`
+ if [ -z "$LD_PRELOAD" ]; then
+ unset LD_PRELOAD
+ case "$OSTYPE" in
+ darwin*)
+ unset DYLD_FORCE_FLAT_NAMESPACE
+ ;;
+ esac
+ fi
+ ;;
+ show|sh)
+ echo "LD_PRELOAD=\"$LD_PRELOAD\""
+ ;;
+ -h|--help|-?)
+ usage
+ ;;
+ --shell)
+ tor_shell
+ ;;
+ *)
+ torify_app $@
+ ;;
+esac
diff --git a/src/bin/torsocks.in b/src/bin/torsocks.in
new file mode 100644
index 0000000..c000565
--- /dev/null
+++ b/src/bin/torsocks.in
@@ -0,0 +1,154 @@
+#!/bin/sh
+# ***************************************************************************
+# * *
+# * *
+# * Copyright (C) 2008 by Robert Hogan *
+# * robert at roberthogan.net *
+# * Copyright (C) 2012 by Jacob Appelbaum <jacob at torproject.org> *
+# * Copyright (C) 2013 by David Goulet <dgoulet at ev0ke.net> *
+# * *
+# * This program is free software; you can redistribute it and/or modify *
+# * it under the terms of the GNU General Public License as published by *
+# * the Free Software Foundation; either version 2 of the License, or *
+# * (at your option) any later version. *
+# * *
+# * This program is distributed in the hope that it will be useful, *
+# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+# * GNU General Public License for more details. *
+# * *
+# * You should have received a copy of the GNU General Public License *
+# * along with this program; if not, write to the *
+# * Free Software Foundation, Inc., *
+# * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+# ***************************************************************************
+# * *
+# * This is a modified version of a source file from the Tor project. *
+# * Original copyright information follows: *
+# ***************************************************************************
+# Wrapper script for use of the torsocks(8) transparent socksification library
+#
+# There are three forms of usage for this script:
+#
+# @prefix@/bin/torsocks program [program arguments...]
+#
+# This form sets the users @LDPRELOAD@ environment variable so that torsocks(8)
+# will be loaded to socksify the application then executes the specified
+# program (with the provided arguments). The following simple example might
+# be used to ssh to www.foo.org via a torsocks.conf(5) configured socks server:
+#
+# @prefix@/bin/torsocks ssh www.foo.org
+#
+# The second form allows for torsocks(8) to be switched on and off for a
+# session (that is, it adds and removes torsocks from the @LDPRELOAD@ environment
+# variable). This form must be _sourced_ into the user's existing session
+# (and will only work with bourne shell users):
+#
+# . @prefix@/bin/torsocks on
+# telnet www.foo.org
+# . @prefix@/bin/torsocks off
+#
+# Or
+#
+# source @prefix@/bin/torsocks on
+# telnet www.foo.org
+# source @prefix@/bin/torsocks off
+#
+# This script is originally from the debian torsocks package by
+# Tamas Szerb <toma at rulez.org>
+# Modified by Robert Hogan <robert at roberthogan.net> April 16th 2006
+# Modified by David Goulet <dgoulet at ev0ke.net> 2013
+
+LIBDIR="@prefix@/@libdir@/torsocks"
+LIB_NAME="libtorsocks"
+SHLIB_EXT="@SHLIB_EXT@"
+SHLIB="${LIBDIR}/${LIB_NAME}.${SHLIB_EXT}"
+
+# Set @LDPRELOAD@ variable with torsocks library path.
+set_ld_preload ()
+{
+ if [ -z "$@LDPRELOAD@" ]; then
+ export @LDPRELOAD@="${SHLIB}"
+ else
+ echo $@LDPRELOAD@ | grep -q "${SHLIB}" || \
+ export @LDPRELOAD@="${SHLIB} $@LDPRELOAD@"
+ fi
+
+ # OS X specific env variable
+ case "$OSTYPE" in
+ darwin*)
+ export DYLD_FORCE_FLAT_NAMESPACE=1
+ ;;
+ esac
+}
+
+# Spawn a torified shell.
+tor_shell ()
+{
+ set_ld_preload
+ echo "$0: New torified shell coming right up..."
+ ${SHELL:-/bin/sh}
+}
+
+torify_app ()
+{
+ local app_path=`which $1`
+
+ # NEVER remove that line or else nothing it torified.
+ set_ld_preload
+
+ if [ -z $app_path ]; then
+ echo "ERROR: $1 cannot be found." >&2
+ exit 1
+ elif [ -u $app_path -o -g $app_path ]; then
+ echo "ERROR: $1 is set${2}id. torsocks will not work on a set${2}id executable." >&2
+ exit 1
+ fi
+
+ exec "$@"
+}
+
+usage ()
+{
+ echo "$0: Please see torsocks(1) or read comment at top of $0"
+}
+
+if [ $# -eq 0 ] ; then
+ usage
+ exit 1
+fi
+
+# Ensure libtorsocks exists,
+if [ ! -f $SHLIB ]; then
+ echo "$0: $SHLIB does not exist! Try re-installing torsocks."
+ exit
+fi
+
+case "$1" in
+ on)
+ set_ld_preload
+ ;;
+ off)
+ export @LDPRELOAD@=`echo -n $@LDPRELOAD@ | sed "s#$SHLIB *##"`
+ if [ -z "$@LDPRELOAD@" ]; then
+ unset @LDPRELOAD@
+ case "$OSTYPE" in
+ darwin*)
+ unset DYLD_FORCE_FLAT_NAMESPACE
+ ;;
+ esac
+ fi
+ ;;
+ show|sh)
+ echo "@LDPRELOAD@=\"$@LDPRELOAD@\""
+ ;;
+ -h|--help|-?)
+ usage
+ ;;
+ --shell)
+ tor_shell
+ ;;
+ *)
+ torify_app $@
+ ;;
+esac
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index f445c01..f043392 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -4,10 +4,6 @@ AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/src -I$(builddir)
libdir = @libdir@/torsocks
# Install invocation scripts
-#bin_SCRIPTS = torsocks usewithtor
-#INSTALL_SCRIPT = $(install_sh) -c -m 755
-EXTRA_DIST = torsocks.in usewithtor.in
-
lib_LTLIBRARIES = libtorsocks.la
libtorsocks_la_SOURCES = torsocks.c torsocks.h \
diff --git a/src/lib/torsocks.in b/src/lib/torsocks.in
deleted file mode 100644
index 4eaed8f..0000000
--- a/src/lib/torsocks.in
+++ /dev/null
@@ -1,167 +0,0 @@
-#!/bin/sh
-# ***************************************************************************
-# * *
-# * *
-# * Copyright (C) 2008 by Robert Hogan *
-# * robert at roberthogan.net *
-# * Copyright (C) 2012 by Jacob Appelbaum <jacob at torproject.org> *
-# * *
-# * This program is free software; you can redistribute it and/or modify *
-# * it under the terms of the GNU General Public License as published by *
-# * the Free Software Foundation; either version 2 of the License, or *
-# * (at your option) any later version. *
-# * *
-# * This program is distributed in the hope that it will be useful, *
-# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
-# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-# * GNU General Public License for more details. *
-# * *
-# * You should have received a copy of the GNU General Public License *
-# * along with this program; if not, write to the *
-# * Free Software Foundation, Inc., *
-#* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
-# ***************************************************************************
-# * *
-# * This is a modified version of a source file from the Tor project. *
-# * Original copyright information follows: *
-# ***************************************************************************
-# Wrapper script for use of the torsocks(8) transparent socksification library
-#
-# There are three forms of usage for this script:
-#
-# @prefix@/bin/torsocks program [program arguments...]
-#
-# This form sets the users @LDPRELOAD@ environment variable so that torsocks(8)
-# will be loaded to socksify the application then executes the specified
-# program (with the provided arguments). The following simple example might
-# be used to telnet to www.foo.org via a torsocks.conf(5) configured socks server:
-#
-# @prefix@/bin/torsocks telnet www.foo.org
-#
-# The second form allows for torsocks(8) to be switched on and off for a
-# session (that is, it adds and removes torsocks from the @LDPRELOAD@ environment
-# variable). This form must be _sourced_ into the user's existing session
-# (and will only work with bourne shell users):
-#
-# . @prefix@/bin/torsocks on
-# telnet www.foo.org
-# . @prefix@/bin/torsocks off
-#
-# Or
-#
-# source @prefix@/bin/torsocks on
-# telnet www.foo.org
-# source @prefix@/bin/torsocks off
-#
-# The third form creates a new shell with @LDPRELOAD@ set and is achieved
-# simply by running the script with no arguments
-#
-# @prefix@/bin/torsocks
-#
-# When finished the user can simply terminate the shell with 'exit'
-#
-# This script is originally from the debian torsocks package by
-# Tamas Szerb <toma at rulez.org>
-# Modified by Robert Hogan <robert at roberthogan.net> April 16th 2006
-
-not_found () {
- echo "ERROR: $1 cannot be found in PATH." >&2
- exit 1
-}
-
-set_id () {
- echo "ERROR: $1 is set${2}id. torsocks will not work on a set${2}id executable." >&2
- exit 1
-}
-
-if [ $# = 0 ] ; then
- echo "$0: insufficient arguments"
- exit
-fi
-
-LIBDIR="@prefix@/lib/torsocks"
-LIB_NAME="libtorsocks"
-SHLIB_EXT="@SHLIB_EXT@"
-SHLIB="${LIBDIR}/${LIB_NAME}.${SHLIB_EXT}"
-
-# Check for libtorsocks and if set the 64bit variant
-if [ ! -f $SHLIB ]; then
- LIBDIR="@prefix@/lib64/torsocks"
- SHLIB="${LIBDIR}/${LIB_NAME}.${SHLIB_EXT}"
-fi
-
-# Ensure libtorsocks exists,
-if [ ! -f $SHLIB ]; then
- echo "$0: $SHLIB does not exist! Try re-installing torsocks."
- exit
-fi
-
-case "$1" in
- on)
- if [ -z "$@LDPRELOAD@" ]
- then
- export @LDPRELOAD@="${SHLIB}"
- else
- echo $@LDPRELOAD@ | grep -q "${SHLIB}" || \
- export @LDPRELOAD@="${SHLIB} $@LDPRELOAD@"
- fi
- # FIXME: This env variable is only meaningful on Mac OSX, so it would be better
- # not to set it at all on other platforms.
- export DYLD_FORCE_FLAT_NAMESPACE=1
- ;;
- off)
- #replace '/' with '\/' in @prefix@
- # escprefix=`echo '@prefix@' |sed 's/\\//\\\\\//g'`
- # export @LDPRELOAD@=`echo -n $@LDPRELOAD@ | sed "s/$escprefix\/lib\/torsocks\/libtorsocks.so \?//"`
- export @LDPRELOAD@=`echo -n $@LDPRELOAD@ | sed "s#@prefix@/lib/torsocks/libtorsocks\. at SHLIB_EXT@ *##"`
- if [ -z "$@LDPRELOAD@" ]
- then
- unset @LDPRELOAD@
- # FIXME: This env variable is only meaningful on Mac OSX, so it would be better
- # not to set it at all on other platforms.
- unset DYLD_FORCE_FLAT_NAMESPACE=1
- fi
- ;;
- show|sh)
- echo "@LDPRELOAD@=\"$@LDPRELOAD@\""
- ;;
- -h|-?)
- echo "$0: Please see torsocks(1) or read comment at top of $0"
- ;;
- --shell)
- if [ -z "$@LDPRELOAD@" ]
- then
- export @LDPRELOAD@="${SHLIB}"
- else
- echo $@LDPRELOAD@ | grep -q "${SHLIB}" || \
- export @LDPRELOAD@="${SHLIB} $@LDPRELOAD@"
- fi
- export DYLD_FORCE_FLAT_NAMESPACE=1
- echo "torsocks: new torified shell coming right up..."
- ${SHELL:-/bin/sh}
- ;;
- *)
- if [ -z "$@LDPRELOAD@" ]
- then
- export @LDPRELOAD@="${SHLIB}"
- else
- echo $@LDPRELOAD@ | grep -q "${SHLIB}" || \
- export @LDPRELOAD@="${SHLIB} $@LDPRELOAD@"
- fi
- export DYLD_FORCE_FLAT_NAMESPACE=1
-
- if [ $# -gt 0 ]
- then
- if ! which "$1" >/dev/null 2>&1; then
- not_found $1
- elif [ -u `which "$1"` ]; then
- set_id $1 u
- elif [ -g `which "$1"` ]; then
- set_id $1 g
- fi
- exec "$@"
- fi
- ;;
-esac
-
-#EOF
diff --git a/src/lib/usewithtor.in b/src/lib/usewithtor.in
deleted file mode 100644
index e606760..0000000
--- a/src/lib/usewithtor.in
+++ /dev/null
@@ -1,113 +0,0 @@
-#! /bin/sh
-# ***************************************************************************
-# * *
-# * Copyright (C) 2008-2011 Robert Hogan <robert at roberthogan.net> *
-# * *
-# * This program is free software; you can redistribute it and/or modify *
-# * it under the terms of the GNU General Public License as published by *
-# * the Free Software Foundation; either version 2 of the License, or *
-# * (at your option) any later version. *
-# * *
-# * This program is distributed in the hope that it will be useful, *
-# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
-# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-# * GNU General Public License for more details. *
-# * *
-# * You should have received a copy of the GNU General Public License *
-# * along with this program; if not, write to the *
-# * Free Software Foundation, Inc., *
-#* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
-# ***************************************************************************
-# * *
-# * This is a modified version of a source file from the Tor project. *
-# * Original copyright notice from tsocks source file follows: *
-# ***************************************************************************
-
-# 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
-# Modified by Jacob Appelbaum <jacob at appelbaum.net> April 16th 2006
-# Modified by Marcus Griep <marcus at griep.us> June 16 2009
-# 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`"
-PROG=
-VERBOSE=
-
-usage () {
- echo "Usage: $0 [-hv] <command> [<options>...]"
-}
-
-not_found () {
- echo "ERROR: $1 cannot be found in PATH." >&2
- exit 1
-}
-
-set_id () {
- echo "ERROR: $1 is set${2}id. usewithtor will not work on a set${2}id executable." >&2
- exit 1
-}
-
-# Check for any argument list
-if [ "$#" = 0 ]; then
- usage >&2
- exit 1
-fi
-
-while [ "$1" ]; do
- case "$1" in
- -h|--h*)
- usage
- exit 0
- ;;
- -v|--v*)
- VERBOSE=YesPlease
- shift
- ;;
- *)
- break;
- esac
-done
-
-if ! which "$1" >/dev/null 2>&1; then
- not_found $1
-elif [ -u `which "$1"` ]; then
- set_id $1 u
-elif [ -g `which "$1"` ]; then
- set_id $1 g
-fi
-
-if [ -x "$TORSOCKS" ]; then
- PROG=torsocks
-else
- echo "$0: Unable to find torsocks in PATH." >&2
- echo " Perhaps you haven't installed it?" >&2
- exit 1
-fi
-
-if [ "$VERBOSE" ]; then
- echo "We're armed with the following torsocks: $TORSOCKS"
- echo "We're attempting to use $PROG for all tor action."
-fi
-
-if [ "$PROG" = "torsocks" ]; then
- # Define our torsocks config file
- TORSOCKS_CONF_FILE="@CONFDIR@/torsocks.conf"
- export TORSOCKS_CONF_FILE
-
- # Check that we've got a torsocks config file
- if [ -r "$TORSOCKS_CONF_FILE" ]; then
- exec torsocks "$@"
- else
- echo "$0: Missing torsocks configuration file \"$TORSOCKS_CONF_FILE\" - torsocks will use defaults sensible for Tor." >&2
- exec torsocks "$@"
- fi
-fi
-
-# We should have hit an exec. If we get here, we didn't exec
-echo "$0: failed to exec $PROG $@" >&2
-exit 1
More information about the tor-commits
mailing list