]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
copy: use stat_verify_directory() where appropriate
authorLennart Poettering <lennart@poettering.net>
Mon, 1 Feb 2021 16:03:19 +0000 (17:03 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Sat, 6 Feb 2021 10:37:10 +0000 (10:37 +0000)
src/basic/copy.c

index aede5be9910d9957f4bd8e22314ca236de45155f..e66d1064b9323be79edfe1d1f16fa9e8b47b7b70 100644 (file)
@@ -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);
 }