passwd fields now have sentinels
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user