2011/6/14 Jesus Sanchez <[email protected]>
>
>
> 2011/6/13 Otto Moerbeek <[email protected]>
>
>> 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;
> }