+ nip = startp;
+ fct.ptr = fct_start;
+ do {
+ status = DL_CALL_FCT(fct.l, (user, &pwbuf, buf, buflen, errnop));
+ if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE)
+ break;
+ } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
+
+ if (status == NSS_STATUS_SUCCESS)
+ status = NSS_STATUS_NOTFOUND;
+ else if (status != NSS_STATUS_TRYAGAIN)
+ status = NSS_STATUS_SUCCESS;
+
+ free(buf);