+ if (change_gid) {
+ rprintf(FINFO,
+ "set gid of %s from %ld to %ld\n",
+ fname, (long)st->st_gid, (long)file->gid);
+ }
+ }
+ if (do_lchown(fname,
+ change_uid ? file->uid : st->st_uid,
+ change_gid ? file->gid : st->st_gid) != 0) {
+ /* shouldn't have attempted to change uid or gid
+ * unless have the privilege */
+ rsyserr(FERROR, errno, "%s %s failed",
+ change_uid ? "chown" : "chgrp",
+ full_fname(fname));
+ return 0;
+ }
+ /* a lchown had been done - we have to re-stat if the
+ * destination had the setuid or setgid bits set due
+ * to the side effect of the chown call */
+ if (st->st_mode & (S_ISUID | S_ISGID)) {
+ link_stat(fname, st);