#!/bin/bash

DISCOCFG=/etc/disco

if [ "$NOOP" != "" ]; then
    DISCOROOT=/var/disco/testfs/noop
else
    DISCOROOT=/var/disco/testfs/real
fi

# Cleanup old junk
mkdir -p ${DISCOROOT}
echo 0 > ${DISCOROOT}/inited
rm -rf ${DISCOROOT}/scratchfs
rm -rf ${DISCOROOT}/munge/*
rm -rf ${DISCOROOT}/dev/dev/*

# Prepare all the mountpoint directories
mkdir -p ${DISCOROOT}/chroot
mkdir -p ${DISCOROOT}/proc/proc
mkdir -p ${DISCOROOT}/sysfs/sys
mkdir -p ${DISCOROOT}/rootfs
mkdir -p ${DISCOROOT}/scratchfs
mkdir -p ${DISCOROOT}/restricted/bin
mkdir -p ${DISCOROOT}/munge/mungebin
mkdir -p ${DISCOROOT}/munge/etc
mkdir -p ${DISCOROOT}/dev/dev

# Munge all the commands explicitly allowed for the bash restricted execution environment

mkdir -p ${DISCOCFG}/restricted.d
for file in $(cat ${DISCOCFG}/restricted.d/* 2>/dev/null | grep -v "^#")
do
    if [ ! -e ${DISCOROOT}/munge/mungebin/$(basename $file) ]; then
	ln -s $file ${DISCOROOT}/munge/mungebin/$(basename $file)
    fi
done

# Munge some more restricted execution stuff, but only if we actually have $NOOP

if [ "$NOOP" != "" ]; then
    # Munge up /etc/profile
    mkdir -p ${DISCOROOT}/munge/etc
    cp /etc/profile ${DISCOROOT}/munge/etc/profile
    echo "export PATH=${DISCOROOT}/restricted/bin:${DISCOROOT}/munge/mungebin" >> ${DISCOROOT}/munge/etc/profile
    cp /etc/bashrc ${DISCOROOT}/munge/etc/bashrc
    echo "export PATH=${DISCOROOT}/restricted/bin:${DISCOROOT}/munge/mungebin" >> ${DISCOROOT}/munge/etc/bashrc

    # Make default wrapper
    echo -e "#!/bin/bash\necho \"warning: Would execute : \$(basename \$0) \$@\"" > ${DISCOROOT}/restricted/bin/_disco_restricted_cmd
    chmod +x ${DISCOROOT}/restricted/bin/_disco_restricted_cmd

    # Now link everything to the default wrapper
    for dir in $(echo $PATH | sed s/":"/" "/g)
    do
	for file in ${dir}/*
	do
	    FNAME=$(basename $file)
	    if [ "$FNAME" != "bash" ] && [ -x $file ] && [ ! -x ${DISCOROOT}/munge/mungebin/$FNAME ] ; then
		ln -s ${DISCOROOT}/restricted/bin/_disco_restricted_cmd ${DISCOROOT}/munge/mungebin/${FNAME}
	    fi
	done
    done
fi

# We need SOME special files in /dev like /dev/null, so make them here

mknod ${DISCOROOT}/dev/dev/null c 1 3
chmod 666 ${DISCOROOT}/dev/dev/null

echo 1 > ${DISCOROOT}/inited