struct UserDBIterator {
LookupWhat what;
+ UserDBFlags flags;
Set *links;
bool nss_covered:1;
bool nss_iterating:1;
return mfree(iterator);
}
-static UserDBIterator* userdb_iterator_new(LookupWhat what) {
+static UserDBIterator* userdb_iterator_new(LookupWhat what, UserDBFlags flags) {
UserDBIterator *i;
assert(what >= 0);
*i = (UserDBIterator) {
.what = what,
+ .flags = flags,
};
return i;
if (r < 0)
return r;
- iterator = userdb_iterator_new(LOOKUP_USER);
+ iterator = userdb_iterator_new(LOOKUP_USER, flags);
if (!iterator)
return -ENOMEM;
if (r < 0)
return r;
- iterator = userdb_iterator_new(LOOKUP_USER);
+ iterator = userdb_iterator_new(LOOKUP_USER, flags);
if (!iterator)
return -ENOMEM;
assert(ret);
- iterator = userdb_iterator_new(LOOKUP_USER);
+ iterator = userdb_iterator_new(LOOKUP_USER, flags);
if (!iterator)
return -ENOMEM;
if (pw->pw_uid == UID_NOBODY)
iterator->synthesize_nobody = false;
- r = nss_spwd_for_passwd(pw, &spwd, &buffer);
- if (r < 0) {
- log_debug_errno(r, "Failed to acquire shadow entry for user %s, ignoring: %m", pw->pw_name);
- incomplete = ERRNO_IS_PRIVILEGE(r);
+ if (!FLAGS_SET(iterator->flags, USERDB_AVOID_SHADOW)) {
+ r = nss_spwd_for_passwd(pw, &spwd, &buffer);
+ if (r < 0) {
+ log_debug_errno(r, "Failed to acquire shadow entry for user %s, ignoring: %m", pw->pw_name);
+ incomplete = ERRNO_IS_PRIVILEGE(r);
+ }
+ } else {
+ r = -EUCLEAN;
+ incomplete = true;
}
r = nss_passwd_to_user_record(pw, r >= 0 ? &spwd : NULL, ret);
if (r < 0)
return r;
- iterator = userdb_iterator_new(LOOKUP_GROUP);
+ iterator = userdb_iterator_new(LOOKUP_GROUP, flags);
if (!iterator)
return -ENOMEM;
if (r < 0)
return r;
- iterator = userdb_iterator_new(LOOKUP_GROUP);
+ iterator = userdb_iterator_new(LOOKUP_GROUP, flags);
if (!iterator)
return -ENOMEM;
assert(ret);
- iterator = userdb_iterator_new(LOOKUP_GROUP);
+ iterator = userdb_iterator_new(LOOKUP_GROUP, flags);
if (!iterator)
return -ENOMEM;
if (gr->gr_gid == GID_NOBODY)
iterator->synthesize_nobody = false;
- r = nss_sgrp_for_group(gr, &sgrp, &buffer);
- if (r < 0) {
- log_debug_errno(r, "Failed to acquire shadow entry for group %s, ignoring: %m", gr->gr_name);
- incomplete = ERRNO_IS_PRIVILEGE(r);
+ if (!FLAGS_SET(iterator->flags, USERDB_AVOID_SHADOW)) {
+ r = nss_sgrp_for_group(gr, &sgrp, &buffer);
+ if (r < 0) {
+ log_debug_errno(r, "Failed to acquire shadow entry for group %s, ignoring: %m", gr->gr_name);
+ incomplete = ERRNO_IS_PRIVILEGE(r);
+ }
+ } else {
+ r = -EUCLEAN;
+ incomplete = true;
}
r = nss_group_to_group_record(gr, r >= 0 ? &sgrp : NULL, ret);
if (r < 0)
return r;
- iterator = userdb_iterator_new(LOOKUP_MEMBERSHIP);
+ iterator = userdb_iterator_new(LOOKUP_MEMBERSHIP, flags);
if (!iterator)
return -ENOMEM;
if (r < 0)
return r;
- iterator = userdb_iterator_new(LOOKUP_MEMBERSHIP);
+ iterator = userdb_iterator_new(LOOKUP_MEMBERSHIP, flags);
if (!iterator)
return -ENOMEM;
assert(ret);
- iterator = userdb_iterator_new(LOOKUP_MEMBERSHIP);
+ iterator = userdb_iterator_new(LOOKUP_MEMBERSHIP, flags);
if (!iterator)
return -ENOMEM;