[libvirt] [PATCH] Fix getpwuid_r() usage

# HG changeset patch # User john.levon@sun.com # Date 1233280613 28800 # Node ID 59c231ad7e158acead0c236c3a52f60718b84605 # Parent b203988038c14f1160cbd250a48eda40d4613eca Fix getpwuid_r() usage Signed-off-by: John Levon <john.levon@sun.com> diff --git a/src/util.c b/src/util.c --- a/src/util.c +++ b/src/util.c @@ -1477,7 +1477,7 @@ char *virGetUserDirectory(virConnectPtr char *strbuf; char *ret; struct passwd pwbuf; - struct passwd *pw; + struct passwd *pw = NULL; size_t strbuflen = sysconf(_SC_GETPW_R_SIZE_MAX); if (VIR_ALLOC_N(strbuf, strbuflen) < 0) { @@ -1485,7 +1485,14 @@ char *virGetUserDirectory(virConnectPtr return NULL; } - if (getpwuid_r(uid, &pwbuf, strbuf, strbuflen, &pw) != 0) { + /* + * From the manpage (terrifying but true): + * + * ERRORS + * 0 or ENOENT or ESRCH or EBADF or EPERM or ... + * The given name or uid was not found. + */ + if (getpwuid_r(uid, &pwbuf, strbuf, strbuflen, &pw) != 0 || pw == NULL) virReportSystemError(conn, errno, _("Failed to find user record for uid '%d'"), uid);

On Thu, Jan 29, 2009 at 06:06:10PM -0800, john.levon@sun.com wrote:
@@ -1485,7 +1485,14 @@ char *virGetUserDirectory(virConnectPtr return NULL; }
- if (getpwuid_r(uid, &pwbuf, strbuf, strbuflen, &pw) != 0) { + /* + * From the manpage (terrifying but true): + * + * ERRORS + * 0 or ENOENT or ESRCH or EBADF or EPERM or ... + * The given name or uid was not found. + */ + if (getpwuid_r(uid, &pwbuf, strbuf, strbuflen, &pw) != 0 || pw == NULL) virReportSystemError(conn, errno, _("Failed to find user record for uid '%d'"), uid);
Argh, I only read as far as "The getpwnam_r() and getpwuid_r() functions return zero on success. In case of error, and error number is returned" So it returns 0 on success, except when 0 means failure :-( ACK to your patch Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
participants (3)
-
Daniel P. Berrange
-
John Levon
-
john.levon@sun.com