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) & RETAINBITS & ~myumask)) {
+ /*
+ * 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;
}