|
|
36e8a3 |
From c9630164b869e109bf2960968fc583449ccf0875 Mon Sep 17 00:00:00 2001
|
|
|
36e8a3 |
From: Lennart Poettering <lennart@poettering.net>
|
|
|
36e8a3 |
Date: Fri, 19 Oct 2018 11:42:11 +0200
|
|
|
36e8a3 |
Subject: [PATCH] chown-recursive: TAKE_FD() is your friend
|
|
|
36e8a3 |
|
|
|
36e8a3 |
(cherry-picked from commit cd6b7d50c337b3676a3d5fc2188ff298dcbdb939)
|
|
|
36e8a3 |
|
|
|
36e8a3 |
Related: #1643368
|
|
|
36e8a3 |
---
|
|
|
36e8a3 |
src/core/chown-recursive.c | 6 +-----
|
|
|
36e8a3 |
1 file changed, 1 insertion(+), 5 deletions(-)
|
|
|
36e8a3 |
|
|
|
36e8a3 |
diff --git a/src/core/chown-recursive.c b/src/core/chown-recursive.c
|
|
|
4bff0a |
index 447b771267..7767301f7d 100644
|
|
|
36e8a3 |
--- a/src/core/chown-recursive.c
|
|
|
36e8a3 |
+++ b/src/core/chown-recursive.c
|
|
|
36e8a3 |
@@ -111,7 +111,6 @@ static int chown_recursive_internal(int fd, const struct stat *st, uid_t uid, gi
|
|
|
36e8a3 |
int path_chown_recursive(const char *path, uid_t uid, gid_t gid) {
|
|
|
36e8a3 |
_cleanup_close_ int fd = -1;
|
|
|
36e8a3 |
struct stat st;
|
|
|
36e8a3 |
- int r;
|
|
|
36e8a3 |
|
|
|
36e8a3 |
fd = open(path, O_RDONLY|O_DIRECTORY|O_CLOEXEC|O_NOFOLLOW|O_NOATIME);
|
|
|
36e8a3 |
if (fd < 0)
|
|
|
36e8a3 |
@@ -130,8 +129,5 @@ int path_chown_recursive(const char *path, uid_t uid, gid_t gid) {
|
|
|
36e8a3 |
(!gid_is_valid(gid) || st.st_gid == gid))
|
|
|
36e8a3 |
return 0;
|
|
|
36e8a3 |
|
|
|
36e8a3 |
- r = chown_recursive_internal(fd, &st, uid, gid);
|
|
|
36e8a3 |
- fd = -1; /* we donated the fd to the call, regardless if it succeeded or failed */
|
|
|
36e8a3 |
-
|
|
|
36e8a3 |
- return r;
|
|
|
36e8a3 |
+ return chown_recursive_internal(TAKE_FD(fd), &st, uid, gid); /* we donate the fd to the call, regardless if it succeeded or failed */
|
|
|
36e8a3 |
}
|