#!/bin/sh -
#
# Copyright (c) 1997, 1998, 1999, 2001, 2008, 2009, 2010, 2011, 2012, 2013
#      Inferno Nettverk A/S, Norway.  All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. The above copyright notice, this list of conditions and the following
#    disclaimer must appear in all copies of the software, derivative works
#    or modified versions, and any portions thereof, aswell as in all
#    supporting documentation.
# 2. All advertising materials mentioning features or use of this software
#    must display the following acknowledgement:
#      This product includes software developed by
#      Inferno Nettverk A/S, Norway.
# 3. The name of the author may not be used to endorse or promote products
#    derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# Inferno Nettverk A/S requests users of this software to return to
#
#  Software Distribution Coordinator  or  sdc@inet.no
#  Inferno Nettverk A/S
#  Oslo Research Park
#  Gaustadallen 21
#  NO-0349 Oslo
#  Norway
#
# any improvements or extensions that they make and grant Inferno Nettverk A/S
# the rights to redistribute these changes.
#
# $Id: socksify.in,v 1.43 2013/10/27 15:24:41 karls Exp $

#On systems where a supported preloading mechanism is used, you can
#do "socksify <program>" and <program> will use socks without having
#been relinked or recompiled.  This will not work on statically linked
#binaries.

NOPRELOAD=""
if test x"$NOPRELOAD" != x; then
    echo "socksify: error: dante client not built with preloading support."
    exit 1
fi

#SOCKSIFY_PRELOAD_LIBS=""
SOCKS_LIBDIR="${SOCKS_LIBDIR:-/usr/lib64}"

#platform that requires full path to libdsocks?
SOCKS_USEFULLPATH="${SOCKS_USEFULLPATH:-}"
if test x"$SOCKS_USEFULLPATH" != x; then
    #specify full path to libdsocks
    FULLPATH="${SOCKS_LIBDIR}/"
else
    unset FULLPATH
fi

#use "FLAT_NAMESPACE" on Darwin in attempt to match LD_PRELOAD behavior
if test x`uname` = xDarwin; then
    export DYLD_FORCE_FLAT_NAMESPACE=t
fi

#dlib/Makefile.am libtool flags should produce a predictable library name
#(ending in SOLIB_POSTFIX).
LIBRARY="${SOCKS_LIBRARY:-${FULLPATH}libdsocksd.so.0}"

#platform dependent LD_PRELOAD-variant format
PRELOAD_SEPERATOR=" "
PRELOAD_POSTFIX=""

PRELOAD_NAME_ONLY="1"

#set variable activating preloading (LD_PRELOAD etc.)
if test x"$PRELOAD_NAME_ONLY" = x; then
    LD_PRELOAD="${LIBRARY}${SOCKSIFY_PRELOAD_LIBS:+${PRELOAD_SEPERATOR}}${SOCKSIFY_PRELOAD_LIBS}${PRELOAD_POSTFIX:+${PRELOAD_SEPERATOR}}${PRELOAD_POSTFIX}"
else
    preload_libs=''
    for lib in "$LIBRARY" $SOCKSIFY_PRELOAD_LIBS; do
        base=`basename "$lib"`
        preload_libs="${preload_libs}${PRELOAD_SEPERATOR}${base}"
    done

    #do not run PRELOAD_POSTFIX through basename
    if test x"$PRELOAD_POSTFIX" != x; then
        preload_libs="${preload_libs}${PRELOAD_SEPERATOR}${PRELOAD_POSTFIX}"
    fi

    LD_PRELOAD="${preload_libs#${PRELOAD_SEPERATOR}}"
fi
export LD_PRELOAD

# There is no reason to set LD_LIBRARY_PATH, at least on Linux, where
# LD_PRELOAD can contain a full path to the library.  Setting the
# following breaks socksify on Linux/Alpha at least with
# binutils-2.14.90.0.7-r3 (08 Dec 2003 agriffis)
#LD_LIBRARY_PATH="${SOCKS_LIBDIR}${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"
#export LD_LIBRARY_PATH

#SunOS 64-bit library path
if test x"" != x; then
    SOCKS_LIB64DIR="${LIB64DIR:-${SOCKS_LIBDIR}/}"
    LD_LIBRARY_PATH_64="${SOCKS_LIB64DIR}${LD_LIBRARY_PATH_64:+:}${LD_LIBRARY_PATH_64}"
    export LD_LIBRARY_PATH_64
fi

exec "$@"
