diff options
author | Lukas Slebodnik <lslebodn@redhat.com> | 2015-06-30 16:36:03 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2015-07-03 15:17:02 +0200 |
commit | 88e68607e474ab2ce46c562753ef2e988516d1e9 (patch) | |
tree | d7e0297a1ee53900eff0671d7b2e0d973c05dc02 /src/sss_client/nss_group.c | |
parent | 7c83c23177cdb43e23fe19935356e1319e2b6f39 (diff) | |
download | sssd-88e68607e474ab2ce46c562753ef2e988516d1e9.tar.gz sssd-88e68607e474ab2ce46c562753ef2e988516d1e9.tar.xz sssd-88e68607e474ab2ce46c562753ef2e988516d1e9.zip |
sss_client: Use initgr mmap cache in client code
Resolves:
https://fedorahosted.org/sssd/ticket/2485
Reviewed-by: Michal Židek <mzidek@redhat.com>
Diffstat (limited to 'src/sss_client/nss_group.c')
-rw-r--r-- | src/sss_client/nss_group.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/src/sss_client/nss_group.c b/src/sss_client/nss_group.c index 1614c33b5..b614fcf7f 100644 --- a/src/sss_client/nss_group.c +++ b/src/sss_client/nss_group.c @@ -281,10 +281,37 @@ enum nss_status _nss_sss_initgroups_dyn(const char *user, gid_t group, size_t replen; enum nss_status nret; size_t buf_index = 0; + size_t user_len; uint32_t num_ret; long int l, max_ret; + int ret; + + ret = sss_strnlen(user, SSS_NAME_MAX, &user_len); + if (ret != 0) { + *errnop = EINVAL; + return NSS_STATUS_NOTFOUND; + } + + ret = sss_nss_mc_initgroups_dyn(user, user_len, group, start, size, + groups, limit); + switch (ret) { + case 0: + *errnop = 0; + return NSS_STATUS_SUCCESS; + case ERANGE: + *errnop = ERANGE; + return NSS_STATUS_TRYAGAIN; + case ENOENT: + /* fall through, we need to actively ask the parent + * if no entry is found */ + break; + default: + /* if using the mmaped cache failed, + * fall back to socket based comms */ + break; + } - rd.len = strlen(user) +1; + rd.len = user_len + 1; rd.data = user; sss_nss_lock(); |