From 29cb3e8f35a803ab733fa0f001eb67bf9e9f4188 Mon Sep 17 00:00:00 2001 From: Serge Hallyn Date: Thu, 31 Jul 2014 19:54:27 +0000 Subject: [PATCH] use non-thread-safe getpwuid and getpwgid for android MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit We only call it (so far) after doing a fork(), so this is fine. If we ever need such a thing from threaded context, we'll simply need to write our own version for android. Signed-off-by: Serge Hallyn Acked-by: Stéphane Graber --- src/lxc/conf.c | 47 +++++++++++------------------------------------ 1 file changed, 11 insertions(+), 36 deletions(-) diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 47c73f27f..b1bc2cd6b 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -4579,56 +4579,31 @@ err: return -1; } +/* not thread-safe, do not use from api without first forking */ static char* getuname(void) { - struct passwd pwd, *result; - char *buf, *ret = NULL; - size_t bufsize; - int s; + struct passwd *result; - bufsize = sysconf(_SC_GETPW_R_SIZE_MAX); - if (bufsize == -1) - bufsize = 16384; - - buf = malloc(bufsize); - if (!buf) + result = getpwuid(geteuid()); + if (!result) return NULL; - s = getpwuid_r(geteuid(), &pwd, buf, bufsize, &result); - if (s || result == NULL) - goto out; - - ret = strdup(pwd.pw_name); -out: - free(buf); - return ret; + return strdup(result->pw_name); } +/* not thread-safe, do not use from api without first forking */ static char *getgname(void) { - struct group grp, *result; - char *buf, *ret = NULL; - size_t bufsize; - int s; + struct group *result; - bufsize = sysconf(_SC_GETGR_R_SIZE_MAX); - if (bufsize == -1) - bufsize = 16384; - - buf = malloc(bufsize); - if (!buf) + result = getgrgid(getegid()); + if (!result) return NULL; - s = getgrgid_r(geteuid(), &grp, buf, bufsize, &result); - if (s || result == NULL) - goto out; - - ret = strdup(grp.gr_name); -out: - free(buf); - return ret; + return strdup(result->gr_name); } +/* not thread-safe, do not use from api without first forking */ void suggest_default_idmap(void) { FILE *f; -- 2.47.2