| #!/bin/bash |
| |
| [ -f testing.sh ] && . testing.sh |
| |
| if [ "$(id -u)" -ne 0 ] |
| then |
| echo "SKIPPED: chown (not root)" |
| continue 2>/dev/null |
| exit |
| fi |
| |
| # We chown between user "root" and the last user in /etc/passwd, |
| # and group "root" and the last group in /etc/group. |
| |
| USR="$(sed -n '$s/:.*//p' /etc/passwd)" |
| GRP="$(sed -n '$s/:.*//p' /etc/group)" |
| |
| # Set up a little testing hierarchy |
| |
| rm -rf testdir && |
| mkdir testdir && |
| touch testdir/file |
| F=testdir/file |
| |
| # Wrapper to reset groups and return results |
| |
| OUT="&& echo \$(ls -l testdir/file | awk '{print \$3,\$4}')" |
| |
| #testing "name" "command" "result" "infile" "stdin" |
| |
| # Basic smoketest |
| testing "chown initial" "chown root:root $F $OUT" "root root\n" "" "" |
| testing "chown usr:grp" "chown $USR:$GRP $F $OUT" "$USR $GRP\n" "" "" |
| testing "chown root" "chown root $F $OUT" "root $GRP\n" "" "" |
| # TODO: can we test "owner:"? |
| testing "chown :grp" "chown root:root $F && chown :$GRP $F $OUT" \ |
| "root $GRP\n" "" "" |
| testing "chown :" "chown $USR:$GRP $F && chown : $F $OUT" \ |
| "$USR $GRP\n" "" "" |
| |
| rm -rf testdir |