Mail Archives: cygwin/2002/05/11/21:10:16
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/
- Raw text -