On Thursday 12 June 2014 13:32:54 Richard W.M. Jones wrote:
 Previously if you were root, and you tried to change directory into
a
 directory which was not owned by you and not readable (eg. 0700
 bin:bin), it would fail.
 
 This doesn't fail on regular directories because when you are root the
 kernel just ignores permissions.
 
 Although libguestfs in general tries not to duplicate kernel code, in
 the case where we emulate the FUSE access(2) system call,
 unfortunately we have to do it by stat-ing the object and performing
 some (half-arsed) heuristics.
 
 This commit modifies the FUSE access(2) system call, so root is now
 able to chdir to any directory. 
I've taken a look at few non-trivial FUSE filesystems, and none of them 
seems to implement the access operation. I guess this means the kernel 
does all the job by itself based on the permissions.
On the other hand, removing the access operation makes test-fuse.sh fail 
in the chmod part, at:
  [ ! -x new ]
interestingly enough, the permissions of "new" at that point are fine 
(no -x), and strace'ing that test command gives
  access("new", X_OK)                     = 0
so I'm puzzled...
Interestingly enough, even trying the allow_root and allow_other FUSE 
options makes no difference.
So I'd say to commit this for now; just one note below.
 It also adds some debugging so we can debug these complex
permissions
 checks in the field if some other problem arises in future.
 [...]
 +  debug (g, "%s: "
 +         "testing access mask%s%s%s%s: "
 +         "caller UID:GID = %d:%d, "
 +         "file UID:GID = %d:%d, "
 +         "file mode = %o, "
 +         "result = %s",
 +         path,
 +         mask & R_OK ? " R_OK" : "",
 +         mask & W_OK ? " W_OK" : "",
 +         mask & X_OK ? " X_OK" : "",
 +         mask == 0 ? " 0" : "",
 +         fuse->uid, fuse->gid,
 +         statbuf.st_uid, statbuf.st_gid,
 +         statbuf.st_mode,
 +         ok ? "OK" : "EACCESS"); 
Would it be possible to split most of this debug right after the 
mount_local_getattr invocation, so early returns have this debug as 
well?
Thanks,
-- 
Pino Toscano