From: fanyong Date: Thu, 28 Sep 2006 07:47:10 +0000 (+0000) Subject: replace array len (char pw_name[32]) with system config. X-Git-Tag: v1_8_0_110~486^2~791 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=d25810c7bd11fe9442da3f51b51000bba3f9d43e;p=fs%2Flustre-release.git replace array len (char pw_name[32]) with system config. --- 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; }