]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/basic/uid-range.h
Merge pull request #30284 from YHNdnzj/fstab-wantedby-defaultdeps
[thirdparty/systemd.git] / src / basic / uid-range.h
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 #pragma once
3
4 #include <stdbool.h>
5 #include <sys/types.h>
6
7 #include "macro.h"
8
9 typedef struct UidRangeEntry {
10 uid_t start, nr;
11 } UidRangeEntry;
12
13 typedef struct UidRange {
14 UidRangeEntry *entries;
15 size_t n_entries;
16 } UidRange;
17
18 UidRange *uid_range_free(UidRange *range);
19 DEFINE_TRIVIAL_CLEANUP_FUNC(UidRange*, uid_range_free);
20
21 int uid_range_add_internal(UidRange **range, uid_t start, uid_t nr, bool coalesce);
22 static inline int uid_range_add(UidRange **range, uid_t start, uid_t nr) {
23 return uid_range_add_internal(range, start, nr, true);
24 }
25 int uid_range_add_str(UidRange **range, const char *s);
26
27 int uid_range_next_lower(const UidRange *range, uid_t *uid);
28
29 bool uid_range_covers(const UidRange *range, uid_t start, uid_t nr);
30 static inline bool uid_range_contains(const UidRange *range, uid_t uid) {
31 return uid_range_covers(range, uid, 1);
32 }
33
34 int uid_map_read_one(FILE *f, uid_t *ret_base, uid_t *ret_shift, uid_t *ret_range);
35
36 int uid_range_load_userns(UidRange **ret, const char *path);