diff options
author | Lennart Poettering <lennart@poettering.net> | 2021-02-01 17:03:19 +0100 |
---|---|---|
committer | Luca Boccassi <luca.boccassi@gmail.com> | 2021-02-06 10:37:10 +0000 |
commit | 900915080a0c8da0236ceb322a679e19db139100 (patch) | |
tree | 3afa419515a2b71395a158d21ba2905fa7519527 | |
parent | afe6a9c48e956c8ddfaa0f201cf371b01a22f970 (diff) | |
download | systemd-900915080a0c8da0236ceb322a679e19db139100.tar.gz |
copy: use stat_verify_directory() where appropriate
-rw-r--r-- | src/basic/copy.c | 12 |
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); } |