| #!/bin/bash |
| set -eu |
| THIS="$(readlink -f "$0")" |
| THISDIR="$(dirname "${THIS}")" |
| SUT="$(dirname "${THISDIR}")/makeself.sh" |
| |
| testSuidDoesntGetBroken() { |
| # Create a directory with a file on it |
| local archive_dir="$(mktemp -dt archive_dir.XXXXXX)" |
| ( |
| cd "${archive_dir}" |
| touch deployedfile |
| ) |
| # Create the self extracting that should extract deployedfile |
| local file_name="$(mktemp -t file_name.XXXXXX)" |
| "${SUT}" --target "${archive_dir}" "${archive_dir}" "${file_name}" "suid test" |
| assertEquals $? 0 |
| # Target directory now has another file with sudo permissions |
| # This will get broken because of chown -R |
| ( |
| cd "${archive_dir}" |
| touch suidfile.bin |
| chmod +xs suidfile.bin |
| ) |
| permissionsBefore=$(stat -c %A "${archive_dir}"/suidfile.bin) |
| # We extract deployedfile, in hopes that it will not reset suid bit |
| # from suidfile.bin |
| "${file_name}" |
| assertEquals $? 0 |
| permissionsAfter=$(stat -c %A "${archive_dir}"/suidfile.bin) |
| # And we check that permissions match |
| assertEquals "${permissionsBefore}" "${permissionsAfter}" |
| rm -rf "${archive_dir}" "${file_name}" |
| } |
| |
| # Load and run shUnit2. |
| source "./shunit2/shunit2" |
| |