#!/bin/bash THIS="$(realpath "$0")" HERE="$(dirname "${THIS}")" SUT="$(dirname "${HERE}")/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" assertEqual $? 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}" assertEqual $? 0 permissionsAfter=$(stat -c %A "${archive_dir}"/suidfile.bin) # And we check that permissions match assertEqual "${permissionsBefore}" "${permissionsAfter}" rm -rf "${archive_dir}" "${file_name}" } source "${HERE}/bashunit/bashunit.bash"