]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
fix: Only use /run/user/<UID>/ccache-tmp if writable
authorJoel Rosdahl <joel@rosdahl.net>
Sun, 3 Apr 2022 08:50:43 +0000 (10:50 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Sun, 3 Apr 2022 08:56:56 +0000 (10:56 +0200)
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

index b6c51db55b81c8daebe0fe29bd0611a82892b407..a64e2529b412749416e4ced7eb38e2b9aef4b10a 100644 (file)
@@ -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