From: Lennart Poettering Date: Tue, 14 Mar 2023 09:38:58 +0000 (+0100) Subject: uid-range: add uid_range_overlaps() helper X-Git-Tag: v256-rc1~283^2~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5bff40e719ba2eca0c8cb894930b8d4928c2c1f9;p=thirdparty%2Fsystemd.git uid-range: add uid_range_overlaps() helper --- diff --git a/src/basic/uid-range.c b/src/basic/uid-range.c index 90eb0cd9112..65504b899ae 100644 --- a/src/basic/uid-range.c +++ b/src/basic/uid-range.c @@ -253,3 +253,23 @@ int uid_range_load_userns(UIDRange **ret, const char *path) { *ret = TAKE_PTR(range); return 0; } + +bool uid_range_overlaps(const UIDRange *range, uid_t start, uid_t nr) { + + if (!range) + return false; + + /* Avoid overflow */ + if (start > UINT32_MAX - nr) + nr = UINT32_MAX - start; + + if (nr == 0) + return false; + + FOREACH_ARRAY(entry, range->entries, range->n_entries) + if (start < entry->start + entry->nr && + start + nr >= entry->start) + return true; + + return false; +} diff --git a/src/basic/uid-range.h b/src/basic/uid-range.h index 5c4aac37260..acfb7191e99 100644 --- a/src/basic/uid-range.h +++ b/src/basic/uid-range.h @@ -34,3 +34,5 @@ static inline bool uid_range_contains(const UIDRange *range, uid_t uid) { int uid_map_read_one(FILE *f, uid_t *ret_base, uid_t *ret_shift, uid_t *ret_range); int uid_range_load_userns(UIDRange **ret, const char *path); + +bool uid_range_overlaps(const UIDRange *range, uid_t start, uid_t nr);