blob: 9a941ddf76eccd44046ec1a41895890c33e9bcf6 [file] [log] [blame]
#!/bin/sh
#
# Copyright (c) International Business Machines Corp., 2003
#
# 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 pronram; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# FILE: /var/spool/cron/allow
#
# PURPOSE: Test that /var/spool/cron/allow , only allows those in the file to run cron jobs.
#
# HISTORY:
# 04/03 Jerone Young (jyoung5@us.ibm.com)
#
iam=`whoami`
tvar=${MACHTYPE%-*}
tvar=${tvar#*-}
if [ "$tvar" = "redhat" -o "$tvar" = "redhat-linux" ]
then
CRON_ALLOW="/etc/cron.allow"
else
CRON_ALLOW="/var/spool/cron/allow"
fi
TEST_USER1="ca_user1"
TEST_USER1_HOME="/home/$TEST_USER1"
TEST_USER2="ca_user2"
TEST_USER2_HOME="/home/$TEST_USER2"
#-----------------------------------------------------------------------
# FUNCTION: do_setup
#-----------------------------------------------------------------------
do_setup() {
#move any files that may get in the way
rm /tmp/cron_allow_test > /dev/null 2>&1
rm /tmp/cron_allow_test1 > /dev/null 2>&1
mv $CRON_ALLOW $CRON_ALLOW.old > /dev/null 2>&1
#remove users for clean enviroment
su $TEST_USER1 -c "crontab -r"
su $TEST_USER2 -c "crontab -r"
rm -rf /home/$TEST_USER1
rm -rf /home/$TEST_USER2
userdel $TEST_USER1
userdel $TEST_USER2
sleep 1
#create 1st user
useradd -m -g users $TEST_USER1
if [ $? != 0 ]
then {
echo "Could not add test user $TEST_USER1 to system."
exit 1
}
fi
#create 2nd user
useradd -m -g users $TEST_USER2
if [ $? != 0 ]
then {
echo "Could not add test user $TEST_USER2 to system."
exit 1
}
fi
}
#-----------------------------------------------------------------------
# FUNCTION: do_cleanup
#-----------------------------------------------------------------------
do_cleanup(){
su $TEST_USER1 -c "crontab -r"
su $TEST_USER2 -c "crontab -r"
rm -rf /home/$TEST_USER1
rm -rf /home/$TEST_USER2
userdel $TEST_USER1
userdel $TEST_USER2
rm $CRON_ALLOW
mv $CRON_ALLOW.old $CRON_ALLOW > /dev/null 2>&1
rm /tmp/cron_allow_test >/dev/null 2>&1
}
#-----------------------------------------------------------------------
# FUNCTION: run_test
#-----------------------------------------------------------------------
run_test() {
if [ $iam = $TEST_USER1 ]
then
echo "TEST: $CRON_ALLOW should only allow those in the file to
run cron jobs."
echo "(1) TEST THAT PERSON IN $CRON_ALLOW IS ABLE TO RUN JOB."
echo "backup crontab...."
crontab -l | grep '^[^#]' > /tmp/crontab-cronallow-save-$iam
crontab - << EOF
`date '+%M' | awk '{ORS=""; print ($1+2)%60 " * * * * "}'` echo "TEST JOB RAN" >> /tmp/cron_allow_test 2>&1
EOF
if [ $? != 0 ]; then
echo Error while adding crontab for user $TEST_USER1
exit 1
fi
echo "sleeping for 130 seconds...."
sleep 130
EXIT_CODE=1
test -e /tmp/cron_allow_test && EXIT_CODE=0
if [ $EXIT_CODE = 1 ]; then
echo "Cron did not allow user to execute job , TEST FAILED"
else
echo "Cron allowed user to execute test job, TEST PASSED"
fi
echo "restore old crontab..."
crontab /tmp/crontab-cronallow-save-$iam
rm -f /tmp/crontab-cronallow-save-$iam
rm -f /tmp/cron_allow_test
exit $EXIT_CODE
fi
if [ $iam = $TEST_USER2 ]
then
echo "(2) TEST THAT PERSON NOT IN $CRON_ALLOW IS NOT ABLE TO RUN JOB."
echo "backup crontab...."
crontab -l | grep '^[^#]' > /tmp/crontab-cronallow-save-$iam
crontab - << EOF
`date '+%M' | awk '{ORS=""; print ($1+2)%60 " * * * * "}'` echo "TEST JOB RAN" >> /tmp/cron_allow_test1 2>&1
EOF
if [ $? != 0 ]; then
echo Error while adding crontab for user $TEST_USER2
fi
echo "sleeping for 130 seconds...."
sleep 130
EXIT_CODE=0
test -e /tmp/cron_allow_test1 && EXIT_CODE=1
if [ $EXIT_CODE = 0 ]; then
echo "Cron did not allow user to execute job , TEST PASSED"
else
echo "Cron allowed user to execute test job, TEST FAILED"
fi
echo "restore old crontab..."
crontab /tmp/crontab-cronallow-save-$iam
rm -f /tmp/crontab-cronallow-save-$iam
rm -f /tmp/cron_allow_test1
exit $EXIT_CODE
fi
}
#-----------------------------------------------------------------------
# FUNCTION: main
#-----------------------------------------------------------------------
if [ $iam = "root" ]
then
do_setup
echo $TEST_USER1 > $CRON_ALLOW
EXIT_CODE=0
su $TEST_USER1 -c "$0"
if [ $? != 0 ]
then
EXIT_CODE=1
fi
su $TEST_USER2 -c "$0"
if [ $? != 0 ]
then EXIT_CODE=1
fi
do_cleanup
exit $EXIT_CODE
else
run_test
fi