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.