summaryrefslogtreecommitdiffstats
path: root/login-utils/login.c
diff options
context:
space:
mode:
authorKarel Zak2012-01-31 14:23:26 +0100
committerKarel Zak2012-01-31 14:23:26 +0100
commitfc01644d533fb23c4019262304e477cd634f290d (patch)
tree3df04df78e1801095e9acd1d865f4c6c8a59e2e3 /login-utils/login.c
parentblkid: check fd before use [coverity scan] (diff)
downloadkernel-qcow2-util-linux-fc01644d533fb23c4019262304e477cd634f290d.tar.gz
kernel-qcow2-util-linux-fc01644d533fb23c4019262304e477cd634f290d.tar.xz
kernel-qcow2-util-linux-fc01644d533fb23c4019262304e477cd634f290d.zip
login: more robust sysconf() usage [coverity scan]
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'login-utils/login.c')
-rw-r--r--login-utils/login.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/login-utils/login.c b/login-utils/login.c
index e80b137ba..3a904f2f8 100644
--- a/login-utils/login.c
+++ b/login-utils/login.c
@@ -644,18 +644,19 @@ static struct passwd *get_passwd_entry(const char *username,
struct passwd *pwd)
{
struct passwd *res = NULL;
- size_t sz;
+ size_t sz = 16384;
int x;
if (!pwdbuf || !username)
return NULL;
#ifdef _SC_GETPW_R_SIZE_MAX
- sz = sysconf(_SC_GETPW_R_SIZE_MAX);
- if (sz <= 0)
+ {
+ long xsz = sysconf(_SC_GETPW_R_SIZE_MAX);
+ if (xsz > 0)
+ sz = (size_t) xsz;
+ }
#endif
- sz = 16384;
-
*pwdbuf = xrealloc(*pwdbuf, sz);
x = getpwnam_r(username, pwd, *pwdbuf, sz, &res);