[lxc-devel] [PATCH 20/21] lxc_unshare: Replace getpw*_r by getpw*

Stéphane Graber stgraber at ubuntu.com
Thu Jan 3 17:24:21 UTC 2013


Bionic and maybe some other libc implementations lack the _r nss functions.
This replaces our current getpwnam_r and getpwuid_r calls by getpwnam and
getpwuid.

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 src/lxc/lxc_unshare.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/lxc/lxc_unshare.c b/src/lxc/lxc_unshare.c
index 3a848b2..224d8d0 100644
--- a/src/lxc/lxc_unshare.c
+++ b/src/lxc/lxc_unshare.c
@@ -54,12 +54,9 @@ void usage(char *cmd)
 
 static uid_t lookup_user(const char *optarg)
 {
-	int bufflen = sysconf(_SC_GETPW_R_SIZE_MAX);
-	char buff[bufflen];
 	char name[sysconf(_SC_LOGIN_NAME_MAX)];
 	uid_t uid = -1;
-	struct passwd pwent;
-	struct passwd *pent;
+	struct passwd *pwent = NULL;
 
 	if (!optarg || (optarg[0] == '\0'))
 		return uid;
@@ -69,17 +66,21 @@ static uid_t lookup_user(const char *optarg)
 		if (sscanf(optarg, "%s", name) < 1)
 			return uid;
 
-		if (getpwnam_r(name, &pwent, buff, bufflen, &pent) || !pent) {
+		pwent = getpwnam(name);
+		if (!pwent) {
 			ERROR("invalid username %s", name);
 			return uid;
 		}
-		uid = pent->pw_uid;
+		uid = pwent->pw_uid;
+		free(pwent);
 	} else {
-		if (getpwuid_r(uid, &pwent, buff, bufflen, &pent) || !pent) {
+		pwent = getpwuid(uid);
+		if (!pwent) {
 			ERROR("invalid uid %d", uid);
 			uid = -1;
 			return uid;
 		}
+		free(pwent);
 	}
 	return uid;
 }
-- 
1.8.0





More information about the lxc-devel mailing list