* Copyright (C) 2003-2007 Wayne Davison
*
* This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
+ * it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+ * with this program; if not, visit the http://fsf.org website.
*/
#include "rsync.h"
extern int am_starting_up;
extern int allow_8bit_chars;
extern int protocol_version;
-extern int preserve_uid;
-extern int preserve_gid;
+extern int uid_ndx;
+extern int gid_ndx;
extern int inc_recurse;
extern int inplace;
extern int flist_eof;
if (ndx < 0 || ndx >= dir_flist->count) {
ndx = NDX_FLIST_OFFSET - ndx;
rprintf(FERROR,
- "Invalid dir index: %d (%d - %d)\n",
- ndx, NDX_FLIST_OFFSET,
- NDX_FLIST_OFFSET - dir_flist->count);
+ "[%s] Invalid dir index: %d (%d - %d)\n",
+ who_am_i(), ndx, NDX_FLIST_OFFSET,
+ NDX_FLIST_OFFSET - dir_flist->count + 1);
exit_cleanup(RERR_PROTOCOL);
}
/* Send everything read from f_in to msg_fd_out. */
send_msg_int(MSG_FLIST, ndx);
start_flist_forward(f_in);
+ if (verbose > 3) {
+ rprintf(FINFO, "[%s] receiving flist for dir %d\n",
+ who_am_i(), ndx);
+ }
flist = recv_file_list(f_in);
flist->parent_ndx = ndx;
stop_flist_forward();
updated = 1;
}
- change_uid = am_root && preserve_uid && sxp->st.st_uid != F_OWNER(file);
- change_gid = preserve_gid && !(file->flags & FLAG_SKIP_GROUP)
- && sxp->st.st_gid != F_GROUP(file);
+ change_uid = am_root && uid_ndx && sxp->st.st_uid != (uid_t)F_OWNER(file);
+ change_gid = gid_ndx && !(file->flags & FLAG_SKIP_GROUP)
+ && sxp->st.st_gid != (gid_t)F_GROUP(file);
#if !defined HAVE_LCHOWN && !defined CHOWN_MODIFIES_SYMLINK
if (S_ISLNK(sxp->st.st_mode))
;
if (am_root < 0) {
;
} else if (do_lchown(fname,
- change_uid ? F_OWNER(file) : sxp->st.st_uid,
- change_gid ? F_GROUP(file) : sxp->st.st_gid) != 0) {
+ change_uid ? (uid_t)F_OWNER(file) : sxp->st.st_uid,
+ change_gid ? (gid_t)F_GROUP(file) : sxp->st.st_gid) != 0) {
/* shouldn't have attempted to change uid or gid
* unless have the privilege */
rsyserr(FERROR, errno, "%s %s failed",