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 

-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 

-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)