summaryrefslogtreecommitdiffstats
path: root/src/sss_client/nss_group.c
diff options
context:
space:
mode:
authorLukas Slebodnik <lslebodn@redhat.com>2015-06-30 16:36:03 +0200
committerJakub Hrozek <jhrozek@redhat.com>2015-07-03 15:17:02 +0200
commit88e68607e474ab2ce46c562753ef2e988516d1e9 (patch)
treed7e0297a1ee53900eff0671d7b2e0d973c05dc02 /src/sss_client/nss_group.c
parent7c83c23177cdb43e23fe19935356e1319e2b6f39 (diff)
downloadsssd-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.c29
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();