]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
uid-range: add uid_range_overlaps() helper
authorLennart Poettering <lennart@poettering.net>
Tue, 14 Mar 2023 09:38:58 +0000 (10:38 +0100)
committerLennart Poettering <lennart@poettering.net>
Sat, 6 Apr 2024 14:08:23 +0000 (16:08 +0200)
src/basic/uid-range.c
src/basic/uid-range.h

index 90eb0cd9112591dbf662c5ff67d354e5cc739594..65504b899ae59ae3175c0b9bfa72399a02a06863 100644 (file)
@@ -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;
+}
index 5c4aac3726089b8869f6a59dd785c29e96c9a75a..acfb7191e99253f341a49f5763509eee39d4c84b 100644 (file)
@@ -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);