| ... | ... | @@ -2512,11 +2512,12 @@ pub fn readlinkatZ(dirfd: fd_t, file_path: [*:0]const u8, out_buffer: []u8) Read |
| 2512 | 2512 | } |
| 2513 | 2513 | } |
| 2514 | 2514 | |
| 2515 | | pub const SetIdError = error{ |
| 2516 | | ResourceLimitReached, |
| 2515 | pub const SetEidError = error{ |
| 2517 | 2516 | InvalidUserId, |
| 2518 | 2517 | PermissionDenied, |
| 2519 | | } || UnexpectedError; |
| 2518 | }; |
| 2519 | |
| 2520 | pub const SetIdError = error{ResourceLimitReached} || SetEidError || UnexpectedError; |
| 2520 | 2521 | |
| 2521 | 2522 | pub fn setuid(uid: uid_t) SetIdError!void { |
| 2522 | 2523 | switch (errno(system.setuid(uid))) { |
| ... | ... | @@ -2528,6 +2529,15 @@ pub fn setuid(uid: uid_t) SetIdError!void { |
| 2528 | 2529 | } |
| 2529 | 2530 | } |
| 2530 | 2531 | |
| 2532 | pub fn seteuid(uid: uid_t) SetEidError!void { |
| 2533 | switch (errno(system.seteuid(uid))) { |
| 2534 | 0 => return, |
| 2535 | EINVAL => return error.InvalidUserId, |
| 2536 | EPERM => return error.PermissionDenied, |
| 2537 | else => |err| return unexpectedErrno(err), |
| 2538 | } |
| 2539 | } |
| 2540 | |
| 2531 | 2541 | pub fn setreuid(ruid: uid_t, euid: uid_t) SetIdError!void { |
| 2532 | 2542 | switch (errno(system.setreuid(ruid, euid))) { |
| 2533 | 2543 | 0 => return, |
| ... | ... | @@ -2548,6 +2558,15 @@ pub fn setgid(gid: gid_t) SetIdError!void { |
| 2548 | 2558 | } |
| 2549 | 2559 | } |
| 2550 | 2560 | |
| 2561 | pub fn setegid(uid: uid_t) SetEidError!void { |
| 2562 | switch (errno(system.setegid(uid))) { |
| 2563 | 0 => return, |
| 2564 | EINVAL => return error.InvalidUserId, |
| 2565 | EPERM => return error.PermissionDenied, |
| 2566 | else => |err| return unexpectedErrno(err), |
| 2567 | } |
| 2568 | } |
| 2569 | |
| 2551 | 2570 | pub fn setregid(rgid: gid_t, egid: gid_t) SetIdError!void { |
| 2552 | 2571 | switch (errno(system.setregid(rgid, egid))) { |
| 2553 | 2572 | 0 => return, |