]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/test/test-user-record.c
license: LGPL-2.1+ -> LGPL-2.1-or-later
[thirdparty/systemd.git] / src / test / test-user-record.c
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
53393c89
ZJS
2
3#include <unistd.h>
4#include <sys/types.h>
5
aa25270c
ZJS
6#include "fd-util.h"
7#include "fileio.h"
53393c89 8#include "format-util.h"
aa25270c
ZJS
9#include "fs-util.h"
10#include "tmpfile-util.h"
53393c89
ZJS
11#include "tests.h"
12#include "user-record.h"
13
aa25270c
ZJS
14static void test_read_login_defs(const char *path) {
15 log_info("/* %s(\"%s\") */", __func__, path ?: "<custom>");
16
17 _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-user-record.XXXXXX";
18 _cleanup_fclose_ FILE *f = NULL;
19 if (!path) {
20 assert_se(fmkostemp_safe(name, "r+", &f) == 0);
21 fprintf(f,
22 "SYS_UID_MIN "UID_FMT"\n"
23 "SYS_UID_MAX "UID_FMT"\n"
24 "SYS_GID_MIN "GID_FMT"\n"
25 "SYS_GID_MAX "GID_FMT"\n",
26 SYSTEM_ALLOC_UID_MIN + 5,
27 SYSTEM_UID_MAX + 5,
28 SYSTEM_ALLOC_GID_MIN + 5,
29 SYSTEM_GID_MAX + 5);
30 assert_se(fflush_and_check(f) >= 0);
31 }
32
33 UGIDAllocationRange defs;
34 assert_se(read_login_defs(&defs, path ?: name, NULL) >= 0);
35
36 log_info("system_alloc_uid_min="UID_FMT, defs.system_alloc_uid_min);
37 log_info("system_uid_max="UID_FMT, defs.system_uid_max);
38 log_info("system_alloc_gid_min="GID_FMT, defs.system_alloc_gid_min);
39 log_info("system_gid_max="GID_FMT, defs.system_gid_max);
40
41 if (!path) {
42 uid_t offset = ENABLE_COMPAT_MUTABLE_UID_BOUNDARIES ? 5 : 0;
43 assert_se(defs.system_alloc_uid_min == SYSTEM_ALLOC_UID_MIN + offset);
44 assert_se(defs.system_uid_max == SYSTEM_UID_MAX + offset);
45 assert_se(defs.system_alloc_gid_min == SYSTEM_ALLOC_GID_MIN + offset);
46 assert_se(defs.system_gid_max == SYSTEM_GID_MAX + offset);
47 } else if (streq(path, "/dev/null")) {
48 assert_se(defs.system_alloc_uid_min == SYSTEM_ALLOC_UID_MIN);
49 assert_se(defs.system_uid_max == SYSTEM_UID_MAX);
50 assert_se(defs.system_alloc_gid_min == SYSTEM_ALLOC_GID_MIN);
51 assert_se(defs.system_gid_max == SYSTEM_GID_MAX);
52 }
53}
54
53393c89
ZJS
55static void test_acquire_ugid_allocation_range(void) {
56 log_info("/* %s */", __func__);
57
58 const UGIDAllocationRange *defs;
59 assert_se(defs = acquire_ugid_allocation_range());
60
fc1a5d1a 61 log_info("system_alloc_uid_min="UID_FMT, defs->system_alloc_uid_min);
53393c89 62 log_info("system_uid_max="UID_FMT, defs->system_uid_max);
fc1a5d1a 63 log_info("system_alloc_gid_min="GID_FMT, defs->system_alloc_gid_min);
53393c89
ZJS
64 log_info("system_gid_max="GID_FMT, defs->system_gid_max);
65}
66
67static void test_uid_is_system(void) {
68 log_info("/* %s */", __func__);
69
70 uid_t uid = 0;
71 log_info("uid_is_system("UID_FMT") = %s", uid, yes_no(uid_is_system(uid)));
72
73 uid = 999;
74 log_info("uid_is_system("UID_FMT") = %s", uid, yes_no(uid_is_system(uid)));
75
76 uid = getuid();
77 log_info("uid_is_system("UID_FMT") = %s", uid, yes_no(uid_is_system(uid)));
78}
79
80static void test_gid_is_system(void) {
81 log_info("/* %s */", __func__);
82
83 gid_t gid = 0;
84 log_info("gid_is_system("GID_FMT") = %s", gid, yes_no(gid_is_system(gid)));
85
86 gid = 999;
87 log_info("gid_is_system("GID_FMT") = %s", gid, yes_no(gid_is_system(gid)));
88
89 gid = getgid();
90 log_info("gid_is_system("GID_FMT") = %s", gid, yes_no(gid_is_system(gid)));
91}
92
93int main(int argc, char *argv[]) {
94 test_setup_logging(LOG_DEBUG);
95
aa25270c
ZJS
96 test_read_login_defs("/dev/null");
97 test_read_login_defs("/etc/login.defs");
98 test_read_login_defs(NULL);
53393c89
ZJS
99 test_acquire_ugid_allocation_range();
100 test_uid_is_system();
101 test_gid_is_system();
102
103 return 0;
104}