diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 02:22:06 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 02:22:06 +0000 |
commit | 741c1ef7a4f2ac316ad6e557ddbe03023413478d (patch) | |
tree | 38890f681daa26c57e865b4feca10d0ca53e1046 /tests/chsh/01/run | |
parent | Initial commit. (diff) | |
download | shadow-741c1ef7a4f2ac316ad6e557ddbe03023413478d.tar.xz shadow-741c1ef7a4f2ac316ad6e557ddbe03023413478d.zip |
Adding upstream version 1:4.5.upstream/1%4.5upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rwxr-xr-x | tests/chsh/01/run | 143 | ||||
-rwxr-xr-x | tests/chsh/01/run.exp | 38 |
2 files changed, 181 insertions, 0 deletions
diff --git a/tests/chsh/01/run b/tests/chsh/01/run new file mode 100755 index 0000000..72760c2 --- /dev/null +++ b/tests/chsh/01/run @@ -0,0 +1,143 @@ +#!/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" + diff --git a/tests/chsh/01/run.exp b/tests/chsh/01/run.exp new file mode 100755 index 0000000..4890193 --- /dev/null +++ b/tests/chsh/01/run.exp @@ -0,0 +1,38 @@ +#!/usr/bin/expect + +set timeout 5 + +if {$argc < 1} { + puts "usage: run.exp \[shell] \[user]" + exit 1 +} +set shell [lindex $argv 0] + +if {$argc == 2} { + spawn /usr/bin/chsh [lindex $argv 1] +} else { + spawn /usr/bin/chsh +} + +expect "Changing the login shell for myuser" +expect "Enter the new value, or press ENTER for the default" +expect -re "Login Shell .*\]: " +send "$shell\r" +expect "$shell\r\n" +expect { + eof { + if ([string compare $expect_out(buffer) ""]) { + set fp [open "tmp/out" w] + puts $fp "$expect_out(buffer)" + puts "\nFAIL" + exit 1 + } + } default { + puts "\nFAIL" + exit 1 + } +} + +puts "\nPASS" +exit 0 + |