On Sat, May 11, 2002 at 07:39:42PM -0400, Charles Wilson wrote: >Well, I've attached a patch for this bug. However, it uncovered another >problem with 'cp -p src dest', when src is not owned by the current user.
If the system UID is 18 then maybe cygwin should be translating that to 0. Especially if 0 has no meaning to windows. cgf >(AROUND LINE 1170 in fileutils/src/copy.c): > > /* Permissions of newly-created regular files were set upon `open' in > copy_reg. But don't return early if there were any special bits and > we had to run chown, because the chown must have reset those bits. */ > if ((new_dst && copied_as_regular) > && !(ran_chown && (src_mode & ~S_IRWXUGO))) > return delayed_fail; > > if ((x->preserve_chmod_bits || new_dst) > && (x->copy_as_regular || S_ISREG (src_type) || S_ISDIR (src_type))) > { > if (chmod (dst_path, get_dest_mode (x, src_mode))) <<<<< HERE > { >#ifdef __CYGWIN__ > char *p; > >The chmod command returns with ENOENT. I have no idea why; the file has >already been created at this point... > >--Chuck >diff -ur fileutils-4.1-1/src/copy.c fileutils-4.1-1a/src/copy.c >--- fileutils-4.1-1/src/copy.c Fri Jun 15 15:20:08 2001 >+++ fileutils-4.1-1a/src/copy.c Sat May 11 17:50:11 2002 >@@ -37,12 +37,22 @@ > #include "quote.h" > #include "same.h" > >+#if defined(__CYGWIN__) >+#define DO_CHOWN(Chown, File, New_uid, New_gid) \ >+ (Chown (File, New_uid, New_gid) \ >+ /* On cygwin, SYSTEM has uid = 18 and we treat that as \ >+ root. Also, cygwin returns EACCES when non-"root" \ >+ attempts to chown ... */ \ >+ && ((errno != EPERM && errno != EINVAL && errno != EACCES) || \ >+ x->myeuid == 18)) >+#else > #define DO_CHOWN(Chown, File, New_uid, New_gid) \ > (Chown (File, New_uid, New_gid) \ > /* If non-root uses -p, it's ok if we can't preserve ownership. \ > But root probably wants to know, e.g. if NFS disallows it, \ > or if the target system doesn't support file ownership. */ \ > && ((errno != EPERM && errno != EINVAL) || x->myeuid == 0)) >+#endif > > #define SAME_OWNER(A, B) ((A).st_uid == (B).st_uid) > #define SAME_GROUP(A, B) ((A).st_gid == (B).st_gid) > >-- >Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple >Bug reporting: http://cygwin.com/bugs.html >Documentation: http://cygwin.com/docs.html >FAQ: http://cygwin.com/faq/ -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/