"egrep" is an obsolete alias for grep -E and newer greps will warn on usage of egrep, so let's just swap it out. Signed-off-by: Sam James <sam@gentoo.org>
		
			
				
	
	
		
			144 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
set -e
 | 
						|
 | 
						|
cd $(dirname $0)
 | 
						|
 | 
						|
# Rational:
 | 
						|
# Test chage options
 | 
						|
 | 
						|
# no testsuite password
 | 
						|
# root password: rootF00barbaz
 | 
						|
# myuser password: myuserF00barbaz
 | 
						|
 | 
						|
save()
 | 
						|
{
 | 
						|
	[ ! -d tmp ] && mkdir tmp
 | 
						|
	for i in passwd group shadow gshadow shells
 | 
						|
	do
 | 
						|
		[ -f /etc/$i  ] && cp /etc/$i  tmp/$i
 | 
						|
		[ -f /etc/$i- ] && cp /etc/$i- tmp/$i-
 | 
						|
	done
 | 
						|
 | 
						|
	true
 | 
						|
}
 | 
						|
 | 
						|
restore()
 | 
						|
{
 | 
						|
	for i in passwd group shadow gshadow shells
 | 
						|
	do
 | 
						|
		[ -f tmp/$i  ] && cp tmp/$i  /etc/$i  && rm tmp/$i
 | 
						|
		[ -f tmp/$i- ] && cp tmp/$i- /etc/$i- && rm tmp/$i-
 | 
						|
	done
 | 
						|
	rm -f tmp/out
 | 
						|
	rm -f tmp/shell tmp/sh:ell
 | 
						|
	rmdir tmp
 | 
						|
}
 | 
						|
 | 
						|
save
 | 
						|
 | 
						|
# restore the files on exit
 | 
						|
trap 'if [ "$?" != "0" ]; then echo "FAIL"; fi; restore' 0
 | 
						|
 | 
						|
for i in passwd group shadow gshadow shells
 | 
						|
do
 | 
						|
	cp data/$i /etc
 | 
						|
done
 | 
						|
 | 
						|
echo -n "changing to a restricted shell, by root..."
 | 
						|
cp /bin/bash tmp/shell
 | 
						|
chsh -s $(pwd)/tmp/shell myuser
 | 
						|
ent=$(getent passwd myuser)
 | 
						|
[ "$ent" = "myuser:x:424242:424242::/home:"$(pwd)"/tmp/shell" ] || exit 1
 | 
						|
echo "OK"
 | 
						|
 | 
						|
echo -n "changing from a restricted shell, by myuser..."
 | 
						|
su myuser -c "chsh -s /bin/bash" 2> tmp/out && exit 1
 | 
						|
ent=$(getent passwd myuser)
 | 
						|
[ "$ent" = "myuser:x:424242:424242::/home:"$(pwd)"/tmp/shell" ] || exit 1
 | 
						|
diff -au data/chsh1 tmp/out
 | 
						|
echo "OK"
 | 
						|
 | 
						|
echo -n "changing from a restricted shell, by root..."
 | 
						|
chsh -s /bin/bash myuser
 | 
						|
ent=$(getent passwd myuser)
 | 
						|
[ "$ent" = "myuser:x:424242:424242::/home:/bin/bash" ] || exit 1
 | 
						|
echo "OK"
 | 
						|
 | 
						|
# Need to be done by expect now (chage asks for a passwd if not root)
 | 
						|
#echo -n "changing to a restricted shell, by myuser..."
 | 
						|
#su myuser -c "chsh -s $(pwd)/tmp/shell" 2> tmp/out && exit 1
 | 
						|
#ent=$(getent passwd myuser)
 | 
						|
#[ "$ent" = "myuser:x:424242:424242::/home:/bin/bash" ] || exit 1
 | 
						|
#grep "/tmp/shell is an invalid shell." tmp/out > /dev/null
 | 
						|
#[ $(wc -l tmp/out| cut -d" " -f1) = "1" ] || exit 1
 | 
						|
#echo "OK"
 | 
						|
 | 
						|
#echo -n "changing to a new valid shell, by myuser..."
 | 
						|
#echo $(pwd)/tmp/shell >> /tmp/shells
 | 
						|
#su myuser -c "chsh -s $(pwd)/tmp/shell" 2> tmp/out && exit 1
 | 
						|
#ent=$(getent passwd myuser)
 | 
						|
#[ "$ent" = "myuser:x:424242:424242::/home:/bin/bash" ] || exit 1
 | 
						|
#grep "/tmp/shell is an invalid shell." tmp/out > /dev/null
 | 
						|
#[ $(wc -l tmp/out| cut -d" " -f1) = "1" ] || exit 1
 | 
						|
#echo "OK"
 | 
						|
 | 
						|
echo -n "changing another user's shell..."
 | 
						|
su myuser -c "chsh -s /bin/sh myuser2" 2> tmp/out && exit 1
 | 
						|
ent=$(getent passwd myuser2)
 | 
						|
[ "$ent" = "myuser2:x:424243:424242::/home:/bin/sh" ] || exit 1
 | 
						|
diff -au data/chsh2 tmp/out
 | 
						|
echo "OK"
 | 
						|
 | 
						|
#echo -n "changing to a non-executable shell..."
 | 
						|
#chmod a-x tmp/shell
 | 
						|
#su myuser -c "chsh -s $(pwd)/tmp/shell myuser" 2> tmp/out && exit 1
 | 
						|
#ent=$(getent passwd myuser)
 | 
						|
#[ "$ent" = "myuser:x:424242:424242::/home:/bin/bash" ] || exit 1
 | 
						|
#grep "/tmp/shell is an invalid shell." tmp/out > /dev/null
 | 
						|
#[ $(wc -l tmp/out| cut -d" " -f1) = "1" ] || exit 1
 | 
						|
#echo "OK"
 | 
						|
 | 
						|
echo -n "changing to an invalid shell name..."
 | 
						|
cp /bin/bash tmp/sh:ell
 | 
						|
echo $(pwd)/tmp/sh:ell >> /etc/shells
 | 
						|
chsh -s $(pwd)/tmp/sh:ell myuser 2> tmp/out && exit 1
 | 
						|
ent=$(getent passwd myuser)
 | 
						|
[ "$ent" = "myuser:x:424242:424242::/home:/bin/bash" ] || exit 1
 | 
						|
grep -E "chsh: Invalid entry: .*/tmp/sh:ell" tmp/out > /dev/null
 | 
						|
[ $(wc -l tmp/out| cut -d" " -f1) = "1" ] || exit 1
 | 
						|
echo "OK"
 | 
						|
 | 
						|
echo "testing the interactive mode (1)..."
 | 
						|
rm -f tmp/out
 | 
						|
./run.exp /bin/bash myuser
 | 
						|
[ -f tmp/out ] && exit 1
 | 
						|
ent=$(getent passwd myuser)
 | 
						|
[ "$ent" = "myuser:x:424242:424242::/home:/bin/bash" ] || exit 1
 | 
						|
echo "OK"
 | 
						|
 | 
						|
#echo "testing the interactive mode (2)..."
 | 
						|
#rm -f tmp/out
 | 
						|
#su myuser -c "./run.exp /bin/bash"
 | 
						|
#[ -f tmp/out ] && exit 1
 | 
						|
#ent=$(getent passwd myuser)
 | 
						|
#[ "$ent" = "myuser:x:424242:424242::/home:/bin/bash" ] || exit 1
 | 
						|
#echo "OK"
 | 
						|
 | 
						|
echo "testing the interactive mode (3)..."
 | 
						|
rm -f tmp/out
 | 
						|
./run.exp /bin/sh myuser
 | 
						|
[ -f tmp/out ] && exit 1
 | 
						|
ent=$(getent passwd myuser)
 | 
						|
[ "$ent" = "myuser:x:424242:424242::/home:/bin/sh" ] || exit 1
 | 
						|
echo "OK"
 | 
						|
 | 
						|
echo "testing the interactive mode (4)..."
 | 
						|
rm -f tmp/out
 | 
						|
./run.exp $(pwd)/tmp/sh:ell myuser && exit 1
 | 
						|
grep -E "chsh: Invalid entry: .*/tmp/sh:ell" tmp/out > /dev/null
 | 
						|
ent=$(getent passwd myuser)
 | 
						|
[ "$ent" = "myuser:x:424242:424242::/home:/bin/sh" ] || exit 1
 | 
						|
echo "OK"
 | 
						|
 |