From 90161c92139c03fdcc060e472a764af604d25858 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Mon, 18 Jul 2005 22:40:59 +0000 Subject: [PATCH] Fixup makedevs to handle regular files, and also fix it to properly update file permissions as specified. --- miscutils/makedevs.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/miscutils/makedevs.c b/miscutils/makedevs.c index b6473e7e5..8a407299a 100644 --- a/miscutils/makedevs.c +++ b/miscutils/makedevs.c @@ -178,7 +178,30 @@ extern int makedevs_main(int argc, char **argv) ret = EXIT_FAILURE; goto loop; } - } else { + if ((mode != -1) && (chmod(full_name, mode) < 0)){ + bb_perror_msg("line %d: chmod failed for %s", linenum, full_name); + ret = EXIT_FAILURE; + goto loop; + } + } else if (type == 'f') { + struct stat st; + if ((stat(full_name, &st) < 0 || !S_ISREG(st.st_mode))) { + bb_perror_msg("line %d: regular file '%s' does not exist", linenum, full_name); + ret = EXIT_FAILURE; + goto loop; + } + if (chown(full_name, uid, gid) == -1) { + bb_perror_msg("line %d: chown failed for %s", linenum, full_name); + ret = EXIT_FAILURE; + goto loop; + } + if ((mode != -1) && (chmod(full_name, mode) < 0)){ + bb_perror_msg("line %d: chmod failed for %s", linenum, full_name); + ret = EXIT_FAILURE; + goto loop; + } + } else + { dev_t rdev; if (type == 'p') { @@ -211,6 +234,10 @@ extern int makedevs_main(int argc, char **argv) bb_perror_msg("line %d: chown failed for %s", linenum, full_name_inc); ret = EXIT_FAILURE; } + if ((mode != -1) && (chmod(full_name_inc, mode) < 0)){ + bb_perror_msg("line %d: chmod failed for %s", linenum, full_name_inc); + ret = EXIT_FAILURE; + } } free(full_name_inc); } else { @@ -223,6 +250,10 @@ extern int makedevs_main(int argc, char **argv) bb_perror_msg("line %d: chown failed for %s", linenum, full_name); ret = EXIT_FAILURE; } + if ((mode != -1) && (chmod(full_name, mode) < 0)){ + bb_perror_msg("line %d: chmod failed for %s", linenum, full_name); + ret = EXIT_FAILURE; + } } } loop: -- 2.25.1