Ignore:
Timestamp:
Jun 8, 2009, 1:07:47 PM (15 years ago)
Author:
mitchb
Message:
Merge r1121:1178 from trunk to branches/fc11-dev
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/fc11-dev/server/common/oursrc/nss_nonlocal/nonlocal-passwd.c

    r782 r1179  
    9696    fct.ptr = fct_start;
    9797    do {
     98    morebuf:
    9899        if (fct.l == _nss_nonlocal_getpwuid_r)
    99100            status = NSS_STATUS_NOTFOUND;
    100101        else
    101102            status = DL_CALL_FCT(fct.l, (uid, &pwbuf, buf, buflen, errnop));
    102         if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE)
    103             break;
     103        if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE) {
     104            free(buf);
     105            buflen *= 2;
     106            buf = malloc(buflen);
     107            if (buf == NULL) {
     108                *errnop = ENOMEM;
     109                errno = old_errno;
     110                return NSS_STATUS_TRYAGAIN;
     111            }
     112            goto morebuf;
     113        }
    104114    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
    105115
     
    147157    fct.ptr = fct_start;
    148158    do {
     159    morebuf:
    149160        if (fct.l == _nss_nonlocal_getpwnam_r)
    150161            status = NSS_STATUS_NOTFOUND;
    151162        else
    152163            status = DL_CALL_FCT(fct.l, (user, &pwbuf, buf, buflen, errnop));
    153         if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE)
    154             break;
     164        if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE) {
     165            free(buf);
     166            buflen *= 2;
     167            buf = malloc(buflen);
     168            if (buf == NULL) {
     169                *errnop = ENOMEM;
     170                errno = old_errno;
     171                return NSS_STATUS_TRYAGAIN;
     172            }
     173            goto morebuf;
     174        }
    155175    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
    156176
Note: See TracChangeset for help on using the changeset viewer.