mirror of
https://github.com/systemd/systemd.git
synced 2024-11-01 09:21:26 +03:00
nss-systemd: tweak checks when we consult PID 1 for dynamic UID/GID lookups
Instead of contacting PID 1 for dynamic UID/GID lookups for all UIDs/GIDs that do not qualify as "system" do the more precise check instead: check if they actually qualify for the "dynamic" range.
This commit is contained in:
parent
4e72397b00
commit
8343827793
@ -64,6 +64,10 @@ static inline bool uid_is_dynamic(uid_t uid) {
|
||||
return DYNAMIC_UID_MIN <= uid && uid <= DYNAMIC_UID_MAX;
|
||||
}
|
||||
|
||||
static inline bool gid_is_dynamic(gid_t gid) {
|
||||
return uid_is_dynamic((uid_t) gid);
|
||||
}
|
||||
|
||||
static inline bool uid_is_system(uid_t uid) {
|
||||
return uid <= SYSTEM_UID_MAX;
|
||||
}
|
||||
|
@ -251,7 +251,7 @@ enum nss_status _nss_systemd_getpwuid_r(
|
||||
}
|
||||
}
|
||||
|
||||
if (uid_is_system(uid))
|
||||
if (!uid_is_dynamic(uid))
|
||||
goto not_found;
|
||||
|
||||
if (getenv_bool_secure("SYSTEMD_NSS_DYNAMIC_BYPASS") > 0)
|
||||
@ -463,7 +463,7 @@ enum nss_status _nss_systemd_getgrgid_r(
|
||||
}
|
||||
}
|
||||
|
||||
if (gid_is_system(gid))
|
||||
if (!gid_is_dynamic(gid))
|
||||
goto not_found;
|
||||
|
||||
if (getenv_bool_secure("SYSTEMD_NSS_DYNAMIC_BYPASS") > 0)
|
||||
@ -500,7 +500,6 @@ enum nss_status _nss_systemd_getgrgid_r(
|
||||
|
||||
direct_lookup:
|
||||
if (bypass > 0) {
|
||||
|
||||
r = direct_lookup_uid(gid, &direct);
|
||||
if (r == -ENOENT)
|
||||
goto not_found;
|
||||
|
Loading…
Reference in New Issue
Block a user