mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-02-02 09:47:03 +03:00
nss-systemd: properly handle empty membership lists
When we are queried for membership lists on a system that has exactly zero, then we'll return ESRCH immediately instead of at EOF. Which is OK, but we need to handle this in various places, and not get confused by it. (cherry picked from commit a1aa41e4e175c2712b97600d7e10e9d6c58e5543) (cherry picked from commit d0f8a01a74e5a1bed4d687339abde774cb944579) (cherry picked from commit 83c39430c06620ab208cdeeaaef9da31dd882a91)
This commit is contained in:
parent
15ccdae7a0
commit
8042245975
@ -426,7 +426,7 @@ enum nss_status _nss_systemd_getgrent_r(
|
||||
getgrent_data.iterator = userdb_iterator_free(getgrent_data.iterator);
|
||||
|
||||
r = membershipdb_all(nss_glue_userdb_flags(), &getgrent_data.iterator);
|
||||
if (r < 0) {
|
||||
if (r < 0 && r != -ESRCH) {
|
||||
UNPROTECT_ERRNO;
|
||||
*errnop = -r;
|
||||
return NSS_STATUS_UNAVAIL;
|
||||
@ -439,7 +439,7 @@ enum nss_status _nss_systemd_getgrent_r(
|
||||
return NSS_STATUS_UNAVAIL;
|
||||
} else if (!STR_IN_SET(gr->group_name, root_group.gr_name, nobody_group.gr_name)) {
|
||||
r = membershipdb_by_group_strv(gr->group_name, nss_glue_userdb_flags(), &members);
|
||||
if (r < 0) {
|
||||
if (r < 0 && r != -ESRCH) {
|
||||
UNPROTECT_ERRNO;
|
||||
*errnop = -r;
|
||||
return NSS_STATUS_UNAVAIL;
|
||||
@ -450,6 +450,9 @@ enum nss_status _nss_systemd_getgrent_r(
|
||||
if (getgrent_data.by_membership) {
|
||||
_cleanup_(_nss_systemd_unblockp) bool blocked = false;
|
||||
|
||||
if (!getgrent_data.iterator)
|
||||
return NSS_STATUS_NOTFOUND;
|
||||
|
||||
for (;;) {
|
||||
_cleanup_free_ char *user_name = NULL, *group_name = NULL;
|
||||
|
||||
|
@ -215,7 +215,7 @@ enum nss_status userdb_getgrnam(
|
||||
}
|
||||
|
||||
r = membershipdb_by_group_strv(name, nss_glue_userdb_flags(), &members);
|
||||
if (r < 0) {
|
||||
if (r < 0 && r != -ESRCH) {
|
||||
*errnop = -r;
|
||||
return NSS_STATUS_UNAVAIL;
|
||||
}
|
||||
@ -308,7 +308,7 @@ enum nss_status userdb_getgrgid(
|
||||
from_nss = false;
|
||||
|
||||
r = membershipdb_by_group_strv(g->group_name, nss_glue_userdb_flags(), &members);
|
||||
if (r < 0) {
|
||||
if (r < 0 && r != -ESRCH) {
|
||||
*errnop = -r;
|
||||
return NSS_STATUS_UNAVAIL;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user