2011/6/14 Jesus Sanchez <zexe...@gmail.com> > > > 2011/6/13 Otto Moerbeek <o...@drijf.net> > >> Your diff got lost, please include it inline. >> >> -Otto >> > > true, I hope gmail webclient doesn't fuck with the format: > > ------------------------------------------------------------ > > --- utils.c.orig Tue Jun 14 03:18:56 2011 > +++ utils.c Tue Jun 14 03:18:51 2011 > @@ -170,20 +170,26 @@ > return (1); > } > > - if (pflag && setfile(fs, to_fd)) > - rval = 1; > + if (pflag){ /* In case of pflag we don't try to retain S_ISUID or > S_ISGID bits and ignore the umask values */ > + if( setfile(fs, to_fd)) > + rval = 1; > +#define RETAINBITS \ > + (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO) > + } > /* > * If the source was setuid or setgid, lose the bits unless the > * copy is owned by the same user and group. > */ > -#define RETAINBITS \ > - (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO) > else if (fs->st_mode & (S_ISUID | S_ISGID) && fs->st_uid == myuid) { > if (fstat(to_fd, &to_stat)) { > warn("%s", to.p_path); > rval = 1; > } else if (fs->st_gid == to_stat.st_gid && > - fchmod(to_fd, fs->st_mode & RETAINBITS & ~myumask)) { > + fchmod(to_fd, (((S_ISUID | S_ISGID) & fs->st_mode ) | > to_stat->st_mode)
typo: it should be 'to_stat.st_mode' > & RETAINBITS & ~myumask)) { > also not sure about the use of ~myumask here, as it can change an existing file and maybe we loose bits on a 0777 file. Again this 'retainbits' stuff only applies if and only if the source file shares UID (owner) and GID with the target file and also with the calling process. > + /* > + * We preserve the target file mode and add only the > + * S_ISUID and S_ISGID bits from the source file mode > + */ > warn("%s", to.p_path); > rval = 1; > }