- if (status == NSS_STATUS_SUCCESS) {
- syslog(LOG_DEBUG, "nss_nonlocal: removing local group %u (%s) from non-local user %s\n", gbuf.gr_gid, gbuf.gr_name, user);
- free(buf);
- status = NSS_STATUS_NOTFOUND;
- } else if (status != NSS_STATUS_TRYAGAIN) {
- status = NSS_STATUS_SUCCESS;
+ if (status == NSS_STATUS_TRYAGAIN)
+ return status;
+ else if (status != NSS_STATUS_SUCCESS)
+ return NSS_STATUS_SUCCESS;
+
+ if (group == NULL || strcmp(gbuf.gr_name, group) == 0) {
+ char *const *mem;
+ for (mem = gbuf.gr_mem; *mem != NULL; mem++)
+ if (strcmp(*mem, MAGIC_NONLOCAL_USERNAME) == 0) {
+ status = check_nonlocal_user(*mem, errnop);
+ if (status == NSS_STATUS_TRYAGAIN) {
+ free(buf);
+ return status;
+ } else if (status == NSS_STATUS_NOTFOUND) {
+ free(buf);
+ return NSS_STATUS_SUCCESS;
+ }
+ break;
+ }