mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 08:25:20 +09:00
A bit confusingly CONTAINER_UID_BASE_MAX is just the maximum *base* UID for a container. Thus, with the usual 64K UID assignments, the last actual container UID is CONTAINER_UID_BASE_MAX+0xFFFF. To make this less confusing define CONTAINER_UID_MIN/MAX that add the missing extra space. Also adjust two uses where this was mishandled so far, due to this confusion. With this change the UID ranges we default to should properly match what is documented on https://systemd.io/UIDS-GIDS/.
45 lines
1.3 KiB
C
45 lines
1.3 KiB
C
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
#pragma once
|
|
|
|
#include <stdbool.h>
|
|
#include <sys/types.h>
|
|
|
|
/* The container base should have the last 16 bit set to zero */
|
|
assert_cc((CONTAINER_UID_BASE_MIN & 0xFFFFU) == 0);
|
|
assert_cc((CONTAINER_UID_BASE_MAX & 0xFFFFU) == 0);
|
|
|
|
/* Given we assign 64K UIDs to containers, the last container UID is 0xFFFF larger than the base */
|
|
#define CONTAINER_UID_MIN (CONTAINER_UID_BASE_MIN)
|
|
#define CONTAINER_UID_MAX (CONTAINER_UID_BASE_MAX + 0xFFFFU)
|
|
|
|
bool uid_is_system(uid_t uid);
|
|
bool gid_is_system(gid_t gid);
|
|
|
|
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_container(uid_t uid) {
|
|
return CONTAINER_UID_MIN <= uid && uid <= CONTAINER_UID_MAX;
|
|
}
|
|
|
|
static inline bool gid_is_container(gid_t gid) {
|
|
return uid_is_container((uid_t) gid);
|
|
}
|
|
|
|
typedef struct UGIDAllocationRange {
|
|
uid_t system_alloc_uid_min;
|
|
uid_t system_uid_max;
|
|
gid_t system_alloc_gid_min;
|
|
gid_t system_gid_max;
|
|
} UGIDAllocationRange;
|
|
|
|
int read_login_defs(UGIDAllocationRange *ret_defs, const char *path, const char *root);
|
|
const UGIDAllocationRange *acquire_ugid_allocation_range(void);
|
|
|
|
bool uid_for_system_journal(uid_t uid);
|