From: Miroslav Lichvar Date: Thu, 13 Aug 2015 15:04:10 +0000 (+0200) Subject: util: set uid/gid of created directory even when zero X-Git-Tag: 2.2-pre1~81 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=30b621391084599e5715077e163daf34d68552ff;p=thirdparty%2Fchrony.git util: set uid/gid of created directory even when zero Call chown() in create_dir() even when the specified uid/gid is zero. This is needed on BSD systems, where directories are created with gid of the parent directory. --- diff --git a/util.c b/util.c index f03ebaf0..d3db6509 100644 --- a/util.c +++ b/util.c @@ -945,8 +945,8 @@ create_dir(char *p, mode_t mode, uid_t uid, gid_t gid) return 0; } - /* Change its ownership if requested */ - if ((uid || gid) && chown(p, uid, gid) < 0) { + /* Set its owner */ + if (chown(p, uid, gid) < 0) { LOG(LOGS_ERR, LOGF_Util, "Could not change ownership of %s : %s", p, strerror(errno)); /* Don't leave it there with incorrect ownership */ rmdir(p); diff --git a/util.h b/util.h index 360fced2..f93d794a 100644 --- a/util.h +++ b/util.h @@ -133,9 +133,9 @@ extern int UTI_SetQuitSignalsHandler(void (*handler)(int)); /* Get directory (as an allocated string) for a path */ extern char *UTI_PathToDir(const char *path); -/* Create a directory with a specified mode (umasked) and set its uid/gid - (if not 0). Create also any parent directories that don't exist with mode - 755 and default uid/gid. Returns 1 if created or already exists (even with +/* Create a directory with a specified mode (umasked) and set its uid/gid. + Create also any parent directories that don't exist with mode 755 and + default uid/gid. Returns 1 if created or already exists (even with different mode/uid/gid), 0 otherwise. */ extern int UTI_CreateDirAndParents(const char *path, mode_t mode, uid_t uid, gid_t gid);