arc-setup: Fix permission is not always set correctly.
This fixes issue when permission is not always correctly copied for GMS
Core caches. app_chimera subfolder has 771 original permissions but in
case of cache setup it has 751 permissions.
BUG=b:79209220
TEST=Update unit test to catch this case,
crrev.com/i/620308 + cheets_CacheValidationServer
Change-Id: I0dcc929c007de0d8844dde6ae0b6a7ad38c1aad8
Reviewed-on: https://chromium-review.googlesource.com/1043077
Commit-Ready: Yury Khmel <khmel@google.com>
Tested-by: Yury Khmel <khmel@google.com>
Reviewed-by: Yusuke Sato <yusukes@chromium.org>
(cherry picked from commit ba606ca580ee3ce24044e089ee10467cfd7fd07f)
Reviewed-on: https://chromium-review.googlesource.com/1081030
Reviewed-by: Yury Khmel <khmel@google.com>
Commit-Queue: Yury Khmel <khmel@google.com>
Trybot-Ready: Yury Khmel <khmel@google.com>
diff --git a/arc/setup/arc_setup_util.cc b/arc/setup/arc_setup_util.cc
index be3ff7d..2f224ef 100644
--- a/arc/setup/arc_setup_util.cc
+++ b/arc/setup/arc_setup_util.cc
@@ -1122,6 +1122,12 @@
PLOG(ERROR) << "Failed to set onwers " << target_path.value();
return false;
}
+
+ if (fchmodat(dirfd.get(), target_base_name.c_str(), from_stat.st_mode,
+ 0 /* flags */) < 0) {
+ PLOG(ERROR) << "Failed to set permissions " << target_path.value();
+ return false;
+ }
} else if (S_ISREG(from_stat.st_mode)) {
base::ScopedFD fd_read(open(current.value().c_str(), O_RDONLY));
if (!fd_read.is_valid()) {
diff --git a/arc/setup/arc_setup_util_unittest.cc b/arc/setup/arc_setup_util_unittest.cc
index d761e53..6b8e831 100644
--- a/arc/setup/arc_setup_util_unittest.cc
+++ b/arc/setup/arc_setup_util_unittest.cc
@@ -895,7 +895,7 @@
const base::FilePath from_fifo = from_sub_dir1.Append("fifo");
EXPECT_TRUE(InstallDirectory(0751, kTestUid, kTestGid, from_path));
- EXPECT_TRUE(InstallDirectory(0711, kTestUid, kTestGid, from_sub_dir1));
+ EXPECT_TRUE(InstallDirectory(0771, kTestUid, kTestGid, from_sub_dir1));
EXPECT_TRUE(InstallDirectory(0700, kTestUid, kTestGid, from_sub_dir2));
EXPECT_TRUE(WriteToFile(from_test_file, 0660, "testme"));
EXPECT_TRUE(base::CreateSymbolicLink(from_test_file, from_test_link));