Module Name: src Committed By: christos Date: Sun Mar 28 16:35:37 UTC 2021
Modified Files: src/external/bsd/atf/dist/tools: fs.cpp fs.hpp test-program.cpp Log Message: If we are running the test as an unprivileged user, hand ownership of the test directory to that user. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/external/bsd/atf/dist/tools/fs.cpp cvs rdiff -u -r1.2 -r1.3 src/external/bsd/atf/dist/tools/fs.hpp cvs rdiff -u -r1.3 -r1.4 src/external/bsd/atf/dist/tools/test-program.cpp Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/bsd/atf/dist/tools/fs.cpp diff -u src/external/bsd/atf/dist/tools/fs.cpp:1.4 src/external/bsd/atf/dist/tools/fs.cpp:1.5 --- src/external/bsd/atf/dist/tools/fs.cpp:1.4 Sat Nov 11 09:16:06 2017 +++ src/external/bsd/atf/dist/tools/fs.cpp Sun Mar 28 12:35:37 2021 @@ -683,6 +683,17 @@ impl::rmdir(const path& p) } } +void +impl::change_ownership(const path& p, const std::pair < int, int >& user) +{ + if (::chown(p.c_str(), user.first, user.second) == -1) { + std::stringstream ss; + ss << IMPL_NAME "::chown(" << p.str() << ", " << user.first << ", " + << user.second << ")"; + throw tools::system_error(ss.str(), "chown(2) failed", errno); + } +} + impl::path impl::change_directory(const path& dir) { Index: src/external/bsd/atf/dist/tools/fs.hpp diff -u src/external/bsd/atf/dist/tools/fs.hpp:1.2 src/external/bsd/atf/dist/tools/fs.hpp:1.3 --- src/external/bsd/atf/dist/tools/fs.hpp:1.2 Mon Mar 9 16:34:52 2020 +++ src/external/bsd/atf/dist/tools/fs.hpp Sun Mar 28 12:35:37 2021 @@ -368,6 +368,7 @@ void remove(const path&); void rmdir(const path&); tools::fs::path change_directory(const tools::fs::path&); +void change_ownership(const tools::fs::path&, const std::pair< int, int >&); void cleanup(const tools::fs::path&); tools::fs::path get_current_dir(void); Index: src/external/bsd/atf/dist/tools/test-program.cpp diff -u src/external/bsd/atf/dist/tools/test-program.cpp:1.3 src/external/bsd/atf/dist/tools/test-program.cpp:1.4 --- src/external/bsd/atf/dist/tools/test-program.cpp:1.3 Wed Dec 30 17:23:38 2015 +++ src/external/bsd/atf/dist/tools/test-program.cpp Sun Mar 28 12:35:37 2021 @@ -304,8 +304,10 @@ run_test_case_child(void* raw_params) const std::pair< int, int > user = tools::get_required_user( params->metadata, params->config); - if (user.first != -1 && user.second != -1) + if (user.first != -1 && user.second != -1) { + tools::fs::change_ownership(params->workdir, user); tools::user::drop_privileges(user); + } // The input 'tp' parameter may be relative and become invalid once // we change the current working directory.