static NSS_STATUS LsaNssSolarisGroupGetgrent( nss_backend_t* pBackend, void* pArgs ) { PLSA_NSS_GROUP_BACKEND pLsaBackend = (PLSA_NSS_GROUP_BACKEND) pBackend; PLSA_ENUMGROUPS_STATE pEnumGroupsState = &pLsaBackend->enumGroupsState; nss_XbyY_args_t* pXbyYArgs = (nss_XbyY_args_t*) pArgs; struct group* pResultGroup = pXbyYArgs->buf.result; char * pszBuf = pXbyYArgs->buf.buffer; size_t bufLen = pXbyYArgs->buf.buflen; int err = 0; int* pErrorNumber = &err; int ret = NSS_STATUS_NOTFOUND; ret = LsaNssCommonGroupGetgrent( &pLsaBackend->lsaConnection, pEnumGroupsState, pResultGroup, pszBuf, bufLen, pErrorNumber); if (ret == NSS_STATUS_SUCCESS) { pXbyYArgs->returnval = pXbyYArgs->buf.result; } else if (ret == NSS_STATUS_TRYAGAIN && err == ERANGE) { pXbyYArgs->erange = 1; /* Solaris 8 will call again with the same buffer size if tryagain * is returned. */ ret = NSS_STATUS_UNAVAIL; } else { errno = err; } return ret; }
NSS_STATUS _nss_lsass_getgrent_r( struct group* pResultGroup, char * pszBuf, size_t bufLen, int* pErrorNumber ) { NSS_STATUS status; NSS_LOCK(); status = LsaNssCommonGroupGetgrent( &lsaConnection, &gEnumGroupsState, pResultGroup, pszBuf, bufLen, pErrorNumber); NSS_UNLOCK(); return status; }
static NSS_STATUS LsaNssSolarisGroupGetgrent( nss_backend_t* pBackend, void* pArgs ) { PLSA_NSS_GROUP_BACKEND pLsaBackend = (PLSA_NSS_GROUP_BACKEND) pBackend; PLSA_ENUMGROUPS_STATE pEnumGroupsState = &pLsaBackend->enumGroupsState; nss_XbyY_args_t* pXbyYArgs = (nss_XbyY_args_t*) pArgs; struct group* pResultGroup = pXbyYArgs->buf.result; char * pszBuf = pXbyYArgs->buf.buffer; size_t bufLen = pXbyYArgs->buf.buflen; int err = 0; int* pErrorNumber = &err; int ret = NSS_STATUS_NOTFOUND; NSS_LOCK(); ret = LsaNssCommonGroupGetgrent( &pLsaBackend->lsaConnection, pEnumGroupsState, pResultGroup, pszBuf, bufLen, pErrorNumber); NSS_UNLOCK(); if (ret == NSS_STATUS_SUCCESS) { if (pResultGroup) { pXbyYArgs->returnval = pXbyYArgs->buf.result; } else { pXbyYArgs->returnval = pszBuf; #ifdef HAVE_STRUCT_NSS_XBYY_ARGS_RETURNLEN pXbyYArgs->returnlen = strlen(pszBuf); #else /* The pXbyYArgs->buf.result was NULL indicating this is NSS2/NSCD * Cast the nss_XbyY_args_t to a NSS2 compatible version. * NOTE: This is only required if we build on Solaris 8 */ ((nss_XbyY_nss2_args_t *)pXbyYArgs)->returnlen = strlen(pszBuf); #endif } } else if (ret == NSS_STATUS_TRYAGAIN && err == ERANGE) { pXbyYArgs->erange = 1; /* Solaris 8 will call again with the same buffer size if tryagain * is returned. */ ret = NSS_STATUS_UNAVAIL; } else { errno = err; } return ret; }