From: Joel Rosdahl Date: Sun, 3 Apr 2022 08:50:43 +0000 (+0200) Subject: fix: Only use /run/user//ccache-tmp if writable X-Git-Tag: v4.6.1~43 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ef2e922f9642f943199138447b29ec53fa63ea68;p=thirdparty%2Fccache.git fix: Only use /run/user//ccache-tmp if writable 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. --- 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