2024-03-19 19:23:42 +08:00
|
|
|
From 96dfd32ee5d9a133ad63af13723402f10cd7cf7b Mon Sep 17 00:00:00 2001
|
|
|
|
|
From: zhongtao <zhongtao17@huawei.com>
|
|
|
|
|
Date: Mon, 11 Mar 2024 15:50:45 +0800
|
2024-04-02 11:50:19 +00:00
|
|
|
Subject: [PATCH 19/43] get the realpath of the host path for archive when cp
|
2024-03-19 19:23:42 +08:00
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
--
|
2024-04-02 11:50:19 +00:00
|
|
|
2.34.1
|
2024-03-19 19:23:42 +08:00
|
|
|
|