From ef2e922f9642f943199138447b29ec53fa63ea68 Mon Sep 17 00:00:00 2001 From: Joel Rosdahl Date: Sun, 3 Apr 2022 10:50:43 +0200 Subject: [PATCH] fix: Only use /run/user//ccache-tmp if writable MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The fix for #984 addressed a problem when /run/user/0 already exists and ccache is run with fakeroot. However, it didn’t handle the case when /run/user/0/ccache-tmp already exists, which will happen for instance if the real root user has run ccache at least once. Fix this by using access(2) to verify that the ccache-tmp directory is writable. Note: Can’t just check the mode bits of the directory since they appear OK since fakeroot fakes the UID. Fixes #1044. --- src/Config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.cpp b/src/Config.cpp index b6c51db55..a64e2529b 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -1039,7 +1039,7 @@ Config::default_temporary_dir(const std::string& cache_dir) static const std::string run_user_tmp_dir = [] { #ifdef HAVE_GETEUID auto dir = FMT("/run/user/{}/ccache-tmp", geteuid()); - if (Util::create_dir(dir)) { + if (Util::create_dir(dir) && access(dir.c_str(), W_OK) == 0) { return dir; } #endif -- 2.47.2