+enum nss_status
+check_nonlocal_user(const char *user, int *errnop)
+{
+ enum nss_status status = NSS_STATUS_SUCCESS;
+ struct passwd pwbuf;
+ struct passwd *pwbufp = &pwbuf;
+ int ret;
+ int old_errno = errno;
+ int buflen = MAGIC_LOCAL_PW_BUFLEN;
+ char *buf = malloc(buflen);
+ if (buf == NULL) {
+ *errnop = ENOMEM;
+ errno = old_errno;
+ return NSS_STATUS_TRYAGAIN;
+ }
+ errno = 0;
+ ret = getpwnam_r(user, pwbufp, buf, buflen, &pwbufp);
+ if (ret != 0) {
+ *errnop = errno;
+ status = NSS_STATUS_TRYAGAIN;
+ } else if (pwbufp != NULL) {
+ status = NSS_STATUS_NOTFOUND;
+ }
+ free(buf);
+ errno = old_errno;
+ return status;
+}