diff --git a/shadow-4.11.1-subordinateio-also-compare-the-owner-ID.patch b/shadow-4.11.1-subordinateio-also-compare-the-owner-ID.patch new file mode 100644 index 0000000..e761de0 --- /dev/null +++ b/shadow-4.11.1-subordinateio-also-compare-the-owner-ID.patch @@ -0,0 +1,108 @@ +From 3ec32f9975f262073f8fbdecd2bfaee4a1d3db48 Mon Sep 17 00:00:00 2001 +From: Iker Pedrosa +Date: Wed, 13 Jul 2022 09:55:14 +0200 +Subject: [PATCH] subordinateio: also compare the owner ID + +IDs already populate /etc/subuid and /etc/subgid files so it's necessary +not only to check for the owner name but also for the owner ID of a +given range. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2093311 + +Signed-off-by: Iker Pedrosa +--- + lib/subordinateio.c | 50 +++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 50 insertions(+) + +diff --git a/lib/subordinateio.c b/lib/subordinateio.c +index 9ca70b8b..6bc45283 100644 +--- a/lib/subordinateio.c ++++ b/lib/subordinateio.c +@@ -17,6 +17,8 @@ + #include + #include + ++#define ID_SIZE 31 ++ + /* + * subordinate_dup: create a duplicate range + * +@@ -745,6 +747,40 @@ gid_t sub_gid_find_free_range(gid_t min, gid_t max, unsigned long count) + return start == ULONG_MAX ? (gid_t) -1 : start; + } + ++static bool get_owner_id(const char *owner, enum subid_type id_type, char *id) ++{ ++ struct passwd *pw; ++ struct group *gr; ++ int ret = 0; ++ ++ switch (id_type) { ++ case ID_TYPE_UID: ++ pw = getpwnam(owner); ++ if (pw == NULL) { ++ return false; ++ } ++ ret = snprintf(id, ID_SIZE, "%u", pw->pw_uid); ++ if (ret < 0 || ret >= ID_SIZE) { ++ return false; ++ } ++ break; ++ case ID_TYPE_GID: ++ gr = getgrnam(owner); ++ if (gr == NULL) { ++ return false; ++ } ++ ret = snprintf(id, ID_SIZE, "%u", gr->gr_gid); ++ if (ret < 0 || ret >= ID_SIZE) { ++ return false; ++ } ++ break; ++ default: ++ return false; ++ } ++ ++ return true; ++} ++ + /* + * int list_owner_ranges(const char *owner, enum subid_type id_type, struct subordinate_range ***ranges) + * +@@ -770,6 +806,8 @@ int list_owner_ranges(const char *owner, enum subid_type id_type, struct subid_r + enum subid_status status; + int count = 0; + struct subid_nss_ops *h; ++ char id[ID_SIZE]; ++ bool have_owner_id; + + *in_ranges = NULL; + +@@ -798,6 +836,8 @@ int list_owner_ranges(const char *owner, enum subid_type id_type, struct subid_r + return -1; + } + ++ have_owner_id = get_owner_id(owner, id_type, id); ++ + commonio_rewind(db); + while ((range = commonio_next(db)) != NULL) { + if (0 == strcmp(range->owner, owner)) { +@@ -808,6 +848,16 @@ int list_owner_ranges(const char *owner, enum subid_type id_type, struct subid_r + goto out; + } + } ++ ++ // Let's also compare with the ID ++ if (have_owner_id == true && 0 == strcmp(range->owner, id)) { ++ if (!append_range(&ranges, range, count++)) { ++ free(ranges); ++ ranges = NULL; ++ count = -1; ++ goto out; ++ } ++ } + } + + out: +-- +2.37.3 + diff --git a/shadow-utils.spec b/shadow-utils.spec index 2979093..fcd11be 100644 --- a/shadow-utils.spec +++ b/shadow-utils.spec @@ -1,7 +1,7 @@ Summary: Utilities for managing accounts and shadow password files Name: shadow-utils Version: 4.9 -Release: 10%{?dist} +Release: 11%{?dist} Epoch: 2 License: BSD and GPLv2+ URL: https://github.com/shadow-maint/shadow @@ -78,6 +78,8 @@ Patch27: shadow-4.9-shadow-progname-default-init.patch Patch28: shadow-4.9-nss-get-shadow-logfd-with-log-get-logfd.patch # https://github.com/shadow-maint/shadow/commit/f1f1678e13aa3ae49bdb139efaa2c5bc53dcfe92 Patch29: shadow-4.9-useradd-modify-check-ID-range-for-system-users.patch +# https://github.com/shadow-maint/shadow/commit/3ec32f9975f262073f8fbdecd2bfaee4a1d3db48 +Patch30: shadow-4.11.1-subordinateio-also-compare-the-owner-ID.patch ### Dependencies ### Requires: audit-libs >= 1.6.5 @@ -167,6 +169,7 @@ Development files for shadow-utils-subid. %patch27 -p1 -b .shadow-progname-default-init %patch28 -p1 -b .nss-get-shadow-logfd-with-log-get-logfd %patch29 -p1 -b .useradd-modify-check-ID-range-for-system-users +%patch30 -p1 -b .subordinateio-also-compare-the-owner-ID iconv -f ISO88591 -t utf-8 doc/HOWTO > doc/HOWTO.utf8 cp -f doc/HOWTO.utf8 doc/HOWTO @@ -339,6 +342,9 @@ rm -f $RPM_BUILD_ROOT/%{_libdir}/libsubid.la %{_libdir}/libsubid.so %changelog +* Mon Sep 19 2022 Iker Pedrosa - 2:4.9-11 +- subordinateio: also compare the owner ID. Resolves: #2118227 + * Mon Aug 22 2022 Iker Pedrosa - 2:4.9-10 - useradd: modify check ID range for system users. Resolves: #2093692