| author | |
| committer | |
| log | e8a2aecd2f3ed13d7b9fb74248d455752de19840 |
| tree | 51174f1e23ebdb9bd52eeb452f465e5f273a3c6d |
| parent | 26140678a5c72604f2baac3cb9d1e5f7b37b6b8d |
| signature | Commit is signed but in an unrecognized format. |
- correct uid_t from i32 to u32 on linux
- define uid_t and gid_t for OSes missing definitions
- use uid_t/gid_t instead of plain u32s throughout std.os9 files changed, 65 insertions(+), 49 deletions(-)
lib/std/child_process.zig+2-2| ... | ... | @@ -44,10 +44,10 @@ pub const ChildProcess = struct { |
| 44 | 44 | stderr_behavior: StdIo, |
| 45 | 45 | |
| 46 | 46 | /// Set to change the user id when spawning the child process. |
| 47 | uid: if (builtin.os.tag == .windows) void else ?u32, | |
| 47 | uid: if (builtin.os.tag == .windows or builtin.os.tag == .wasi) void else ?os.uid_t, | |
| 48 | 48 | |
| 49 | 49 | /// Set to change the group id when spawning the child process. |
| 50 | gid: if (builtin.os.tag == .windows) void else ?u32, | |
| 50 | gid: if (builtin.os.tag == .windows or builtin.os.tag == .wasi) void else ?os.gid_t, | |
| 51 | 51 | |
| 52 | 52 | /// Set to change the current working directory when spawning the child process. |
| 53 | 53 | cwd: ?[]const u8, |
lib/std/os.zig+4-4| ... | ... | @@ -2518,7 +2518,7 @@ pub const SetIdError = error{ |
| 2518 | 2518 | PermissionDenied, |
| 2519 | 2519 | } || UnexpectedError; |
| 2520 | 2520 | |
| 2521 | pub fn setuid(uid: u32) SetIdError!void { | |
| 2521 | pub fn setuid(uid: uid_t) SetIdError!void { | |
| 2522 | 2522 | switch (errno(system.setuid(uid))) { |
| 2523 | 2523 | 0 => return, |
| 2524 | 2524 | EAGAIN => return error.ResourceLimitReached, |
| ... | ... | @@ -2528,7 +2528,7 @@ pub fn setuid(uid: u32) SetIdError!void { |
| 2528 | 2528 | } |
| 2529 | 2529 | } |
| 2530 | 2530 | |
| 2531 | pub fn setreuid(ruid: u32, euid: u32) SetIdError!void { | |
| 2531 | pub fn setreuid(ruid: uid_t, euid: uid_t) SetIdError!void { | |
| 2532 | 2532 | switch (errno(system.setreuid(ruid, euid))) { |
| 2533 | 2533 | 0 => return, |
| 2534 | 2534 | EAGAIN => return error.ResourceLimitReached, |
| ... | ... | @@ -2538,7 +2538,7 @@ pub fn setreuid(ruid: u32, euid: u32) SetIdError!void { |
| 2538 | 2538 | } |
| 2539 | 2539 | } |
| 2540 | 2540 | |
| 2541 | pub fn setgid(gid: u32) SetIdError!void { | |
| 2541 | pub fn setgid(gid: gid_t) SetIdError!void { | |
| 2542 | 2542 | switch (errno(system.setgid(gid))) { |
| 2543 | 2543 | 0 => return, |
| 2544 | 2544 | EAGAIN => return error.ResourceLimitReached, |
| ... | ... | @@ -2548,7 +2548,7 @@ pub fn setgid(gid: u32) SetIdError!void { |
| 2548 | 2548 | } |
| 2549 | 2549 | } |
| 2550 | 2550 | |
| 2551 | pub fn setregid(rgid: u32, egid: u32) SetIdError!void { | |
| 2551 | pub fn setregid(rgid: gid_t, egid: gid_t) SetIdError!void { | |
| 2552 | 2552 | switch (errno(system.setregid(rgid, egid))) { |
| 2553 | 2553 | 0 => return, |
| 2554 | 2554 | EAGAIN => return error.ResourceLimitReached, |
lib/std/os/bits/darwin.zig+6-2| ... | ... | @@ -7,9 +7,13 @@ const std = @import("../../std.zig"); |
| 7 | 7 | const assert = std.debug.assert; |
| 8 | 8 | const maxInt = std.math.maxInt; |
| 9 | 9 | |
| 10 | // See: https://opensource.apple.com/source/xnu/xnu-6153.141.1/bsd/sys/_types.h.auto.html | |
| 11 | // TODO: audit mode_t/pid_t, should likely be u16/i32 | |
| 10 | 12 | pub const fd_t = c_int; |
| 11 | 13 | pub const pid_t = c_int; |
| 12 | 14 | pub const mode_t = c_uint; |
| 15 | pub const uid_t = u32; | |
| 16 | pub const gid_t = u32; | |
| 13 | 17 | |
| 14 | 18 | pub const in_port_t = u16; |
| 15 | 19 | pub const sa_family_t = u8; |
| ... | ... | @@ -79,8 +83,8 @@ pub const Stat = extern struct { |
| 79 | 83 | mode: u16, |
| 80 | 84 | nlink: u16, |
| 81 | 85 | ino: ino_t, |
| 82 | uid: u32, | |
| 83 | gid: u32, | |
| 86 | uid: uid_t, | |
| 87 | gid: gid_t, | |
| 84 | 88 | rdev: i32, |
| 85 | 89 | atimesec: isize, |
| 86 | 90 | atimensec: isize, |
lib/std/os/bits/dragonfly.zig+10-3| ... | ... | @@ -9,10 +9,17 @@ const maxInt = std.math.maxInt; |
| 9 | 9 | pub fn S_ISCHR(m: u32) bool { |
| 10 | 10 | return m & S_IFMT == S_IFCHR; |
| 11 | 11 | } |
| 12 | ||
| 13 | // See: | |
| 14 | // - https://gitweb.dragonflybsd.org/dragonfly.git/blob/HEAD:/include/unistd.h | |
| 15 | // - https://gitweb.dragonflybsd.org/dragonfly.git/blob/HEAD:/sys/sys/types.h | |
| 16 | // TODO: mode_t should probably be changed to a u16, audit pid_t/off_t as well | |
| 12 | 17 | pub const fd_t = c_int; |
| 13 | 18 | pub const pid_t = c_int; |
| 14 | 19 | pub const off_t = c_long; |
| 15 | 20 | pub const mode_t = c_uint; |
| 21 | pub const uid_t = u32; | |
| 22 | pub const gid_t = u32; | |
| 16 | 23 | |
| 17 | 24 | pub const ENOTSUP = EOPNOTSUPP; |
| 18 | 25 | pub const EWOULDBLOCK = EAGAIN; |
| ... | ... | @@ -151,8 +158,8 @@ pub const Stat = extern struct { |
| 151 | 158 | dev: c_uint, |
| 152 | 159 | mode: c_ushort, |
| 153 | 160 | padding1: u16, |
| 154 | uid: c_uint, | |
| 155 | gid: c_uint, | |
| 161 | uid: uid_t, | |
| 162 | gid: gid_t, | |
| 156 | 163 | rdev: c_uint, |
| 157 | 164 | atim: timespec, |
| 158 | 165 | mtim: timespec, |
| ... | ... | @@ -511,7 +518,7 @@ pub const siginfo_t = extern struct { |
| 511 | 518 | si_errno: c_int, |
| 512 | 519 | si_code: c_int, |
| 513 | 520 | si_pid: c_int, |
| 514 | si_uid: c_uint, | |
| 521 | si_uid: uid_t, | |
| 515 | 522 | si_status: c_int, |
| 516 | 523 | si_addr: ?*c_void, |
| 517 | 524 | si_value: union_sigval, |
lib/std/os/bits/freebsd.zig+6-2| ... | ... | @@ -6,8 +6,12 @@ |
| 6 | 6 | const std = @import("../../std.zig"); |
| 7 | 7 | const maxInt = std.math.maxInt; |
| 8 | 8 | |
| 9 | // See https://svnweb.freebsd.org/base/head/sys/sys/_types.h?view=co | |
| 10 | // TODO: audit pid_t/mode_t. They should likely be i32 and u16, respectively | |
| 9 | 11 | pub const fd_t = c_int; |
| 10 | 12 | pub const pid_t = c_int; |
| 13 | pub const uid_t = u32; | |
| 14 | pub const gid_t = u32; | |
| 11 | 15 | pub const mode_t = c_uint; |
| 12 | 16 | |
| 13 | 17 | pub const socklen_t = u32; |
| ... | ... | @@ -128,8 +132,8 @@ pub const Stat = extern struct { |
| 128 | 132 | |
| 129 | 133 | mode: u16, |
| 130 | 134 | __pad0: u16, |
| 131 | uid: u32, | |
| 132 | gid: u32, | |
| 135 | uid: uid_t, | |
| 136 | gid: gid_t, | |
| 133 | 137 | __pad1: u32, |
| 134 | 138 | rdev: u64, |
| 135 | 139 |
lib/std/os/bits/linux.zig+4-4| ... | ... | @@ -29,7 +29,7 @@ const is_mips = builtin.arch.isMIPS(); |
| 29 | 29 | |
| 30 | 30 | pub const pid_t = i32; |
| 31 | 31 | pub const fd_t = i32; |
| 32 | pub const uid_t = i32; | |
| 32 | pub const uid_t = u32; | |
| 33 | 33 | pub const gid_t = u32; |
| 34 | 34 | pub const clock_t = isize; |
| 35 | 35 | |
| ... | ... | @@ -853,7 +853,7 @@ pub const signalfd_siginfo = extern struct { |
| 853 | 853 | errno: i32, |
| 854 | 854 | code: i32, |
| 855 | 855 | pid: u32, |
| 856 | uid: u32, | |
| 856 | uid: uid_t, | |
| 857 | 857 | fd: i32, |
| 858 | 858 | tid: u32, |
| 859 | 859 | band: u32, |
| ... | ... | @@ -1491,10 +1491,10 @@ pub const Statx = extern struct { |
| 1491 | 1491 | nlink: u32, |
| 1492 | 1492 | |
| 1493 | 1493 | /// User ID of owner |
| 1494 | uid: u32, | |
| 1494 | uid: uid_t, | |
| 1495 | 1495 | |
| 1496 | 1496 | /// Group ID of owner |
| 1497 | gid: u32, | |
| 1497 | gid: gid_t, | |
| 1498 | 1498 | |
| 1499 | 1499 | /// File type and mode |
| 1500 | 1500 | mode: u16, |
lib/std/os/bits/linux/x86_64.zig+3-2| ... | ... | @@ -7,6 +7,7 @@ |
| 7 | 7 | const std = @import("../../../std.zig"); |
| 8 | 8 | const pid_t = linux.pid_t; |
| 9 | 9 | const uid_t = linux.uid_t; |
| 10 | const gid_t = linux.gid_t; | |
| 10 | 11 | const clock_t = linux.clock_t; |
| 11 | 12 | const stack_t = linux.stack_t; |
| 12 | 13 | const sigset_t = linux.sigset_t; |
| ... | ... | @@ -523,8 +524,8 @@ pub const Stat = extern struct { |
| 523 | 524 | nlink: usize, |
| 524 | 525 | |
| 525 | 526 | mode: u32, |
| 526 | uid: u32, | |
| 527 | gid: u32, | |
| 527 | uid: uid_t, | |
| 528 | gid: gid_t, | |
| 528 | 529 | __pad0: u32, |
| 529 | 530 | rdev: u64, |
| 530 | 531 | size: off_t, |
lib/std/os/linux.zig+26-26| ... | ... | @@ -655,7 +655,7 @@ pub fn nanosleep(req: *const timespec, rem: ?*timespec) usize { |
| 655 | 655 | return syscall2(.nanosleep, @ptrToInt(req), @ptrToInt(rem)); |
| 656 | 656 | } |
| 657 | 657 | |
| 658 | pub fn setuid(uid: u32) usize { | |
| 658 | pub fn setuid(uid: uid_t) usize { | |
| 659 | 659 | if (@hasField(SYS, "setuid32")) { |
| 660 | 660 | return syscall1(.setuid32, uid); |
| 661 | 661 | } else { |
| ... | ... | @@ -663,7 +663,7 @@ pub fn setuid(uid: u32) usize { |
| 663 | 663 | } |
| 664 | 664 | } |
| 665 | 665 | |
| 666 | pub fn setgid(gid: u32) usize { | |
| 666 | pub fn setgid(gid: gid_t) usize { | |
| 667 | 667 | if (@hasField(SYS, "setgid32")) { |
| 668 | 668 | return syscall1(.setgid32, gid); |
| 669 | 669 | } else { |
| ... | ... | @@ -671,7 +671,7 @@ pub fn setgid(gid: u32) usize { |
| 671 | 671 | } |
| 672 | 672 | } |
| 673 | 673 | |
| 674 | pub fn setreuid(ruid: u32, euid: u32) usize { | |
| 674 | pub fn setreuid(ruid: uid_t, euid: uid_t) usize { | |
| 675 | 675 | if (@hasField(SYS, "setreuid32")) { |
| 676 | 676 | return syscall2(.setreuid32, ruid, euid); |
| 677 | 677 | } else { |
| ... | ... | @@ -679,7 +679,7 @@ pub fn setreuid(ruid: u32, euid: u32) usize { |
| 679 | 679 | } |
| 680 | 680 | } |
| 681 | 681 | |
| 682 | pub fn setregid(rgid: u32, egid: u32) usize { | |
| 682 | pub fn setregid(rgid: gid_t, egid: gid_t) usize { | |
| 683 | 683 | if (@hasField(SYS, "setregid32")) { |
| 684 | 684 | return syscall2(.setregid32, rgid, egid); |
| 685 | 685 | } else { |
| ... | ... | @@ -687,47 +687,47 @@ pub fn setregid(rgid: u32, egid: u32) usize { |
| 687 | 687 | } |
| 688 | 688 | } |
| 689 | 689 | |
| 690 | pub fn getuid() u32 { | |
| 690 | pub fn getuid() uid_t { | |
| 691 | 691 | if (@hasField(SYS, "getuid32")) { |
| 692 | return @as(u32, syscall0(.getuid32)); | |
| 692 | return @as(uid_t, syscall0(.getuid32)); | |
| 693 | 693 | } else { |
| 694 | return @as(u32, syscall0(.getuid)); | |
| 694 | return @as(uid_t, syscall0(.getuid)); | |
| 695 | 695 | } |
| 696 | 696 | } |
| 697 | 697 | |
| 698 | pub fn getgid() u32 { | |
| 698 | pub fn getgid() gid_t { | |
| 699 | 699 | if (@hasField(SYS, "getgid32")) { |
| 700 | return @as(u32, syscall0(.getgid32)); | |
| 700 | return @as(gid_t, syscall0(.getgid32)); | |
| 701 | 701 | } else { |
| 702 | return @as(u32, syscall0(.getgid)); | |
| 702 | return @as(gid_t, syscall0(.getgid)); | |
| 703 | 703 | } |
| 704 | 704 | } |
| 705 | 705 | |
| 706 | pub fn geteuid() u32 { | |
| 706 | pub fn geteuid() uid_t { | |
| 707 | 707 | if (@hasField(SYS, "geteuid32")) { |
| 708 | return @as(u32, syscall0(.geteuid32)); | |
| 708 | return @as(uid_t, syscall0(.geteuid32)); | |
| 709 | 709 | } else { |
| 710 | return @as(u32, syscall0(.geteuid)); | |
| 710 | return @as(uid_t, syscall0(.geteuid)); | |
| 711 | 711 | } |
| 712 | 712 | } |
| 713 | 713 | |
| 714 | pub fn getegid() u32 { | |
| 714 | pub fn getegid() gid_t { | |
| 715 | 715 | if (@hasField(SYS, "getegid32")) { |
| 716 | return @as(u32, syscall0(.getegid32)); | |
| 716 | return @as(gid_t, syscall0(.getegid32)); | |
| 717 | 717 | } else { |
| 718 | return @as(u32, syscall0(.getegid)); | |
| 718 | return @as(gid_t, syscall0(.getegid)); | |
| 719 | 719 | } |
| 720 | 720 | } |
| 721 | 721 | |
| 722 | pub fn seteuid(euid: u32) usize { | |
| 723 | return setreuid(std.math.maxInt(u32), euid); | |
| 722 | pub fn seteuid(euid: uid_t) usize { | |
| 723 | return setresuid(std.math.maxInt(uid_t), euid); | |
| 724 | 724 | } |
| 725 | 725 | |
| 726 | pub fn setegid(egid: u32) usize { | |
| 727 | return setregid(std.math.maxInt(u32), egid); | |
| 726 | pub fn setegid(egid: gid_t) usize { | |
| 727 | return setregid(std.math.maxInt(gid_t), egid); | |
| 728 | 728 | } |
| 729 | 729 | |
| 730 | pub fn getresuid(ruid: *u32, euid: *u32, suid: *u32) usize { | |
| 730 | pub fn getresuid(ruid: *uid_t, euid: *uid_t, suid: *uid_t) usize { | |
| 731 | 731 | if (@hasField(SYS, "getresuid32")) { |
| 732 | 732 | return syscall3(.getresuid32, @ptrToInt(ruid), @ptrToInt(euid), @ptrToInt(suid)); |
| 733 | 733 | } else { |
| ... | ... | @@ -735,7 +735,7 @@ pub fn getresuid(ruid: *u32, euid: *u32, suid: *u32) usize { |
| 735 | 735 | } |
| 736 | 736 | } |
| 737 | 737 | |
| 738 | pub fn getresgid(rgid: *u32, egid: *u32, sgid: *u32) usize { | |
| 738 | pub fn getresgid(rgid: *gid_t, egid: *gid_t, sgid: *gid_t) usize { | |
| 739 | 739 | if (@hasField(SYS, "getresgid32")) { |
| 740 | 740 | return syscall3(.getresgid32, @ptrToInt(rgid), @ptrToInt(egid), @ptrToInt(sgid)); |
| 741 | 741 | } else { |
| ... | ... | @@ -743,7 +743,7 @@ pub fn getresgid(rgid: *u32, egid: *u32, sgid: *u32) usize { |
| 743 | 743 | } |
| 744 | 744 | } |
| 745 | 745 | |
| 746 | pub fn setresuid(ruid: u32, euid: u32, suid: u32) usize { | |
| 746 | pub fn setresuid(ruid: uid_t, euid: uid_t, suid: uid_t) usize { | |
| 747 | 747 | if (@hasField(SYS, "setresuid32")) { |
| 748 | 748 | return syscall3(.setresuid32, ruid, euid, suid); |
| 749 | 749 | } else { |
| ... | ... | @@ -751,7 +751,7 @@ pub fn setresuid(ruid: u32, euid: u32, suid: u32) usize { |
| 751 | 751 | } |
| 752 | 752 | } |
| 753 | 753 | |
| 754 | pub fn setresgid(rgid: u32, egid: u32, sgid: u32) usize { | |
| 754 | pub fn setresgid(rgid: gid_t, egid: gid_t, sgid: gid_t) usize { | |
| 755 | 755 | if (@hasField(SYS, "setresgid32")) { |
| 756 | 756 | return syscall3(.setresgid32, rgid, egid, sgid); |
| 757 | 757 | } else { |
| ... | ... | @@ -759,7 +759,7 @@ pub fn setresgid(rgid: u32, egid: u32, sgid: u32) usize { |
| 759 | 759 | } |
| 760 | 760 | } |
| 761 | 761 | |
| 762 | pub fn getgroups(size: usize, list: *u32) usize { | |
| 762 | pub fn getgroups(size: usize, list: *gid_t) usize { | |
| 763 | 763 | if (@hasField(SYS, "getgroups32")) { |
| 764 | 764 | return syscall2(.getgroups32, size, @ptrToInt(list)); |
| 765 | 765 | } else { |
| ... | ... | @@ -767,7 +767,7 @@ pub fn getgroups(size: usize, list: *u32) usize { |
| 767 | 767 | } |
| 768 | 768 | } |
| 769 | 769 | |
| 770 | pub fn setgroups(size: usize, list: *const u32) usize { | |
| 770 | pub fn setgroups(size: usize, list: *const gid_t) usize { | |
| 771 | 771 | if (@hasField(SYS, "setgroups32")) { |
| 772 | 772 | return syscall2(.setgroups32, size, @ptrToInt(list)); |
| 773 | 773 | } else { |
lib/std/process.zig+4-4| ... | ... | @@ -578,8 +578,8 @@ fn testWindowsCmdLine(input_cmd_line: [*]const u8, expected_args: []const []cons |
| 578 | 578 | } |
| 579 | 579 | |
| 580 | 580 | pub const UserInfo = struct { |
| 581 | uid: u32, | |
| 582 | gid: u32, | |
| 581 | uid: os.uid_t, | |
| 582 | gid: os.gid_t, | |
| 583 | 583 | }; |
| 584 | 584 | |
| 585 | 585 | /// POSIX function which gets a uid from username. |
| ... | ... | @@ -607,8 +607,8 @@ pub fn posixGetUserInfo(name: []const u8) !UserInfo { |
| 607 | 607 | var buf: [std.mem.page_size]u8 = undefined; |
| 608 | 608 | var name_index: usize = 0; |
| 609 | 609 | var state = State.Start; |
| 610 | var uid: u32 = 0; | |
| 611 | var gid: u32 = 0; | |
| 610 | var uid: os.uid_t = 0; | |
| 611 | var gid: os.gid_t = 0; | |
| 612 | 612 | |
| 613 | 613 | while (true) { |
| 614 | 614 | const amt_read = try reader.read(buf[0..]); |