[lxc-devel] [PATCH] use non-thread-safe getpwuid and getpwgid for android

Serge Hallyn serge.hallyn at ubuntu.com
Thu Jul 31 19:54:27 UTC 2014


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 <serge.hallyn at ubuntu.com>
---
 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 6900139..473d076 100644
--- a/src/lxc/conf.c
+++ b/src/lxc/conf.c
@@ -4674,56 +4674,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.0.1



More information about the lxc-devel mailing list