summaryrefslogtreecommitdiff
path: root/0019-get-the-realpath-of-the-host-path-for-archive-when-c.patch
diff options
context:
space:
mode:
Diffstat (limited to '0019-get-the-realpath-of-the-host-path-for-archive-when-c.patch')
-rw-r--r--0019-get-the-realpath-of-the-host-path-for-archive-when-c.patch63
1 files changed, 63 insertions, 0 deletions
diff --git a/0019-get-the-realpath-of-the-host-path-for-archive-when-c.patch b/0019-get-the-realpath-of-the-host-path-for-archive-when-c.patch
new file mode 100644
index 0000000..e1a2fda
--- /dev/null
+++ b/0019-get-the-realpath-of-the-host-path-for-archive-when-c.patch
@@ -0,0 +1,63 @@
+From 96dfd32ee5d9a133ad63af13723402f10cd7cf7b Mon Sep 17 00:00:00 2001
+From: zhongtao <zhongtao17@huawei.com>
+Date: Mon, 11 Mar 2024 15:50:45 +0800
+Subject: [PATCH 19/43] get the realpath of the host path for archive when cp
+
+Signed-off-by: zhongtao <zhongtao17@huawei.com>
+---
+ src/utils/tar/isulad_tar.c | 16 ++++++++++++++--
+ 1 file changed, 14 insertions(+), 2 deletions(-)
+
+diff --git a/src/utils/tar/isulad_tar.c b/src/utils/tar/isulad_tar.c
+index bbe4c3b2..fe514acc 100644
+--- a/src/utils/tar/isulad_tar.c
++++ b/src/utils/tar/isulad_tar.c
+@@ -390,6 +390,7 @@ int archive_copy_to(const struct io_read_wrapper *content, const struct archive_
+ {
+ int ret = -1;
+ struct archive_copy_info *dstinfo = NULL;
++ char cleanpath[PATH_MAX] = { 0 };
+ char *dstdir = NULL;
+ char *src_base = NULL;
+ char *dst_base = NULL;
+@@ -410,7 +411,12 @@ int archive_copy_to(const struct io_read_wrapper *content, const struct archive_
+ goto cleanup;
+ }
+
+- ret = archive_chroot_untar_stream(content, dstdir, ".", src_base, dst_base, root_dir, err);
++ if (realpath(dstdir, cleanpath) == NULL) {
++ ERROR("Failed to get real path for %s", dstdir);
++ return -1;
++ }
++
++ ret = archive_chroot_untar_stream(content, cleanpath, ".", src_base, dst_base, root_dir, err);
+
+ cleanup:
+ free_archive_copy_info(dstinfo);
+@@ -428,6 +434,7 @@ static int tar_resource_rebase(const char *path, const char *rebase, const char
+ struct stat st;
+ char *srcdir = NULL;
+ char *srcbase = NULL;
++ char cleanpath[PATH_MAX] = { 0 };
+
+ if (lstat(path, &st) < 0) {
+ SYSERROR("lstat %s failed", path);
+@@ -438,9 +445,14 @@ static int tar_resource_rebase(const char *path, const char *rebase, const char
+ ERROR("Can not split path: %s", path);
+ goto cleanup;
+ }
++
++ if (realpath(srcdir, cleanpath) == NULL) {
++ ERROR("Failed to get real path for %s", srcdir);
++ return -1;
++ }
+
+ DEBUG("chroot tar stream srcdir(%s) srcbase(%s) rebase(%s)", srcdir, srcbase, rebase);
+- nret = archive_chroot_tar_stream(srcdir, srcbase, srcbase, rebase, root_dir, archive_reader);
++ nret = archive_chroot_tar_stream(cleanpath, srcbase, srcbase, rebase, root_dir, archive_reader);
+ if (nret < 0) {
+ ERROR("Can not archive path: %s", path);
+ goto cleanup;
+--
+2.34.1
+