GNU Core Utilities - Support: sr #107704, cp: fchown called before fchmod,...
You are not allowed to post comments on this tracker with your current authentication level.
sr #107704: cp: fchown called before fchmod, unable to set file mode
Submitter: | Milan Novak <milan123> | ||
Submitted: | Fri 27 May 2011 01:29:13 PM UTC | ||
Category: | None | Priority: | 5 - Normal |
Severity: | 4 - Important | Status: | None |
Privacy: | Public | Assigned to: | None |
Open/Closed: | Open | Operating System: | None |
No files currently attached
Depends on the following items: None found
Items that depend on this one: None found
Carbon-Copy List
There are 0 votes so far. Votes easily highlight which items people would like to see resolved in priority, independently of the priority of the item set by tracker managers.
No changes have been made to this item
Hello,
I believe that cp uses wrong order of syscalls when applying target file attributes, fchown(2) is called before fchmod(2).
As a result it looses access to target file and is unable to apply file mode correctly; error message is as follows
"cp: preserving permissions for `target': Not owner"
The problem arises when -p (preserve attributes) is present and file owner is different from user doing the copy.
Same operation using cp on hp-ux 11.31 is successfull, since hp-ux cp calls chmod(2) before chown(2).
Please let me know what do you think about changing order of fchown(2) <=> fchmod(2).
Kind Regards,
Milan
---
hp@mtest:/home/hp/coreutils $ id
uid=1058(hp) gid=20(users) groups=65535(last)
hp@mtest:/home/hp/coreutils $ ll source target
target not found
-rwxrwxrwx 1 elzu radia 32 May 20 15:50 source
hp@mtest:/home/hp/coreutils $ tusc -o tusc_hpuxcp.out /usr/bin/cp -p source target; echo $? ; ll source target
0
-rwxrwxrwx 1 elzu radia 32 May 20 15:50 source
-rwxrwxrwx 1 elzu radia 32 May 20 15:50 target
hp@mtest:/home/hp/coreutils $ rm -f target
hp@mtest:/home/hp/coreutils $ tusc -o tusc_gnucp.out coreutils-8.11/src/cp -p source target; echo $? ; ll source target
coreutils-8.11/src/cp: preserving permissions for `target': Not owner #>>>> ERROR
1
-rwxrwxrwx 1 elzu radia 32 May 20 15:50 source
-rwx------ 1 elzu radia 32 May 20 15:50 target #>>> already owned by user elzu, so chmod executed as user hp fails
hp@mtest:/home/hp/coreutils $ coreutils-8.11/src/cp --version | head -1
cp (GNU coreutils) 8.11
hp@mtest:/home/hp/coreutils $ uname -a
HP-UX mtest B.11.31 U ia64 2263078376 unlimited-user license
hp@mtest:/home/hp/coreutils $ egrep "target|chown|chmod|exit" tusc_*
tusc_hpuxcp.out:stat64("target", 0x7fffeec0) ............................................ ERR#2 ENT
tusc_hpuxcp.out:stat64("target", 0x40021110) ............................................ ERR#2 ENT
tusc_hpuxcp.out:stat64("target", 0x40021110) ............................................ ERR#2 ENT
tusc_hpuxcp.out:access("target", F_OK) .................................................. ERR#2 ENT
tusc_hpuxcp.out:open("target", O_WRONLY|O_CREAT|O_TRUNC|0x800, 0) ....................... = 6
tusc_hpuxcp.out:utime("target", 0x7fffe5f0) ............................................. = 0
tusc_hpuxcp.out:chmod("target", 0100777) ................................................ = 0
tusc_hpuxcp.out:chown("target", 1021, 1005) ............................................. = 0
tusc_hpuxcp.out:chmod("target", 0100777) ................................................ ERR#1 EPM
tusc_hpuxcp.out:exit(0) ................................................................. WIFE)
tusc_gnucp.out:stat64("target", 0x7fffedf0) ............................................ ERR#2T
tusc_gnucp.out:stat64("target", 0x7fffeac0) ............................................ ERR#2T
tusc_gnucp.out:open("target", O_WRONLY|O_CREAT|O_EXCL|0x800, 0700) ..................... = 5
tusc_gnucp.out:utime("target", 0x7fffe7a8) ............................................. = 0
tusc_gnucp.out:fchown(5, 1021, 1005) ................................................... = 0 #>>> the problem is HERE, CHOWN goes before CHMOD;
tusc_gnucp.out:fchmod(5, 0100777) ...................................................... ERR#1M #>>> this fails, since user hp is not the owner of the file anymore
tusc_gnucp.out:exit(1) ................................................................. WIFEX)