From b7f11c36b643fa096c2a741d853e35e08430b5c6 Mon Sep 17 00:00:00 2001 From: x3 Date: Tue, 8 Sep 2026 10:48:56 +0000 Subject: [PATCH] fix: restore files with original ownership using --chown rsync -a with sudo restores files as root. Add --chown=$(id -u):$(id -g) to restore commands so files get owned by the calling user. --- src/rsync_manager.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/rsync_manager.cpp b/src/rsync_manager.cpp index 898c794..cc55450 100644 --- a/src/rsync_manager.cpp +++ b/src/rsync_manager.cpp @@ -227,9 +227,9 @@ bool RsyncManager::restore_files(const std::string& snapshot_path, std::string cmd; if (!sudo_password.empty()) { - cmd = "echo '" + sudo_password + "' | sudo -S rsync -aAX \"" + src + "\" \"" + dst + "\" 2>&1"; + cmd = "echo '" + sudo_password + "' | sudo -S rsync -aAX --chown=$(id -u):$(id -g) \"" + src + "\" \"" + dst + "\" 2>&1"; } else { - cmd = "rsync -aAX \"" + src + "\" \"" + dst + "\" 2>&1"; + cmd = "rsync -aAX --chown=$(id -u):$(id -g) \"" + src + "\" \"" + dst + "\" 2>&1"; } g_message("restore cmd: sudo rsync -aAX \"%s\" \"%s\"", src.c_str(), dst.c_str()); @@ -293,14 +293,14 @@ bool RsyncManager::restore_full_snapshot(const std::string& snapshot_path, std::string cmd; if (!sudo_password.empty()) { - cmd = "echo '" + sudo_password + "' | sudo -S rsync -aAX --delete \"" - + snapshot_path + "/\" \"" + restore_dest + "/\" 2>&1"; + cmd = "echo '" + sudo_password + "' | sudo -S rsync -aAX --chown=$(id -u):$(id -g) --delete \"" + + snapshot_path + "/\" \"" + restore_dest + "/\" 2>&1"; } else { - cmd = "rsync -aAX --delete \"" - + snapshot_path + "/\" \"" + restore_dest + "/\" 2>&1"; + cmd = "rsync -aAX --chown=$(id -u):$(id -g) --delete \"" + + snapshot_path + "/\" \"" + restore_dest + "/\" 2>&1"; } - g_message("full restore cmd: sudo rsync -aAX --delete \"%s/\" \"%s/\"", snapshot_path.c_str(), restore_dest.c_str()); + g_message("full restore cmd: sudo rsync -aAX --chown=$(id -u):$(id -g) --delete \"%s/\" \"%s/\"", snapshot_path.c_str(), restore_dest.c_str()); if (on_progress) { RsyncProgress p;