]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
fix: Only use original umask when retrieving result
authorJoel Rosdahl <joel@rosdahl.net>
Fri, 23 Dec 2022 18:03:13 +0000 (19:03 +0100)
committerJoel Rosdahl <joel@rosdahl.net>
Fri, 23 Dec 2022 18:21:41 +0000 (19:21 +0100)
This fixes a problem where the original umask would be used when storing
a remote cache result in the local cache in from_cache.

Fixes #1235.

src/ccache.cpp
test/suites/remote_file.bash

index 8f71e2a29cdb8a9b3a819c7e6af7ecfd0495946f..5179d8d3a164f3702cda5fc07be13b0aacf13511 100644 (file)
@@ -2040,8 +2040,6 @@ enum class FromCacheCallMode { direct, cpp };
 static nonstd::expected<bool, Failure>
 from_cache(Context& ctx, FromCacheCallMode mode, const Digest& result_key)
 {
-  UmaskScope umask_scope(ctx.original_umask);
-
   // The user might be disabling cache hits.
   if (ctx.config.recache()) {
     return false;
@@ -2080,6 +2078,7 @@ from_cache(Context& ctx, FromCacheCallMode mode, const Digest& result_key)
     cache_entry.verify_checksum();
     core::Result::Deserializer deserializer(cache_entry.payload());
     core::ResultRetriever result_retriever(ctx, result_key);
+    UmaskScope umask_scope(ctx.original_umask);
     deserializer.visit(result_retriever);
   } catch (core::ResultRetriever::WriteError& e) {
     LOG("Write error when retrieving result from {}: {}",
index 39184884b727e7e10b7fff8ffc96791ec5e71a85..e64afda51b317ecca3278297a38fc34b59fd26af 100644 (file)
@@ -274,7 +274,8 @@ SUITE_remote_file() {
 
     export CCACHE_UMASK=042
     CCACHE_REMOTE_STORAGE="file://$PWD/remote|umask=024"
-    rm -rf remote
+
+    # local -> remote, cache miss
     $CCACHE_COMPILE -c test.c
     expect_perm remote drwxr-x-wx # 777 & 024
     expect_perm remote/CACHEDIR.TAG -rw-r---w- # 666 & 024
@@ -282,12 +283,25 @@ SUITE_remote_file() {
     expect_perm "$(dirname "${result_file}")" drwx-wxr-x # 777 & 042
     expect_perm "${result_file}" -rw--w-r-- # 666 & 042
 
+    # local -> remote, local cache hit
     CCACHE_REMOTE_STORAGE="file://$PWD/remote|umask=026"
     $CCACHE -C >/dev/null
     rm -rf remote
     $CCACHE_COMPILE -c test.c
     expect_perm remote drwxr-x--x # 777 & 026
     expect_perm remote/CACHEDIR.TAG -rw-r----- # 666 & 026
+    result_file=$(find $CCACHE_DIR -name '*R')
+    expect_perm "$(dirname "${result_file}")" drwx-wxr-x # 777 & 042
+    expect_perm "${result_file}" -rw--w-r-- # 666 & 042
+
+    # remote -> local, remote cache hit
+    $CCACHE -C >/dev/null
+    $CCACHE_COMPILE -c test.c
+    expect_perm remote drwxr-x--x # 777 & 026
+    expect_perm remote/CACHEDIR.TAG -rw-r----- # 666 & 026
+    result_file=$(find $CCACHE_DIR -name '*R')
+    expect_perm "$(dirname "${result_file}")" drwx-wxr-x # 777 & 042
+    expect_perm "${result_file}" -rw--w-r-- # 666 & 042
 
     # -------------------------------------------------------------------------
     TEST "Sharding"