This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: bash-4.2 and symlink to folder that turns to be not executable


On Mon, Aug 01, 2011 at 02:24:25PM +0200, Corinna Vinschen wrote:
>> 
>> However, at a first glance I doubt this is a Cygwin bug.  Consider:
>> 
>> - bash 4.1.10 returns "execut"
>> - /bin/test from coreustils returns "execut"
>> - My highly professional and streamlined testcase returns the correct
>>   result:
>> 
>>     #include <stdio.h>
>>     #include <unistd.h>
>>     #include <errno.h>
>>     #include <string.h>
>> 
>>     void
>>     my_access (const char *file, int flag, const char *fname, int effective)
>>     {
>>       int ret = effective ? access (file, flag) : eaccess (file, flag);
>>       printf ("%saccess (%s, %s) = %d",
>> 	      effective ? "e" : " ", file, fname, ret);
>>       if (ret)
>> 	printf (" <%s>", strerror (errno));
>>       fputc ('\n', stdout);
>>     }
>> 
>>     int
>>     main (int argc, char**argv)
>>     {
>>       int eff;
>> 
>>       if (argc > 1)
>> 	for (eff = 0; eff < 2; ++eff)
>> 	  {
>> 	    my_access (argv[1], F_OK, "F_OK", eff);
>> 	    my_access (argv[1], R_OK, "R_OK", eff);
>> 	    my_access (argv[1], W_OK, "W_OK", eff);
>> 	    my_access (argv[1], X_OK, "X_OK", eff);
>> 	  }
>>       return 0;
>>     }
>> 
>>   $ gcc -g -o access access.c
>>   $ ./access /tmp/xxx/folder
>>    access (/tmp/xxx/folder, F_OK) = 0
>>    access (/tmp/xxx/folder, R_OK) = 0
>>    access (/tmp/xxx/folder, W_OK) = 0
>>    access (/tmp/xxx/folder, X_OK) = 0
>>   eaccess (/tmp/xxx/folder, F_OK) = 0
>>   eaccess (/tmp/xxx/folder, R_OK) = 0
>>   eaccess (/tmp/xxx/folder, W_OK) = 0
>>   eaccess (/tmp/xxx/folder, X_OK) = 0
>> 
>> 

Right, and me too. But if i replace in your testcase:
eaccess(file, flag) with
faccessat(0 /* not used if file is absolute */, file, flag, AT_EACCESS)
(and also "e" : " " with " " : "f" for clarity)
(and i have to include <fcntl.h>)

i obtain:

% ./corinna++ /tmp/xxx/folder
faccess (/tmp/xxx/folder, F_OK) = 0
faccess (/tmp/xxx/folder, R_OK) = 0
faccess (/tmp/xxx/folder, W_OK) = 0
faccess (/tmp/xxx/folder, X_OK) = -1 <Permission denied>
 access (/tmp/xxx/folder, F_OK) = 0
 access (/tmp/xxx/folder, R_OK) = 0
 access (/tmp/xxx/folder, W_OK) = 0
 access (/tmp/xxx/folder, X_OK) = 0
%

(faccess is what i find in bash-4.2/lib/sh/eaccess.c)

Is this under control?


>> Corinna
Denis Excoffier.

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]