+ 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 */
+ rprintf(FERROR, "%s %s failed: %s\n",
+ change_uid ? "chown" : "chgrp",
+ full_fname(fname), strerror(errno));
+ 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);
+ }
+ updated = 1;