Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 244911 | Differences between
and this patch

Collapse All | Expand All

(-)src/nsvs/grp.c (-4 / +18 lines)
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;

Return to bug 244911