From: Alin Nastac Date: Fri, 24 Apr 2020 14:49:55 +0000 (+0200) Subject: file: preserve original file mode after commit X-Git-Url: https://git.librecmc.org/?p=oweals%2Fuci.git;a=commitdiff_plain;h=ec8d3233948603485e1b97384113fac9f1bab5d6 file: preserve original file mode after commit Because mkstemp() create a file with mode 0600, only user doing the commit (typically root) will be allowed to inspect the content of the file after uci commit. Signed-off-by: Alin Nastac --- diff --git a/file.c b/file.c index 3ac49c6..6486de9 100644 --- a/file.c +++ b/file.c @@ -724,6 +724,7 @@ static void uci_file_commit(struct uci_context *ctx, struct uci_package **packag char *volatile name = NULL; char *volatile path = NULL; char *filename = NULL; + struct stat statbuf; volatile bool do_rename = false; int fd; @@ -801,7 +802,7 @@ done: uci_close_stream(f1); if (do_rename) { path = realpath(p->path, NULL); - if (!path || rename(filename, path)) { + if (!path || stat(path, &statbuf) || chmod(filename, statbuf.st_mode) || rename(filename, path)) { unlink(filename); UCI_THROW(ctx, UCI_ERR_IO); }