1#!/bin/sh -u 2# 3# Copyright (C) 2008 CAI Qian <caiqian@cclom.cn> 4# Copyright (c) International Business Machines Corp., 2003 5# 6# This program is free software; you can redistribute it and/or modify 7# it under the terms of the GNU General Public License as published by 8# the Free Software Foundation; either version 2 of the License, or 9# (at your option) any later version. 10# 11# This program is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 14# the GNU General Public License for more details. 15# 16# You should have received a copy of the GNU General Public License 17# along with this program. If not, see <http://www.gnu.org/licenses/>. 18# 19# FILE: /etc/at.deny 20# 21# PURPOSE: Test that /etc/at.deny , does not allow those in the file 22# to run cron jobs. 23# 24# HISTORY: 25# 04/03 Jerone Young (jyoung5@us.ibm.com) 26# 27 28export TCID=at_deny01 29export TST_TOTAL=1 30export TST_COUNT=1 31TMP=${TMP:=/tmp} 32deny="/etc/at.deny" 33test_user1="test_user_1" 34test_user2="test_user_2" 35test_user1_home="/home/${test_user1}" 36test_user2_home="/home/${test_user2}" 37tmpfile="$TMP/at_deny_test" 38 39if [ "$(id -ru)" = 0 ]; then 40 . cmdlib.sh 41fi 42 43#----------------------------------------------------------------------- 44# FUNCTION: do_setup 45#----------------------------------------------------------------------- 46 47do_setup() 48{ 49 # Move any files that may get in the way. 50 rm "${tmpfile}" >/dev/null 2>&1 51 mv "${deny}" "${deny}.old" >/dev/null 2>&1 52 53 # if /etc/at.allow is there, /etc/at.deny will be ignored. So, we 54 # need to remove it first. 55 if [ -f "/etc/at.allow" ]; then 56 mv /etc/at.allow /etc/at.allow.old 57 fi 58 59 # Remove users for clean enviroment. 60 rm -rf "${test_user1_home}" "${test_user2_home}" 61 userdel -r "${test_user1}" >/dev/null 2>&1 62 userdel -r "${test_user2}" >/dev/null 2>&1 63 64 # Create the 1st user. 65 if ! useradd -g users -d "${test_user1_home}" -m "${test_user1}"; then 66 echo "Could not add test user ${test_user1} to system." 67 exit 1 68 fi 69 70 # Create the 2nd user. 71 if ! useradd -g users -d "${test_user2_home}" -m "${test_user2}"; then 72 echo "Could not add test user ${test_user2} to system." 73 exit 1 74 fi 75 76 # This is the workaround for a potential bug. 77 # [Bug 468337] At Refuse to Work with Non-login Shell 78 # https://bugzilla.redhat.com/show_bug.cgi?id=468337 79 # As we are running in non-login shell now, we cannot run the script 80 # by simply given it a relative path. Therefore, we copy it to test 81 # users' home directories, and run it from there. 82 cp "$0" "${test_user1_home}/." && 83 cp "$0" "${test_user2_home}/." && 84 echo "export LTPROOT='$LTPROOT'" > "${test_user1_home}/cached_ltproot" && 85 echo "export LTPROOT='$LTPROOT'" > "${test_user2_home}/cached_ltproot" 86 if [ $? -ne 0 ]; then 87 tst_resm TBROK "Couldn't copy over req'd files for test users" 88 exit 1 89 fi 90 91 restart_daemon atd 92} 93 94#----------------------------------------------------------------------- 95# FUNCTION: do_cleanup 96#----------------------------------------------------------------------- 97do_cleanup() 98{ 99 # We forcefully remove those files anyway. Otherwise userdel may 100 # give us bad warnings. 101 rm -rf "${test_user1_home}" "${test_user2_home}" 102 userdel -r "${test_user1}" >/dev/null 2>&1 103 userdel -r "${test_user2}" >/dev/null 2>&1 104 rm "${deny}" 105 mv "${deny}.old" "${deny}" >/dev/null 2>&1 106 rm "${tmpfile}" >/dev/null 2>&1 107 108 if [ -f /etc/at.allow.old ]; then 109 mv /etc/at.allow.old /etc/at.allow 110 fi 111} 112 113#----------------------------------------------------------------------- 114# FUNCTION: run_test 115#----------------------------------------------------------------------- 116run_test() 117{ 118 if [ $(whoami) = "${test_user1}" ]; then 119 . "${test_user1_home}/cached_ltproot" || exit 1 120 export PATH="$PATH:$LTPROOT/testcases/bin" 121 122 echo "TEST: ${deny} should deny only those who are not in the file to run jobs." 123 echo "(1) TEST THAT PERSON NOT IN ${deny} IS ABLE TO RUN JOB." 124 echo "echo 'TEST JOB RAN' >>\"${tmpfile}\" 2>&1" | 125 if ! at -m now + 1 minutes; then 126 echo "Error while adding job using at for user ${test_user1}." 127 exit 1 128 fi 129 echo " Sleeping for 75 seconds...." 130 sleep 75 131 132 exit_code=1 133 test -e "${tmpfile}" && exit_code=0 134 if [ ${exit_code} -eq 1 ]; then 135 tst_resm TFAIL "At denyed user to execute test job" 136 else 137 tst_resm TPASS "At did not deny user to execute job" 138 fi 139 140 rm -f "${tmpfile}" >/dev/null 2>&1 141 exit ${exit_code} 142 143 elif [ $(whoami) = "${test_user2}" ]; then 144 145 . "${test_user2_home}/cached_ltproot" || exit 1 146 export PATH="$PATH:$LTPROOT/testcases/bin" 147 148 echo "(2) TEST THAT PERSON IN ${deny} IS NOT ABLE TO RUN JOB." 149 150 echo "echo 'TEST JOB RAN' >>\"${tmpfile}\" 2>&1" | 151 if ! at -m now + 1 minutes; then 152 echo "Expected error while adding job user at for user ${test_user2}" 153 fi 154 echo "Sleeping for 75 seconds...." 155 sleep 75 156 157 exit_code=1 158 test -e "${tmpfile}" || exit_code=0 159 if [ ${exit_code} -eq 1 ]; then 160 echo "At did not deny user to execute job, TEST FAILED." 161 else 162 echo "At denyed user to execute test job, TEST PASSED." 163 fi 164 165 rm -f "${tmpfile}" >/dev/null 2>&1 166 exit ${exit_code} 167 168 fi 169} 170 171#----------------------------------------------------------------------- 172# FUNCTION: main 173#----------------------------------------------------------------------- 174if ! type at > /dev/null; then 175 tst_resm TCONF "at command not found on system" 176elif [ "$(id -ru)" = 0 ]; then 177 if do_setup ; then 178 if ! echo "${test_user2}" >"${deny}"; then 179 exit_code=1 180 elif ! su "${test_user1}" -lc "${test_user1_home}/${0##*/}"; then 181 exit_code=1 182 elif ! su "${test_user2}" -lc "${test_user2_home}/${0##*/}"; then 183 exit_code=1 184 else 185 exit_code=0 186 fi 187 do_cleanup 188 else 189 exit_code=1 190 fi 191 exit ${exit_code} 192else 193 run_test 194 exit 0 195fi 196