Commit 5c0f1b3b by Stéphane Graber

lxc_unshare: Replace getpw*_r by getpw*

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: 's avatarStéphane Graber <stgraber@ubuntu.com> Acked-by: 's avatarSerge E. Hallyn <serge.hallyn@ubuntu.com>
parent 72f919c4
...@@ -54,12 +54,9 @@ void usage(char *cmd) ...@@ -54,12 +54,9 @@ void usage(char *cmd)
static uid_t lookup_user(const char *optarg) 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)]; char name[sysconf(_SC_LOGIN_NAME_MAX)];
uid_t uid = -1; uid_t uid = -1;
struct passwd pwent; struct passwd *pwent = NULL;
struct passwd *pent;
if (!optarg || (optarg[0] == '\0')) if (!optarg || (optarg[0] == '\0'))
return uid; return uid;
...@@ -69,13 +66,15 @@ static uid_t lookup_user(const char *optarg) ...@@ -69,13 +66,15 @@ static uid_t lookup_user(const char *optarg)
if (sscanf(optarg, "%s", name) < 1) if (sscanf(optarg, "%s", name) < 1)
return uid; return uid;
if (getpwnam_r(name, &pwent, buff, bufflen, &pent) || !pent) { pwent = getpwnam(name);
if (!pwent) {
ERROR("invalid username %s", name); ERROR("invalid username %s", name);
return uid; return uid;
} }
uid = pent->pw_uid; uid = pwent->pw_uid;
} else { } else {
if (getpwuid_r(uid, &pwent, buff, bufflen, &pent) || !pent) { pwent = getpwuid(uid);
if (!pwent) {
ERROR("invalid uid %d", uid); ERROR("invalid uid %d", uid);
uid = -1; uid = -1;
return uid; return uid;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment