getuid.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <Kernel/Process.h>
  7. namespace Kernel {
  8. KResultOr<FlatPtr> Process::sys$getuid()
  9. {
  10. REQUIRE_PROMISE(stdio);
  11. return uid();
  12. }
  13. KResultOr<FlatPtr> Process::sys$getgid()
  14. {
  15. REQUIRE_PROMISE(stdio);
  16. return gid();
  17. }
  18. KResultOr<FlatPtr> Process::sys$geteuid()
  19. {
  20. REQUIRE_PROMISE(stdio);
  21. return euid();
  22. }
  23. KResultOr<FlatPtr> Process::sys$getegid()
  24. {
  25. REQUIRE_PROMISE(stdio);
  26. return egid();
  27. }
  28. KResultOr<FlatPtr> Process::sys$getresuid(Userspace<uid_t*> ruid, Userspace<uid_t*> euid, Userspace<uid_t*> suid)
  29. {
  30. REQUIRE_PROMISE(stdio);
  31. if (!copy_to_user(ruid, &m_uid) || !copy_to_user(euid, &m_euid) || !copy_to_user(suid, &m_suid))
  32. return EFAULT;
  33. return 0;
  34. }
  35. KResultOr<FlatPtr> Process::sys$getresgid(Userspace<gid_t*> rgid, Userspace<gid_t*> egid, Userspace<gid_t*> sgid)
  36. {
  37. REQUIRE_PROMISE(stdio);
  38. if (!copy_to_user(rgid, &m_gid) || !copy_to_user(egid, &m_egid) || !copy_to_user(sgid, &m_sgid))
  39. return EFAULT;
  40. return 0;
  41. }
  42. KResultOr<FlatPtr> Process::sys$getgroups(size_t count, Userspace<gid_t*> user_gids)
  43. {
  44. REQUIRE_PROMISE(stdio);
  45. if (!count)
  46. return extra_gids().size();
  47. if (count != extra_gids().size())
  48. return EINVAL;
  49. if (!copy_to_user(user_gids, extra_gids().data(), sizeof(gid_t) * count))
  50. return EFAULT;
  51. return 0;
  52. }
  53. }