From d6d8d60ee36fe2b509f12e81584aa9a5dfd77e62 Mon Sep 17 00:00:00 2001 From: Lang Daniel Date: Mon, 12 Sep 2022 06:10:49 +0000 Subject: [PATCH] package/makedevs: fix recursive chmod The logic implemented in e745c0b to stop makedevs from recursively running chmod() on dangling symlinks excluded everything that isn't a symlink. Other file types or directories are skipped/ignored. Logic has been updated to exit the function if mode shouldn't be changed or if path is a dangling symlink. Signed-off-by: Daniel Lang Signed-off-by: Peter Korsgaard --- package/makedevs/makedevs.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/package/makedevs/makedevs.c b/package/makedevs/makedevs.c index 2796cd5e78..a5c9c7d64d 100644 --- a/package/makedevs/makedevs.c +++ b/package/makedevs/makedevs.c @@ -446,11 +446,12 @@ int bb_recursive(const char *fpath, const struct stat *sb, } /* chmod() is optional, also skip if dangling symlink */ - if (recursive_mode != -1 && tflag == FTW_SL && access(fpath, F_OK)) { - if (chmod(fpath, recursive_mode) < 0) { - bb_perror_msg("chmod failed for %s", fpath); - return -1; - } + if (recursive_mode == -1 || (tflag == FTW_SL && !access(fpath, F_OK))) + return 0; + + if (chmod(fpath, recursive_mode) < 0) { + bb_perror_msg("chmod failed for %s", fpath); + return -1; } return 0;