summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2021-02-01 17:03:19 +0100
committerLuca Boccassi <luca.boccassi@gmail.com>2021-02-06 10:37:10 +0000
commit900915080a0c8da0236ceb322a679e19db139100 (patch)
tree3afa419515a2b71395a158d21ba2905fa7519527
parentafe6a9c48e956c8ddfaa0f201cf371b01a22f970 (diff)
downloadsystemd-900915080a0c8da0236ceb322a679e19db139100.tar.gz
copy: use stat_verify_directory() where appropriate
-rw-r--r--src/basic/copy.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/basic/copy.c b/src/basic/copy.c
index aede5be991..e66d1064b9 100644
--- a/src/basic/copy.c
+++ b/src/basic/copy.c
@@ -973,6 +973,7 @@ int copy_directory_fd_full(
void *userdata) {
struct stat st;
+ int r;
assert(dirfd >= 0);
assert(to);
@@ -980,8 +981,9 @@ int copy_directory_fd_full(
if (fstat(dirfd, &st) < 0)
return -errno;
- if (!S_ISDIR(st.st_mode))
- return -ENOTDIR;
+ r = stat_verify_directory(&st);
+ if (r < 0)
+ return r;
return fd_copy_directory(dirfd, NULL, &st, AT_FDCWD, to, st.st_dev, COPY_DEPTH_MAX, UID_INVALID, GID_INVALID, copy_flags, NULL, NULL, progress_path, progress_bytes, userdata);
}
@@ -995,6 +997,7 @@ int copy_directory_full(
void *userdata) {
struct stat st;
+ int r;
assert(from);
assert(to);
@@ -1002,8 +1005,9 @@ int copy_directory_full(
if (lstat(from, &st) < 0)
return -errno;
- if (!S_ISDIR(st.st_mode))
- return -ENOTDIR;
+ r = stat_verify_directory(&st);
+ if (r < 0)
+ return r;
return fd_copy_directory(AT_FDCWD, from, &st, AT_FDCWD, to, st.st_dev, COPY_DEPTH_MAX, UID_INVALID, GID_INVALID, copy_flags, NULL, NULL, progress_path, progress_bytes, userdata);
}