passwd fields now have sentinels

This commit is contained in:
2022-07-06 16:54:43 +03:00
parent 4a3d43561f
commit a63c60cc6f
4 changed files with 61 additions and 23 deletions

View File

@@ -127,7 +127,7 @@ export fn _nss_turbo_getpwuid_r(
}
export fn _nss_turbo_getpwnam_r(
name: [*:0]u8,
name: [*:0]const u8,
passwd: *CUser,
buffer: [*]u8,
buflen: usize,
@@ -164,17 +164,54 @@ fn get_db(errnop: *c_int) ?DB {
const testing = std.testing;
test "nss_turbo_getpwuid_r" {
var errc = ErrCtx{};
var tf = try File.TestDB.init(testing.allocator, &errc);
test "getpwuid_r and getpwnam_r" {
var tf = try File.TestDB.init(testing.allocator);
defer tf.deinit();
const turbonss_db_path_old = turbonss_db_path;
turbonss_db_path = tf.path;
defer {
turbonss_db_path = turbonss_db_path_old;
}
var passwd: CUser = undefined;
var buffer: [1024]u8 = undefined;
var errno: c_int = 0;
const status = _nss_turbo_getpwuid_r(0, &passwd, &buffer, buffer.len, &errno);
var passwd: CUser = undefined;
try testing.expectEqual(
c.NSS_STATUS_SUCCESS,
_nss_turbo_getpwuid_r(128, &passwd, &buffer, buffer.len, &errno),
);
try testing.expectEqual(@as(c_int, 0), errno);
try testing.expectEqual(c.NSS_STATUS_SUCCESS, status);
try testVidmantas(passwd);
passwd = undefined;
try testing.expectEqual(
c.NSS_STATUS_SUCCESS,
_nss_turbo_getpwnam_r("vidmantas", &passwd, &buffer, buffer.len, &errno),
);
try testing.expectEqual(@as(c_int, 0), errno);
try testVidmantas(passwd);
passwd = undefined;
try testing.expectEqual(
c.NSS_STATUS_NOTFOUND,
_nss_turbo_getpwnam_r("does not exist", &passwd, &buffer, buffer.len, &errno),
);
try testing.expectEqual(@enumToInt(os.E.NOENT), @intCast(u16, errno));
passwd = undefined;
var small_buffer: [1]u8 = undefined;
try testing.expectEqual(
c.NSS_STATUS_TRYAGAIN,
_nss_turbo_getpwuid_r(0, &passwd, &small_buffer, small_buffer.len, &errno),
);
try testing.expectEqual(@enumToInt(os.E.RANGE), @intCast(u16, errno));
}
fn testVidmantas(u: CUser) !void {
try testing.expectEqualStrings("vidmantas", mem.sliceTo(u.pw_name, 0));
try testing.expectEqual(@as(u32, 128), u.pw_uid);
try testing.expectEqual(@as(u32, 128), u.pw_gid);
try testing.expectEqualStrings("Vidmantas Kaminskas", mem.sliceTo(u.pw_gecos, 0));
try testing.expectEqualStrings("/bin/bash", mem.sliceTo(u.pw_shell, 0));
}