Lines 328-345
Link Here
|
328 |
if (++grent.cur_rec > grent.response_header.count) |
328 |
if (++grent.cur_rec > grent.response_header.count) |
329 |
return NSS_NOTFOUND; |
329 |
return NSS_NOTFOUND; |
330 |
|
330 |
|
331 |
if (buflen < grent.response_header.response_size) |
331 |
if (buflen < grent.response_header.response_size) { |
|
|
332 |
/* Need to back out the grent rec counter for retry */ |
333 |
--grent.cur_rec; |
332 |
EXHAUSTED_BUFFER; |
334 |
EXHAUSTED_BUFFER; |
|
|
335 |
} |
333 |
|
336 |
|
334 |
/* Load main group data */ |
337 |
/* Load main group data */ |
335 |
memset (buf_out, 0, buflen); |
338 |
memset (buf_out, 0, buflen); |
336 |
status = _load_group (grent.dp, result, buf_out, buflen, errnop); |
339 |
status = _load_group (grent.dp, result, buf_out, buflen, errnop); |
337 |
if (status != NSS_SUCCESS) |
340 |
if (status != NSS_SUCCESS) |
|
|
341 |
/* should be backing out here too? really long group name? prob not possible */ |
338 |
return status; |
342 |
return status; |
339 |
|
343 |
|
340 |
/* Move to next record NOW, as we may not have a member list below */ |
|
|
341 |
grent.dp = (struct response_data *) &(((char *)grent.dp)[grent.dp->header.record_size]); |
342 |
|
343 |
/* Skip ahead to where we'll put member list */ |
344 |
/* Skip ahead to where we'll put member list */ |
344 |
buf_out += grent.response_header.response_size; |
345 |
buf_out += grent.response_header.response_size; |
345 |
buflen -= grent.response_header.response_size; |
346 |
buflen -= grent.response_header.response_size; |
Lines 348-353
Link Here
|
348 |
snprintf (key, 12, "%u", result->gr_gid); |
349 |
snprintf (key, 12, "%u", result->gr_gid); |
349 |
status = _get_response_data (GETGRMEMSBYGID, key, &response_header, &data, |
350 |
status = _get_response_data (GETGRMEMSBYGID, key, &response_header, &data, |
350 |
MULTI_READ_TIMEOUT); |
351 |
MULTI_READ_TIMEOUT); |
|
|
352 |
|
353 |
/* We need to check buffer adequacy for the member list before moving to |
354 |
* the next record. Also back-out the incremented grent rec counter. */ |
355 |
if (status == NSS_SUCCESS && |
356 |
(((buflen - 1) - ((response_header.count + 1) * sizeof(char *))) < |
357 |
(response_header.response_size - (response_header.count * RDS)))) { |
358 |
--grent.cur_rec; |
359 |
EXHAUSTED_BUFFER; |
360 |
} |
361 |
|
362 |
/* Move to next record NOW, as we may not have a member list below */ |
363 |
grent.dp = (struct response_data *) &(((char *)grent.dp)[grent.dp->header.record_size]); |
364 |
|
351 |
if (status == NSS_NOTFOUND) |
365 |
if (status == NSS_NOTFOUND) |
352 |
{ |
366 |
{ |
353 |
result->gr_mem = (char **) (uintptr_t)buf_out; |
367 |
result->gr_mem = (char **) (uintptr_t)buf_out; |