Commit 394bcdb5 authored by Wayne Davison's avatar Wayne Davison

If we sucessfully renamed a file that has multiple links to it, unlink()

it to ensure that rename() didn't lie to us (which it does if you try to
rename() a file over another link to the same file).
parent 28deecca
......@@ -158,7 +158,8 @@ static int keep_backup(char *fname)
file = make_file(fname, NULL, NO_EXCLUDES);
/* the file could have disappeared */
if (!file) return 1;
if (!file)
return 1;
/* make a complete pathname for backup file */
if (stringjoin(backup_dir_buf + backup_dir_len, backup_dir_remainder,
......@@ -234,6 +235,10 @@ static int keep_backup(char *fname)
if (robust_move(fname, backup_dir_buf) != 0) {
rsyserr(FERROR, errno, "keep_backup failed: %s -> \"%s\"",
full_fname(fname), backup_dir_buf);
} else if (st.st_nlink > 1) {
/* If someone has hard-linked the file into the backup
* dir, rename() can return success but do nothing! */
robust_unlink(fname); /* Just in case... */
}
}
set_perms(backup_dir_buf, file, NULL, 0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment