Btrfs: Send: preserve ownership (uid and gid) also for symlinks.
This patch also requires a change in the user-space part of "receive". We need to use "lchown" instead of "chown". We will do this in the following patch. Signed-off-by: Alex Lyakas <alex.btrfs@zadarastorage.com> if (S_ISREG(sctx->cur_inode_mode)) {
This commit is contained in:
@@ -4067,22 +4067,21 @@ static int finish_inode_if_needed(struct send_ctx *sctx, int at_end)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (!S_ISLNK(sctx->cur_inode_mode)) {
|
if (!sctx->parent_root || sctx->cur_inode_new) {
|
||||||
if (!sctx->parent_root || sctx->cur_inode_new) {
|
need_chown = 1;
|
||||||
|
if (!S_ISLNK(sctx->cur_inode_mode))
|
||||||
need_chmod = 1;
|
need_chmod = 1;
|
||||||
need_chown = 1;
|
} else {
|
||||||
} else {
|
ret = get_inode_info(sctx->parent_root, sctx->cur_ino,
|
||||||
ret = get_inode_info(sctx->parent_root, sctx->cur_ino,
|
NULL, NULL, &right_mode, &right_uid,
|
||||||
NULL, NULL, &right_mode, &right_uid,
|
&right_gid, NULL);
|
||||||
&right_gid, NULL);
|
if (ret < 0)
|
||||||
if (ret < 0)
|
goto out;
|
||||||
goto out;
|
|
||||||
|
|
||||||
if (left_uid != right_uid || left_gid != right_gid)
|
if (left_uid != right_uid || left_gid != right_gid)
|
||||||
need_chown = 1;
|
need_chown = 1;
|
||||||
if (left_mode != right_mode)
|
if (!S_ISLNK(sctx->cur_inode_mode) && left_mode != right_mode)
|
||||||
need_chmod = 1;
|
need_chmod = 1;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (S_ISREG(sctx->cur_inode_mode)) {
|
if (S_ISREG(sctx->cur_inode_mode)) {
|
||||||
|
Reference in New Issue
Block a user