On 26/01/2010 17:04, Henry Jen wrote:
>> Ruby seems to prefer to check access rights based on
>> effective uid where
>> possible and not on the actual uid and some platforms
>> provide a system
>> call to facilitate this. OpenSolaris doesn't so the
>> fallback is to
>> perform manual checks using the 'mode' of the
>> file/directory. This
>> completely ignores any ACLs that may be set on that
>> file/directory. The
>> access() system call is a standard C-library function
>> and on OpenSolaris
>> it works with ACLs but as it uses the real uid it's
>> only used as a
>> fallback if a platform has no way to determine
>> effective uid.
>> OpenSolaris does, so access() is never used.
>>
>>      
> Thanks for the helpful explanation, in this case, I think there is a solution.
>
> Just checked `man access`, and there is a faccessat() call can use AT_EACCESS 
> flag to check permission with effective uid/gid. Quoted below,
>
> The faccessat() function is equivalent to the access() func-
>       tion,  except  in  the  case where path specifies a relative
>       path. In this case the file whose  accessibility  is  to  be
>       determined  is  located relative to the directory associated
>       with the file descriptor fd instead of the  current  working
>       directory.
>
>       If faccessat() is passed in the  fd  parameter  the  special
>       value  AT_FDCWD,  defined  in<fcntl.h>, the current working
>       directory is used and the behavior is identical to a call to
>       access().
>
>       Values for flag are constructed by a bitwise-inclusive OR of
>       flags from the following list, defined in<fcntl.h>:
>
>       AT_EACCESS    The checks  for  accessibility  are  performed
>                     using the effective user and group IDs instead
>                     of the real user and group ID as required in a
>                     call to access().
>    

Ok, I stopped reading that section of the man page when I saw that it 
referred to the use of relative paths, I should have read on. I'll have 
a look and see if it can be used to solve this issue, if it can I'll bug 
it and supply a patch to the upstream community. Depending on the 
response that gets (and on other things), we could make the change in 
OpenSolaris Ruby build.

Thanks

Amanda

>
>    
>> Basically for OpenSolaris the whole thing needs a
>> rethink.
>>
>> I'll raise an RFE for it. Did you look at Daniel
>> Berger's solaris-file
>> ruby extension
>> (http://github.com/djberg96/solaris-file)?
>> Unfortunately
>> it doesn't extend File.readable?, etc, it just adds
>> ACL support.
>>
>>      
> No, I missed it somehow. Now google search finds it at github, seems to be 
> added on Jan. 17. Thanks again for the pointer.
>
> Cheers,
> Henry
>    

Reply via email to