From 93574c619c96bec7e7e42468ce8573f630c78b21 Mon Sep 17 00:00:00 2001 From: Benoit Goby Date: Wed, 28 Mar 2012 18:15:56 -0700 Subject: [PATCH] init: Fix chown and chmod for write-only files Change-Id: I570b631ced11ab104aafe7ebfe71bae4e380d8af --- init/builtins.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/init/builtins.c b/init/builtins.c index 41fc03e12..661c9b180 100644 --- a/init/builtins.c +++ b/init/builtins.c @@ -75,12 +75,23 @@ static int write_file(const char *path, const char *value) } } +static int _open(const char *path) +{ + int fd; + + fd = open(path, O_RDONLY | O_NOFOLLOW); + if (fd < 0) + fd = open(path, O_WRONLY | O_NOFOLLOW); + + return fd; +} + static int _chown(const char *path, unsigned int uid, unsigned int gid) { int fd; int ret; - fd = open(path, O_RDONLY | O_NOFOLLOW); + fd = _open(path); if (fd < 0) { return -1; } @@ -103,7 +114,7 @@ static int _chmod(const char *path, mode_t mode) int fd; int ret; - fd = open(path, O_RDONLY | O_NOFOLLOW); + fd = _open(path); if (fd < 0) { return -1; }