From 10eae23e2483733d4ca3c21f15b5bdb3f04c9839 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Tue, 3 Jan 2012 02:46:40 -0500 Subject: sss_client: shared memory cache group map support --- src/sss_client/nss_group.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'src/sss_client/nss_group.c') diff --git a/src/sss_client/nss_group.c b/src/sss_client/nss_group.c index 085a5340..1b9f3a3a 100644 --- a/src/sss_client/nss_group.c +++ b/src/sss_client/nss_group.c @@ -29,6 +29,7 @@ #include #include #include "sss_cli.h" +#include "nss_mc.h" static struct sss_nss_getgrent_data { size_t len; @@ -365,6 +366,27 @@ enum nss_status _nss_sss_getgrnam_r(const char *name, struct group *result, return NSS_STATUS_NOTFOUND; } + ret = sss_nss_mc_getgrnam(name, name_len, result, buffer, buflen); + 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; + case EINVAL: + /* if using the mmaped cache failed, + * fall back to socket based comms */ + break; + default: + *errnop = EBADMSG; + return NSS_STATUS_TRYAGAIN; + } + rd.len = name_len + 1; rd.data = name; @@ -433,6 +455,27 @@ enum nss_status _nss_sss_getgrgid_r(gid_t gid, struct group *result, /* Caught once glibc passing in buffer == 0x0 */ if (!buffer || !buflen) return ERANGE; + ret = sss_nss_mc_getgrgid(gid, result, buffer, buflen); + 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; + case EINVAL: + /* if using the mmaped cache failed, + * fall back to socket based comms */ + break; + default: + *errnop = EBADMSG; + return NSS_STATUS_TRYAGAIN; + } + group_gid = gid; rd.len = sizeof(uint32_t); rd.data = &group_gid; -- cgit