Mail Archives: cygwin/2005/01/13/08:42:34
--------------030504090401020901080705
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
In trying to get the newly released coreutils 5.3.0 tarball working on
cygwin, I discovered that cygwin chown() has a bug. Background:
http://lists.gnu.org/archive/html/bug-coreutils/2005-01/msg00064.html
POSIX requires that "chown() shall mark for update the st_ctime field of
the file" if successful and at least one of owner or group was not -1.
http://www.opengroup.org/onlinepubs/009695399/functions/chown.html
However, in cygwin, chown() appears to have no effect whatsoever on the
change time. (gid_t)0 is the 'root' group. I tested this on a WinXP
machine, since it appears that cygwin does not support multiple groups on
my Win98 box. The printouts in the test program allow me to narrow in on
the relevant section of the strace.
$ cd /tmp
$ cat chowntest.c
#include <unistd.h>
int main()
{
int ret = 0;
write(1, "~~~Start\n", 9);
if (chown("f", (uid_t)-1, (gid_t)0))
{
perror("failed to chown\n");
ret = 1;
}
write(1, "~~~End\n", 7);
return ret;
}
$ touch f
$ stat f
File: `f'
Size: 0 Blocks: 0 IO Block: 1024 regular empty file
Device: d47c93feh/-730033154d Inode: 61328 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1007/ eblake) Gid: ( 513/ None)
Access: 2005-01-13 06:21:53.936500000 -0700
Modify: 2005-01-13 06:21:53.936500000 -0700
Change: 2005-01-13 06:21:53.920875000 -0700
$ chowntest.exe f
~~~Start
~~~End
$ stat f
File: `f'
Size: 0 Blocks: 0 IO Block: 1024 regular empty file
Device: d47c93feh/-730033154d Inode: 61328 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1007/ eblake) Gid: ( 0/ root)
Access: 2005-01-13 06:21:53.936500000 -0700
Modify: 2005-01-13 06:21:53.936500000 -0700
Change: 2005-01-13 06:21:53.920875000 -0700
$ cygcheck -c cygwin
Cygwin Package Information
Package Version Status
cygwin 1.5.12-1 OK
$ uname -a
CYGWIN_NT-5.1 EBLAKE 1.5.12(0.116/4/2) 2004-11-10 08:34 i686 unknown
unknown Cygwin
$ strace chowntest 2>&1 | sed -e '/^~~~Start/,/^~~~End/!d' > chowntest.trace
--
Life is short - so eat dessert first!
Eric Blake ebb9 AT byu DOT net
--------------030504090401020901080705
Content-Type: text/plain;
name="chowntest.trace"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="chowntest.trace"
~~~Start
31 19799 [main] chowntest 3976 fhandler_base::write: 9 = write (0x402000, 9)
29 19828 [main] chowntest 3976 writev: 9 = write (1, 0x22EF80, 1), errno 0
34 19862 [main] chowntest 3976 normalize_posix_path: src f
28 19890 [main] chowntest 3976 cwdstuff::get: posix /tmp
35 19925 [main] chowntest 3976 cwdstuff::get: (/tmp) = cwdstuff::get (0x22EC90, 260, 1, 0), errno 0
28 19953 [main] chowntest 3976 normalize_posix_path: /tmp/f = normalize_posix_path (f)
29 19982 [main] chowntest 3976 mount_info::conv_to_win32_path: conv_to_win32_path (/tmp/f)
32 20014 [main] chowntest 3976 set_flags: flags: binary (0x2)
29 20043 [main] chowntest 3976 mount_info::conv_to_win32_path: src_path /tmp/f, dst c:\cygwin\tmp\f, flags 0xA, rc 0
81 20124 [main] chowntest 3976 symlink_info::check: not a symlink
30 20154 [main] chowntest 3976 symlink_info::check: 0 = symlink.check (c:\cygwin\tmp\f, 0x22E950) (0xA)
31 20185 [main] chowntest 3976 path_conv::check: this->path(c:\cygwin\tmp\f), has_acls(1)
31 20216 [main] chowntest 3976 build_fh_pc: fh 0x61791444
1124 21340 [main] chowntest 3976 set_process_privilege: 0 = set_process_privilege (SeRestorePrivilege, 1)
153 21493 [main] chowntest 3976 fhandler_base::open: (c:\cygwin\tmp\f, 0x110000)
80 21573 [main] chowntest 3976 fhandler_base::set_flags: flags 0x110000, supplied_bin 0x10000
31 21604 [main] chowntest 3976 fhandler_base::set_flags: O_TEXT/O_BINARY set in flags 0x10000
29 21633 [main] chowntest 3976 fhandler_base::set_flags: filemode set to binary
28 21661 [main] chowntest 3976 fhandler_base::open: 0 = NtCreateFile (0x700, E0000, c:\cygwin\tmp\f, io, NULL, 0, 7, 1, 4400, NULL, 0)
30 21691 [main] chowntest 3976 fhandler_base::open: 1 = fhandler_base::open (c:\cygwin\tmp\f, 0x110000)
30 21721 [main] chowntest 3976 fhandler_base::open_fs: 1 = fhandler_disk_file::open (c:\cygwin\tmp\f, 0x10000)
33 21754 [main] chowntest 3976 get_file_attribute: file: c:\cygwin\tmp\f
93 21847 [main] chowntest 3976 cygpsid::debug_print: get_sids_info: owner SID = S-1-5-21-854245398-1177238915-725345543-1007
44 21891 [main] chowntest 3976 cygpsid::debug_print: get_sids_info: group SID = S-1-5-32-544
52 21943 [main] chowntest 3976 get_info_from_sd: ACL 1A4, uid 1007, gid 0
100 22043 [main] chowntest 3976 alloc_sd: uid -1, gid 0, attribute 1A4
32 22075 [main] chowntest 3976 cygpsid::debug_print: alloc_sd: owner SID = S-1-5-21-854245398-1177238915-725345543-1007
32 22107 [main] chowntest 3976 cygpsid::debug_print: alloc_sd: group SID = S-1-5-32-544
46 22153 [main] chowntest 3976 alloc_sd: ACL-Size: 88
80 22233 [main] chowntest 3976 alloc_sd: Created SD-Size: 152
91 22324 [main] chowntest 3976 set_file_attribute: 0 = set_file_attribute (c:\cygwin\tmp\f, -1, 0, 0x1A4)
35 22359 [main] chowntest 3976 fhandler_base::close: closing '/tmp/f' handle 0x700
110 22469 [main] chowntest 3976 chown_worker: 0 = chown (f,...)
36 22505 [main] chowntest 3976 writev: writev (1, 0x22EF80, 1)
30 22535 [main] chowntest 3976 fhandler_base::write: binary write
~~~End
--------------030504090401020901080705
Content-Type: text/plain; charset=us-ascii
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
--------------030504090401020901080705--
- Raw text -