]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/basic/copy.c
copy: only check for traversing mount points on directories
[thirdparty/systemd.git] / src / basic / copy.c
index 650de612b88c3b6dd27148ba2a849dd6e4fa88c7..6ed46241fccec29bbc837d6b5be6a7f6b2d1357b 100644 (file)
@@ -530,13 +530,12 @@ static int fd_copy_directory(
                         continue;
                 }
 
-                if (buf.st_dev != original_device)
-                        continue;
-
-                if (S_ISREG(buf.st_mode))
-                        q = fd_copy_regular(dirfd(d), de->d_name, &buf, fdt, de->d_name, override_uid, override_gid, copy_flags);
-                else if (S_ISDIR(buf.st_mode))
+                if (S_ISDIR(buf.st_mode)) {
+                        if (buf.st_dev != original_device)
+                                continue;
                         q = fd_copy_directory(dirfd(d), de->d_name, &buf, fdt, de->d_name, original_device, override_uid, override_gid, copy_flags);
+                } else if (S_ISREG(buf.st_mode))
+                        q = fd_copy_regular(dirfd(d), de->d_name, &buf, fdt, de->d_name, override_uid, override_gid, copy_flags);
                 else if (S_ISLNK(buf.st_mode))
                         q = fd_copy_symlink(dirfd(d), de->d_name, &buf, fdt, de->d_name, override_uid, override_gid, copy_flags);
                 else if (S_ISFIFO(buf.st_mode))