- ret = getpwnam_r(user, pwbufp, buf, buflen, &pwbufp);
- if (ret != 0) {
- *errnop = errno;
- status = NSS_STATUS_TRYAGAIN;
- } else if (pwbufp != NULL) {
+ if (status != NSS_STATUS_SUCCESS)
+ return status;
+
+ return check_nonlocal_uid(user, pwd->pw_uid, errnop);
+}
+
+enum nss_status
+check_nonlocal_user(const char *user, int *errnop)
+{
+ enum nss_status status;
+ struct passwd pwbuf;
+ char *buf;
+ size_t buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
+ const struct walk_nss w = {
+ .lookup = __nss_passwd_lookup, .fct_name = "getpwnam_r",
+ .status = &status, .errnop = errnop, .buf = &buf, .buflen = &buflen
+ };
+ const __typeof__(&_nss_nonlocal_getpwnam_r) self = &_nss_nonlocal_getpwnam_r;
+#define args (user, &pwbuf, buf, buflen, errnop)
+#include "walk_nss.h"
+#undef args
+
+ if (status == NSS_STATUS_SUCCESS) {
+ free(buf);