b999d48941
We're losing the svn history (which we could probably keep if we tried hard enough) but don't consider that worthwhile. Note these tests are destructive, so run them only in a throwaway environment like a chroot, container, or vm. The tests/run.all script should be the one which launches all the tests. Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
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
|
|
egrep "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
|
|
egrep "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"
|
|
|