summaryrefslogtreecommitdiff
path: root/test/suites/base.bash
diff options
context:
space:
mode:
authorJoel Rosdahl <joel@rosdahl.net>2020-10-28 21:26:42 +0100
committerJoel Rosdahl <joel@rosdahl.net>2020-10-28 22:15:53 +0100
commit3c201cf44ee0e0115e8197635965fb9cbc0c485d (patch)
tree2bd39f47aa123e0bcc3ad64ad8bf7c59f40a39fc /test/suites/base.bash
parent6f40db00c55cb5dab078d85cb2c5f13af13bbef1 (diff)
downloadccache-3c201cf44ee0e0115e8197635965fb9cbc0c485d.tar.gz
Restore original umask after finalize_at_exit
If umask (CCACHE_UMASK) has been configured, ccache restores the original umask before executing external programs so that the configured umask is only used for files created by ccache itself. After a refactoring of how flushing of statistics is done (dd8f65aa5589709ca55bbb782050424a0010e8b8), the original umask is restored before calling finalize_at_exit. If ccache hasn’t created a result file (i.e., the result is not a cache miss, for example when called for linking), finalize_stats_and_trigger_cleanup (called by finalize_at_exit) chooses a random stats file and implicitly also creates any missing cache directories. Such cache directories will therefore be created without applying the configured umask. Fix this by restoring the original mask after calling finalize_at_exit. Fixes #710.
Diffstat (limited to 'test/suites/base.bash')
-rw-r--r--test/suites/base.bash24
1 files changed, 21 insertions, 3 deletions
diff --git a/test/suites/base.bash b/test/suites/base.bash
index 8f2ef970..34ab75d2 100644
--- a/test/suites/base.bash
+++ b/test/suites/base.bash
@@ -952,22 +952,26 @@ EOF
saved_umask=$(umask)
umask 022
export CCACHE_UMASK=002
+ export CCACHE_TEMPDIR=$CCACHE_DIR/tmp
cat <<EOF >test.c
int main() {}
EOF
+ # A cache-miss case which affects the stats file on level 1:
+
$CCACHE -M 5 >/dev/null
$CCACHE_COMPILE -MMD -c test.c
expect_stat 'cache hit (preprocessed)' 0
expect_stat 'cache miss' 1
- result_file=$(find $CCACHE_DIR -name '*R')
- level_2_dir=$(dirname $result_file)
- level_1_dir=$(dirname $(dirname $result_file))
+ result_file=$(find "$CCACHE_DIR" -name '*R')
+ level_2_dir=$(dirname "$result_file")
+ level_1_dir=$(dirname $(dirname "$result_file"))
expect_perm test.o -rw-r--r--
expect_perm test.d -rw-r--r--
expect_perm "$CCACHE_CONFIGPATH" -rw-rw-r--
expect_perm "$CCACHE_DIR" drwxrwxr-x
+ expect_perm "$CCACHE_DIR/tmp" drwxrwxr-x
expect_perm "$level_1_dir" drwxrwxr-x
expect_perm "$level_1_dir/stats" -rw-rw-r--
expect_perm "$level_2_dir" drwxrwxr-x
@@ -986,6 +990,20 @@ EOF
expect_stat 'called for link' 1
expect_perm test -rwxr-xr-x
+ # A non-cache-miss case which affects the stats file on level 2:
+
+ rm -rf "$CCACHE_DIR"
+
+ $CCACHE_COMPILE --version >/dev/null
+ expect_stat 'no input file' 1
+ stats_file=$(find "$CCACHE_DIR" -name stats)
+ level_2_dir=$(dirname "$stats_file")
+ level_1_dir=$(dirname $(dirname "$stats_file"))
+ expect_perm "$CCACHE_DIR" drwxrwxr-x
+ expect_perm "$level_1_dir" drwxrwxr-x
+ expect_perm "$level_2_dir" drwxrwxr-x
+ expect_perm "$stats_file" -rw-rw-r--
+
umask $saved_umask
# -------------------------------------------------------------------------