From d25810c7bd11fe9442da3f51b51000bba3f9d43e Mon Sep 17 00:00:00 2001 From: fanyong Date: Thu, 28 Sep 2006 07:47:10 +0000 Subject: [PATCH] replace array len (char pw_name[32]) with system config. --- lustre/utils/l_getidentity.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/lustre/utils/l_getidentity.c b/lustre/utils/l_getidentity.c index 459706a..7abd8e8 100644 --- a/lustre/utils/l_getidentity.c +++ b/lustre/utils/l_getidentity.c @@ -84,7 +84,8 @@ int get_groups_local(struct identity_downcall_data *data) unsigned int ngroups = 0; struct passwd *pw; struct group *gr; - char pw_name[32]; + char *pw_name; + int namelen; int i; pw = getpwuid(data->idd_uid); @@ -95,8 +96,17 @@ int get_groups_local(struct identity_downcall_data *data) } data->idd_gid = pw->pw_gid; - memset(pw_name, 0, sizeof(pw_name)); - strncpy(pw_name, pw->pw_name, sizeof(pw_name) - 1); + namelen = sysconf(_SC_LOGIN_NAME_MAX); + if (namelen < _POSIX_LOGIN_NAME_MAX) + namelen = _POSIX_LOGIN_NAME_MAX; + pw_name = (char *)malloc(namelen); + if (!pw_name) { + errlog("malloc error\n"); + data->idd_err = errno; + return -1; + } + memset(pw_name, 0, namelen); + strncpy(pw_name, pw->pw_name, namelen - 1); maxgroups = sysconf(_SC_NGROUPS_MAX); if (maxgroups > NGROUPS_MAX) @@ -122,6 +132,7 @@ int get_groups_local(struct identity_downcall_data *data) qsort(groups, ngroups, sizeof(*groups), compare_u32); data->idd_ngroups = ngroups; + free(pw_name); return 0; } -- 1.8.3.1