Kernel: Add SYS_GET_{,E}{UID,GID}
This commit is contained in:
parent
3fe67e4882
commit
11b68f6a53
|
@ -65,6 +65,11 @@ namespace Kernel
|
||||||
BAN::ErrorOr<void> set_reuid(uid_t, uid_t);
|
BAN::ErrorOr<void> set_reuid(uid_t, uid_t);
|
||||||
BAN::ErrorOr<void> set_regid(gid_t, gid_t);
|
BAN::ErrorOr<void> set_regid(gid_t, gid_t);
|
||||||
|
|
||||||
|
uid_t get_uid() const { return m_credentials.ruid(); }
|
||||||
|
gid_t get_gid() const { return m_credentials.rgid(); }
|
||||||
|
uid_t get_euid() const { return m_credentials.euid(); }
|
||||||
|
gid_t get_egid() const { return m_credentials.egid(); }
|
||||||
|
|
||||||
BAN::ErrorOr<int> open(BAN::StringView, int);
|
BAN::ErrorOr<int> open(BAN::StringView, int);
|
||||||
BAN::ErrorOr<int> openat(int, BAN::StringView, int);
|
BAN::ErrorOr<int> openat(int, BAN::StringView, int);
|
||||||
BAN::ErrorOr<void> close(int fd);
|
BAN::ErrorOr<void> close(int fd);
|
||||||
|
|
|
@ -208,6 +208,26 @@ namespace Kernel
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long sys_get_uid()
|
||||||
|
{
|
||||||
|
return Process::current().get_uid();
|
||||||
|
}
|
||||||
|
|
||||||
|
long sys_get_gid()
|
||||||
|
{
|
||||||
|
return Process::current().get_gid();
|
||||||
|
}
|
||||||
|
|
||||||
|
long sys_get_euid()
|
||||||
|
{
|
||||||
|
return Process::current().get_euid();
|
||||||
|
}
|
||||||
|
|
||||||
|
long sys_get_egid()
|
||||||
|
{
|
||||||
|
return Process::current().get_egid();
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" long sys_fork_trampoline();
|
extern "C" long sys_fork_trampoline();
|
||||||
|
|
||||||
extern "C" long cpp_syscall_handler(int syscall, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3, uintptr_t arg4, uintptr_t arg5)
|
extern "C" long cpp_syscall_handler(int syscall, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3, uintptr_t arg4, uintptr_t arg5)
|
||||||
|
@ -303,6 +323,18 @@ namespace Kernel
|
||||||
case SYS_SET_REGID:
|
case SYS_SET_REGID:
|
||||||
ret = sys_set_regid((gid_t)arg1, (gid_t)arg2);
|
ret = sys_set_regid((gid_t)arg1, (gid_t)arg2);
|
||||||
break;
|
break;
|
||||||
|
case SYS_GET_UID:
|
||||||
|
ret = sys_get_uid();
|
||||||
|
break;
|
||||||
|
case SYS_GET_GID:
|
||||||
|
ret = sys_get_gid();
|
||||||
|
break;
|
||||||
|
case SYS_GET_EUID:
|
||||||
|
ret = sys_get_euid();
|
||||||
|
break;
|
||||||
|
case SYS_GET_EGID:
|
||||||
|
ret = sys_get_egid();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
dwarnln("Unknown syscall {}", syscall);
|
dwarnln("Unknown syscall {}", syscall);
|
||||||
ret = -ENOSYS;
|
ret = -ENOSYS;
|
||||||
|
|
|
@ -32,6 +32,10 @@ __BEGIN_DECLS
|
||||||
#define SYS_SET_EGID 25
|
#define SYS_SET_EGID 25
|
||||||
#define SYS_SET_REUID 26
|
#define SYS_SET_REUID 26
|
||||||
#define SYS_SET_REGID 27
|
#define SYS_SET_REGID 27
|
||||||
|
#define SYS_GET_UID 28
|
||||||
|
#define SYS_GET_GID 29
|
||||||
|
#define SYS_GET_EUID 30
|
||||||
|
#define SYS_GET_EGID 31
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -213,6 +213,26 @@ long syscall(long syscall, ...)
|
||||||
ret = Kernel::syscall(SYS_SET_REGID, rgid, egid);
|
ret = Kernel::syscall(SYS_SET_REGID, rgid, egid);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case SYS_GET_UID:
|
||||||
|
{
|
||||||
|
ret = Kernel::syscall(SYS_GET_UID);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SYS_GET_GID:
|
||||||
|
{
|
||||||
|
ret = Kernel::syscall(SYS_GET_GID);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SYS_GET_EUID:
|
||||||
|
{
|
||||||
|
ret = Kernel::syscall(SYS_GET_EUID);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SYS_GET_EGID:
|
||||||
|
{
|
||||||
|
ret = Kernel::syscall(SYS_GET_EGID);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
puts("LibC: Unhandeled syscall");
|
puts("LibC: Unhandeled syscall");
|
||||||
ret = -ENOSYS;
|
ret = -ENOSYS;
|
||||||
|
@ -322,6 +342,26 @@ unsigned int sleep(unsigned int seconds)
|
||||||
return syscall(SYS_SLEEP, seconds);
|
return syscall(SYS_SLEEP, seconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uid_t getuid(void)
|
||||||
|
{
|
||||||
|
return syscall(SYS_GET_UID);
|
||||||
|
}
|
||||||
|
|
||||||
|
gid_t getgid(void)
|
||||||
|
{
|
||||||
|
return syscall(SYS_GET_GID);
|
||||||
|
}
|
||||||
|
|
||||||
|
uid_t geteuid(void)
|
||||||
|
{
|
||||||
|
return syscall(SYS_GET_EUID);
|
||||||
|
}
|
||||||
|
|
||||||
|
gid_t getegid(void)
|
||||||
|
{
|
||||||
|
return syscall(SYS_GET_EGID);
|
||||||
|
}
|
||||||
|
|
||||||
int seteuid(uid_t uid)
|
int seteuid(uid_t uid)
|
||||||
{
|
{
|
||||||
return syscall(SYS_SET_EUID, uid);
|
return syscall(SYS_SET_EUID, uid);
|
||||||
|
|
Loading…
Reference in New Issue