tools/nolibc: add getuid() and geteuid()

This can be useful to avoid attempting some privileged operations,
starting from the nolibc-test tool that gets two failures when not
privileged.

We call getuid32() and geteuid32() when they are defined, and fall
back to getuid() and geteuid() otherwise.

Signed-off-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
This commit is contained in:
Willy Tarreau 2023-03-04 15:28:40 +01:00 committed by Paul E. McKenney
parent d1209597ff
commit 919d0532d4
1 changed files with 42 additions and 0 deletions

View File

@ -410,6 +410,27 @@ int getdents64(int fd, struct linux_dirent64 *dirp, int count)
}
/*
* uid_t geteuid(void);
*/
static __attribute__((unused))
uid_t sys_geteuid(void)
{
#ifdef __NR_geteuid32
return my_syscall0(__NR_geteuid32);
#else
return my_syscall0(__NR_geteuid);
#endif
}
static __attribute__((unused))
uid_t geteuid(void)
{
return sys_geteuid();
}
/*
* pid_t getpgid(pid_t pid);
*/
@ -544,6 +565,27 @@ int gettimeofday(struct timeval *tv, struct timezone *tz)
}
/*
* uid_t getuid(void);
*/
static __attribute__((unused))
uid_t sys_getuid(void)
{
#ifdef __NR_getuid32
return my_syscall0(__NR_getuid32);
#else
return my_syscall0(__NR_getuid);
#endif
}
static __attribute__((unused))
uid_t getuid(void)
{
return sys_getuid();
}
/*
* int ioctl(int fd, unsigned long req, void *value);
*/