From a5cdb6f4053428c94604b48adda1ec11081ab542 Mon Sep 17 00:00:00 2001
From: John Estabrook <jestabro@vyos.io>
Date: Sun, 31 Dec 2023 20:45:58 -0600
Subject: image-tools: T5883: preserve file owner in /config on add system
 update

(cherry picked from commit 9f66b9ccfa25f56c209d90a0ad5ad779f3963bee)
---
 src/op_mode/image_installer.py | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

(limited to 'src/op_mode')

diff --git a/src/op_mode/image_installer.py b/src/op_mode/image_installer.py
index 6a8797aec..5e2af2d97 100755
--- a/src/op_mode/image_installer.py
+++ b/src/op_mode/image_installer.py
@@ -257,6 +257,15 @@ def search_previous_installation(disks: list[str]) -> None:
 
     disk.partition_umount(image_drive)
 
+def copy_preserve_owner(src: str, dst: str, *, follow_symlinks=True):
+    if not Path(src).is_file():
+        return
+    if Path(dst).is_dir():
+        dst = Path(dst).joinpath(Path(src).name)
+    st = Path(src).stat()
+    copy(src, dst, follow_symlinks=follow_symlinks)
+    chown(dst, user=st.st_uid)
+
 
 def copy_previous_installation_data(target_dir: str) -> None:
     if Path('/mnt/config').exists():
@@ -814,7 +823,7 @@ def add_image(image_path: str, vrf: str = None, username: str = '',
             chown(target_config_dir, group='vyattacfg')
             chmod_2775(target_config_dir)
             copytree('/opt/vyatta/etc/config/', target_config_dir,
-                     dirs_exist_ok=True)
+                     copy_function=copy_preserve_owner, dirs_exist_ok=True)
         else:
             Path(target_config_dir).mkdir(parents=True)
             chown(target_config_dir, group='vyattacfg')
-- 
cgit v1.2.3