make getgr* work
This commit is contained in:
parent
8db43a537b
commit
c883dcd52c
28
src/DB.zig
28
src/DB.zig
@ -295,9 +295,9 @@ pub fn packCGroupNoMembers(group: *const PackedGroup, buf: []u8) error{BufferToo
|
||||
buf[name_start + name.len] = 0;
|
||||
|
||||
return CGroup{
|
||||
.gid = group.gid(),
|
||||
.name = buf[name_start .. name_start + name.len :0].ptr,
|
||||
.members = member_ptrs.ptr,
|
||||
.gr_name = buf[name_start .. name_start + name.len :0].ptr,
|
||||
.gr_gid = group.gid(),
|
||||
.gr_mem = member_ptrs.ptr,
|
||||
};
|
||||
}
|
||||
|
||||
@ -364,9 +364,9 @@ pub fn packCGroup(self: *const DB, group: *const PackedGroup, buf: []u8) error{B
|
||||
buf[buf_offset + name.len] = 0;
|
||||
|
||||
return CGroup{
|
||||
.gid = group.gid(),
|
||||
.name = buf[buf_offset .. buf_offset + name.len :0].ptr,
|
||||
.members = member_ptrs.ptr,
|
||||
.gr_name = buf[buf_offset .. buf_offset + name.len :0].ptr,
|
||||
.gr_gid = group.gid(),
|
||||
.gr_mem = member_ptrs.ptr,
|
||||
};
|
||||
}
|
||||
|
||||
@ -799,9 +799,9 @@ test "DB getgrnam/getgrgid" {
|
||||
{
|
||||
try testing.expectEqual(try db.getgrnam("doesnotexist", buf, false), null);
|
||||
const all = (try db.getgrnam("all", buf, false)).?;
|
||||
try testing.expectEqual(all.gid, 9999);
|
||||
try testing.expectEqualStrings(all.name[0..4], "all\x00");
|
||||
const members = all.members;
|
||||
try testing.expectEqual(all.gr_gid, 9999);
|
||||
try testing.expectEqualStrings(all.gr_name[0..4], "all\x00");
|
||||
const members = all.gr_mem;
|
||||
try testing.expectEqualStrings(mem.sliceTo(members[0].?, 0), "Name" ** 8);
|
||||
try testing.expectEqualStrings(mem.sliceTo(members[1].?, 0), "root");
|
||||
try testing.expectEqualStrings(mem.sliceTo(members[2].?, 0), "svc-bar");
|
||||
@ -811,16 +811,16 @@ test "DB getgrnam/getgrgid" {
|
||||
|
||||
{
|
||||
const all = (try db.getgrnam("all", buf, true)).?;
|
||||
try testing.expectEqual(all.gid, 9999);
|
||||
try testing.expectEqualStrings(all.name[0..4], "all\x00");
|
||||
try testing.expectEqual(all.members[0], null);
|
||||
try testing.expectEqual(all.gr_gid, 9999);
|
||||
try testing.expectEqualStrings(all.gr_name[0..4], "all\x00");
|
||||
try testing.expectEqual(all.gr_mem[0], null);
|
||||
}
|
||||
|
||||
{
|
||||
try testing.expectEqual(try db.getgrgid(42, buf, false), null);
|
||||
const all = (try db.getgrgid(9999, buf, false)).?;
|
||||
try testing.expectEqual(all.gid, 9999);
|
||||
try testing.expectEqualStrings(all.name[0..3], "all");
|
||||
try testing.expectEqual(all.gr_gid, 9999);
|
||||
try testing.expectEqualStrings(all.gr_name[0..3], "all");
|
||||
}
|
||||
try testing.expectEqualStrings("", errc.unwrap().constSlice());
|
||||
|
||||
|
@ -126,15 +126,16 @@ pub fn strlenZ(self: *const Group) usize {
|
||||
}
|
||||
|
||||
pub const CGroup = extern struct {
|
||||
gid: u32,
|
||||
name: [*:0]const u8,
|
||||
gr_name: [*:0]const u8,
|
||||
gr_passwd: [*:0]const u8 = "x",
|
||||
gr_gid: u32,
|
||||
// Should be [*:null]align(1) const ?[*:0]const u8
|
||||
// https://github.com/ziglang/zig/issues/7517
|
||||
members: [*]align(1) const ?[*:0]const u8,
|
||||
gr_mem: [*]align(1) const ?[*:0]const u8,
|
||||
};
|
||||
|
||||
// size of the pointer to a single member.
|
||||
pub const ptr_size = @sizeOf(meta.Child(meta.fieldInfo(CGroup, .members).field_type));
|
||||
pub const ptr_size = @sizeOf(meta.Child(meta.fieldInfo(CGroup, .gr_mem).field_type));
|
||||
|
||||
const testing = std.testing;
|
||||
|
||||
|
@ -94,7 +94,7 @@ fn init() void {
|
||||
//if (verbose)
|
||||
// std.debug.print("opening '{s}'\n", .{fname});
|
||||
const fname = turbonss_db_path;
|
||||
const verbose = true;
|
||||
const verbose = false;
|
||||
const omit_members = true;
|
||||
|
||||
const file = File.open(fname) catch |err| {
|
||||
@ -617,9 +617,9 @@ test "libnss getgrgid_r and getgrnam_r" {
|
||||
}
|
||||
|
||||
fn testSvcGroup(g: CGroup) !void {
|
||||
try testing.expectEqual(@as(u32, 100000), g.gid);
|
||||
try testing.expectEqualStrings("service-group", mem.sliceTo(g.name, 0));
|
||||
const members = g.members;
|
||||
try testing.expectEqual(@as(u32, 100000), g.gr_gid);
|
||||
try testing.expectEqualStrings("service-group", mem.sliceTo(g.gr_name, 0));
|
||||
const members = g.gr_mem;
|
||||
try testing.expect(members[0] != null);
|
||||
try testing.expect(members[1] != null);
|
||||
try testing.expectEqualStrings("root", mem.sliceTo(members[0].?, 0));
|
||||
|
Loading…
Reference in New Issue
Block a user