#!/bin/sh

# (C) 1997 Winfried Trmper
# Provided "as is", use at your own risk
#
# WARNING: this script is by no means secure, try
#          echo -e "\necho Hallo Welt\n" >> ~/.bashrc

   META_ENV="/etc/meta/environment"
META_LIMITS="/etc/meta/limits"

  # The variables are set before 'set -a' to prevent automatic export.
ORGARGS="$@"
MYNAME=$0
old_IFS="$IFS"

function limit_resources () {
    local META_ULIMIT_OPTIONS
    if [ "$1" != "-" -a "$1" != "" ]
	then META_ULIMIT_OPTIONS="-t $1"
    fi
    shift
    if [ "$1" != "-" -a "$1" != "" ]
	then META_ULIMIT_OPTIONS="$META_ULIMIT_OPTIONS -d $1"
    fi
    shift
    if [ "$1" != "-" -a "$1" != "" ]
	then META_ULIMIT_OPTIONS="$META_ULIMIT_OPTIONS -u $1"
    fi
    shift
    if [ "$1" != "-" -a "$1" != "" ]
	then META_ULIMIT_OPTIONS="$META_ULIMIT_OPTIONS -n $1"
    fi

    if [ "$META_ULIMIT_OPTIONS" != "" ]
	then ulimit  $META_ULIMIT_OPTIONS
    fi
}


if [ -f "$META_LIMITS" ]
then
    while read META_TYPE META_USER META_CPU META_RAM META_PROCESSES META_FILES
    do
	case "$META_TYPE" in
	    "#*" | "") continue ;;
	    "user")
		if [ "$META_USER" = "*" -o "$META_USER" = "$LOGNAME" ]
		then
		    limit_resources $META_CPU $META_RAM $META_PROCESSES $META_FILES
		    break
		else
		    continue
		fi
		;;
	    "uid")
		IFS="-"
		set -- $META_USER
		IFS="$old_IFS"
		if [ "$UID" -le "$2" -a "$UID" -ge "$1" ]
		then
		    limit_resources $META_CPU $META_RAM $META_PROCESSES $META_FILES
		    break
		else
		    continue
		fi
		;;
	    *)
		# moan
		;;
	esac
    done < "$META_LIMITS"
fi

set -a
if [ -f "$META_ENV" ]
then 
	source /etc/global-environment
fi
set +a

SHELLBIN="${MYNAME%/meta/*}${MYNAME#*/meta}"
unset MYNAME

if [ -x "$SHELLBIN" ]
then
    exec $SHELLBIN $ORGARGS
else
    echo "Couldn't execute $SHELLBIN using fallback shell /bin/sh"
    exec /bin/sh
fi