1#define _GNU_SOURCE
2#include <unistd.h>
3
4#include "libc.h"
5#include <errno.h>
6
7#define ZX_PPID ((pid_t)2)
8#define ZX_PID ((pid_t)3)
9#define ZX_PGID ((pid_t)17)
10#define ZX_SID ((pid_t)19)
11#define ZX_UID ((uid_t)23)
12#define ZX_GID ((gid_t)42)
13
14static gid_t stub_getegid(void) {
15    return ZX_GID;
16}
17weak_alias(stub_getegid, getegid);
18
19static gid_t stub_getgid(void) {
20    return ZX_GID;
21}
22weak_alias(stub_getgid, getgid);
23
24static int stub_getgroups(int count, gid_t list[]) {
25    if (!list)
26        return EFAULT;
27    return 0;
28}
29weak_alias(stub_getgroups, getgroups);
30
31static int stub_getresgid(gid_t* rgid, gid_t* egid, gid_t* sgid) {
32    if (!rgid || !egid || !sgid)
33        return EFAULT;
34    *rgid = *egid = *sgid = ZX_GID;
35    return 0;
36}
37weak_alias(stub_getresgid, getresgid);
38
39static int stub_getresuid(uid_t* ruid, uid_t* euid, uid_t* suid) {
40    if (!ruid || !euid || !suid)
41        return EFAULT;
42    *ruid = *euid = *suid = ZX_UID;
43    return 0;
44}
45weak_alias(stub_getresuid, getresuid);
46
47static pid_t stub_getpgid(pid_t pid) {
48    return ZX_PGID;
49}
50weak_alias(stub_getpgid, getpgid);
51
52static pid_t stub_getpgrp(void) {
53    return ZX_PGID;
54}
55weak_alias(stub_getpgrp, getpgrp);
56
57static pid_t stub_getpid(void) {
58    return ZX_PID;
59}
60weak_alias(stub_getpid, getpid);
61
62static pid_t stub_getppid(void) {
63    return ZX_PPID;
64}
65weak_alias(stub_getppid, getppid);
66
67static pid_t stub_getsid(pid_t pid) {
68    return ZX_SID;
69}
70weak_alias(stub_getsid, getsid);
71
72static uid_t stub_geteuid(void) {
73    return ZX_UID;
74}
75weak_alias(stub_geteuid, geteuid);
76
77static uid_t stub_getuid(void) {
78    return ZX_UID;
79}
80weak_alias(stub_getuid, getuid);
81
82static pid_t stub_setsid(void) {
83    return ZX_SID;
84}
85weak_alias(stub_setsid, setsid);
86
87static int stub_setegid(gid_t egid) {
88    return ZX_GID;
89}
90weak_alias(stub_setegid, setegid);
91
92static int stub_seteuid(uid_t euid) {
93    errno = EPERM;
94    return -1;
95}
96weak_alias(stub_seteuid, seteuid);
97
98static int stub_setgid(gid_t gid) {
99    errno = EPERM;
100    return -1;
101}
102weak_alias(stub_setgid, setgid);
103
104static int stub_setgroups(size_t count, const gid_t list[]) {
105    errno = EPERM;
106    return -1;
107}
108weak_alias(stub_setgroups, setgroups);
109
110static int stub_setpgid(pid_t pid, pid_t pgid) {
111    errno = EPERM;
112    return -1;
113}
114weak_alias(stub_setpgid, setpgid);
115
116static int stub_setregid(gid_t rgid, gid_t egid) {
117    errno = EPERM;
118    return -1;
119}
120weak_alias(stub_setregid, setregid);
121
122static int stub_setresgid(gid_t rgid, gid_t egid, gid_t sgid) {
123    errno = EPERM;
124    return -1;
125}
126weak_alias(stub_setresgid, setresgid);
127
128static int stub_setresuid(uid_t ruid, uid_t euid, uid_t suid) {
129    errno = EPERM;
130    return -1;
131}
132weak_alias(stub_setresuid, setresuid);
133
134static int stub_setreuid(uid_t ruid, uid_t euid) {
135    errno = EPERM;
136    return -1;
137}
138weak_alias(stub_setreuid, setreuid);
139
140static int stub_setuid(uid_t uid) {
141    errno = EPERM;
142    return -1;
143}
144weak_alias(stub_setuid, setuid);
145