Return NSS_STATUS_TRYAGAIN if we run out of memory. */
static NSS_STATUS fill_grent(struct group *result, struct winbindd_gr *gr,
- char *gr_mem, char **buffer, size_t *buflen)
+ const char *gr_mem, char **buffer, size_t *buflen)
{
char *name;
int i;
winbindd_free_response(&getpwent_response);
}
- ret = winbindd_request_response(WINBINDD_SETPWENT, NULL, NULL);
+ ret = winbindd_request_response(NULL, WINBINDD_SETPWENT, NULL, NULL);
#ifdef DEBUG_NSS
fprintf(stderr, "[%5d]: setpwent returns %s (%d)\n", getpid(),
nss_err_str(ret), ret);
winbindd_free_response(&getpwent_response);
}
- ret = winbindd_request_response(WINBINDD_ENDPWENT, NULL, NULL);
+ ret = winbindd_request_response(NULL, WINBINDD_ENDPWENT, NULL, NULL);
#ifdef DEBUG_NSS
fprintf(stderr, "[%5d]: endpwent returns %s (%d)\n", getpid(),
nss_err_str(ret), ret);
request.data.num_entries = MAX_GETPWENT_USERS;
- ret = winbindd_request_response(WINBINDD_GETPWENT, &request,
+ ret = winbindd_request_response(NULL, WINBINDD_GETPWENT, &request,
&getpwent_response);
if (ret == NSS_STATUS_SUCCESS) {
request.data.uid = uid;
- ret = winbindd_request_response(WINBINDD_GETPWUID, &request, &response);
+ ret = winbindd_request_response(NULL, WINBINDD_GETPWUID, &request, &response);
if (ret == NSS_STATUS_SUCCESS) {
ret = fill_pwent(result, &response.data.pw,
request.data.username
[sizeof(request.data.username) - 1] = '\0';
- ret = winbindd_request_response(WINBINDD_GETPWNAM, &request, &response);
+ ret = winbindd_request_response(NULL, WINBINDD_GETPWNAM, &request, &response);
if (ret == NSS_STATUS_SUCCESS) {
ret = fill_pwent(result, &response.data.pw, &buffer,
winbindd_free_response(&getgrent_response);
}
- ret = winbindd_request_response(WINBINDD_SETGRENT, NULL, NULL);
+ ret = winbindd_request_response(NULL, WINBINDD_SETGRENT, NULL, NULL);
#ifdef DEBUG_NSS
fprintf(stderr, "[%5d]: setgrent returns %s (%d)\n", getpid(),
nss_err_str(ret), ret);
winbindd_free_response(&getgrent_response);
}
- ret = winbindd_request_response(WINBINDD_ENDGRENT, NULL, NULL);
+ ret = winbindd_request_response(NULL, WINBINDD_ENDGRENT, NULL, NULL);
#ifdef DEBUG_NSS
fprintf(stderr, "[%5d]: endgrent returns %s (%d)\n", getpid(),
nss_err_str(ret), ret);
request.data.num_entries = MAX_GETGRENT_USERS;
- ret = winbindd_request_response(cmd, &request,
+ ret = winbindd_request_response(NULL, cmd, &request,
&getgrent_response);
if (ret == NSS_STATUS_SUCCESS) {
request.data.groupname
[sizeof(request.data.groupname) - 1] = '\0';
- ret = winbindd_request_response(WINBINDD_GETGRNAM, &request, &response);
+ ret = winbindd_request_response(NULL, WINBINDD_GETGRNAM,
+ &request, &response);
if (ret == NSS_STATUS_SUCCESS) {
ret = fill_grent(result, &response.data.gr,
request.data.gid = gid;
- ret = winbindd_request_response(WINBINDD_GETGRGID, &request, &response);
+ ret = winbindd_request_response(NULL, WINBINDD_GETGRGID,
+ &request, &response);
if (ret == NSS_STATUS_SUCCESS) {
strncpy(request.data.username, user,
sizeof(request.data.username) - 1);
- ret = winbindd_request_response(WINBINDD_GETGROUPS, &request, &response);
+ ret = winbindd_request_response(NULL, WINBINDD_GETGROUPS,
+ &request, &response);
if (ret == NSS_STATUS_SUCCESS) {
int num_gids = response.data.num_entries;
continue;
}
+ /* Skip groups without a mapping */
+ if (gid_list[i] == (uid_t)-1) {
+ continue;
+ }
+
/* Filled buffer ? If so, resize. */
if (*start == *size) {
strncpy(request.data.sid, user_sid,sizeof(request.data.sid) - 1);
request.data.sid[sizeof(request.data.sid) - 1] = '\0';
- ret = winbindd_request_response(WINBINDD_GETUSERSIDS, &request, &response);
+ ret = winbindd_request_response(NULL, WINBINDD_GETUSERSIDS,
+ &request, &response);
if (ret != NSS_STATUS_SUCCESS) {
goto done;
sizeof(request.data.name.name) - 1);
request.data.name.name[sizeof(request.data.name.name) - 1] = '\0';
- ret = winbindd_request_response(WINBINDD_LOOKUPNAME, &request, &response);
+ ret = winbindd_request_response(NULL, WINBINDD_LOOKUPNAME,
+ &request, &response);
if (ret != NSS_STATUS_SUCCESS) {
*errnop = errno = EINVAL;
goto failed;
/* we need to fetch the separator first time through */
if (!sep_char) {
- ret = winbindd_request_response(WINBINDD_INFO, &request, &response);
+ ret = winbindd_request_response(NULL, WINBINDD_INFO,
+ &request, &response);
if (ret != NSS_STATUS_SUCCESS) {
*errnop = errno = EINVAL;
goto failed;
sizeof(request.data.sid) - 1);
request.data.sid[sizeof(request.data.sid) - 1] = '\0';
- ret = winbindd_request_response(WINBINDD_LOOKUPSID, &request, &response);
+ ret = winbindd_request_response(NULL, WINBINDD_LOOKUPSID,
+ &request, &response);
if (ret != NSS_STATUS_SUCCESS) {
*errnop = errno = EINVAL;
goto failed;
strncpy(request.data.sid, sid, sizeof(request.data.sid) - 1);
request.data.sid[sizeof(request.data.sid) - 1] = '\0';
- ret = winbindd_request_response(WINBINDD_SID_TO_UID, &request, &response);
+ ret = winbindd_request_response(NULL, WINBINDD_SID_TO_UID,
+ &request, &response);
if (ret != NSS_STATUS_SUCCESS) {
*errnop = errno = EINVAL;
goto failed;
strncpy(request.data.sid, sid, sizeof(request.data.sid) - 1);
request.data.sid[sizeof(request.data.sid) - 1] = '\0';
- ret = winbindd_request_response(WINBINDD_SID_TO_GID, &request, &response);
+ ret = winbindd_request_response(NULL, WINBINDD_SID_TO_GID,
+ &request, &response);
if (ret != NSS_STATUS_SUCCESS) {
*errnop = errno = EINVAL;
goto failed;
request.data.uid = uid;
- ret = winbindd_request_response(WINBINDD_UID_TO_SID, &request, &response);
+ ret = winbindd_request_response(NULL, WINBINDD_UID_TO_SID,
+ &request, &response);
if (ret != NSS_STATUS_SUCCESS) {
*errnop = errno = EINVAL;
goto failed;
request.data.gid = gid;
- ret = winbindd_request_response(WINBINDD_GID_TO_SID, &request, &response);
+ ret = winbindd_request_response(NULL, WINBINDD_GID_TO_SID,
+ &request, &response);
if (ret != NSS_STATUS_SUCCESS) {
*errnop = errno = EINVAL;
goto failed;