getpwuid
This commit is contained in:
parent
7d4623411f
commit
bc7a7a0350
42
lib/DB.zig
42
lib/DB.zig
@ -343,6 +343,16 @@ fn getpwnam(self: *const DB, name: []const u8, buf: *[]u8) error{OutOfMemory}!?C
|
|||||||
return try self.getUser(user, buf);
|
return try self.getUser(user, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get a CUser entry by uid.
|
||||||
|
fn getpwuid(self: *const DB, uid: u32, buf: *[]u8) error{OutOfMemory}!?CUser {
|
||||||
|
const idx = bdz.search_u32(self.bdz_uid, uid);
|
||||||
|
const offset = self.idx_uid2user[idx];
|
||||||
|
const nbits = PackedUser.alignment_bits;
|
||||||
|
const user = PackedUser.fromBytes(self.users[offset << nbits ..]).user;
|
||||||
|
if (uid != user.uid()) return null;
|
||||||
|
return try self.getUser(user, buf);
|
||||||
|
}
|
||||||
|
|
||||||
fn shellSections(
|
fn shellSections(
|
||||||
allocator: Allocator,
|
allocator: Allocator,
|
||||||
corpus: *const Corpus,
|
corpus: *const Corpus,
|
||||||
@ -633,8 +643,7 @@ test "getgrnam/getgrgid" {
|
|||||||
defer testing.allocator.free(buf);
|
defer testing.allocator.free(buf);
|
||||||
|
|
||||||
{
|
{
|
||||||
const doesnotexist = try db.getgrnam("doesnotexist", &buf);
|
try testing.expectEqual(try db.getgrnam("doesnotexist", &buf), null);
|
||||||
try testing.expectEqual(doesnotexist, null);
|
|
||||||
const all = (try db.getgrnam("all", &buf)).?;
|
const all = (try db.getgrnam("all", &buf)).?;
|
||||||
try testing.expectEqual(all.gid, 9999);
|
try testing.expectEqual(all.gid, 9999);
|
||||||
try testing.expectEqualStrings(all.name[0..3], "all");
|
try testing.expectEqualStrings(all.name[0..3], "all");
|
||||||
@ -648,8 +657,7 @@ test "getgrnam/getgrgid" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const doesnotexist = try db.getgrgid(42, &buf);
|
try testing.expectEqual(try db.getgrgid(42, &buf), null);
|
||||||
try testing.expectEqual(doesnotexist, null);
|
|
||||||
const all = (try db.getgrgid(9999, &buf)).?;
|
const all = (try db.getgrgid(9999, &buf)).?;
|
||||||
try testing.expectEqual(all.gid, 9999);
|
try testing.expectEqual(all.gid, 9999);
|
||||||
try testing.expectEqualStrings(all.name[0..3], "all");
|
try testing.expectEqualStrings(all.name[0..3], "all");
|
||||||
@ -661,18 +669,34 @@ test "getgrnam/getgrgid" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
test "getpwnam/getpwuid" {
|
test "getpwnam/getpwuid" {
|
||||||
var arena = ArenaAllocator.init(testing.allocator);
|
var corpus = try Corpus.testCorpus(testing.allocator);
|
||||||
defer arena.deinit();
|
defer corpus.deinit();
|
||||||
var corpus = try Corpus.testCorpus(arena.allocator());
|
var db = try DB.fromCorpus(testing.allocator, &corpus);
|
||||||
var db = try DB.fromCorpus(arena.allocator(), &corpus);
|
defer db.deinit(testing.allocator);
|
||||||
var buf = try arena.allocator().alloc(u8, db.header.getpw_bufsize);
|
var buf = try testing.allocator.alloc(u8, db.header.getpw_bufsize);
|
||||||
|
defer testing.allocator.free(buf);
|
||||||
|
|
||||||
|
{
|
||||||
|
try testing.expectEqual(try db.getpwnam("doesnotexist", &buf), null);
|
||||||
const vidmantas = (try db.getpwnam("vidmantas", &buf)).?;
|
const vidmantas = (try db.getpwnam("vidmantas", &buf)).?;
|
||||||
try testing.expectEqual(vidmantas.pw_uid, 128);
|
try testing.expectEqual(vidmantas.pw_uid, 128);
|
||||||
try testing.expectEqual(vidmantas.pw_gid, 128);
|
try testing.expectEqual(vidmantas.pw_gid, 128);
|
||||||
try testing.expectEqualStrings(vidmantas.pw_name[0..9], "vidmantas");
|
try testing.expectEqualStrings(vidmantas.pw_name[0..9], "vidmantas");
|
||||||
try testing.expectEqualStrings(vidmantas.pw_gecos[0..19], "Vidmantas Kaminskas");
|
try testing.expectEqualStrings(vidmantas.pw_gecos[0..19], "Vidmantas Kaminskas");
|
||||||
try testing.expectEqualStrings(vidmantas.pw_dir[0..15], "/home/vidmantas");
|
try testing.expectEqualStrings(vidmantas.pw_dir[0..15], "/home/vidmantas");
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
try testing.expectEqual(try db.getpwuid(123456, &buf), null);
|
||||||
|
const vidmantas = (try db.getpwuid(128, &buf)).?;
|
||||||
|
try testing.expectEqual(vidmantas.pw_uid, 128);
|
||||||
|
try testing.expectEqual(vidmantas.pw_gid, 128);
|
||||||
|
try testing.expectEqualStrings(vidmantas.pw_name[0..9], "vidmantas");
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = try db.getpwnam("Name" ** 8, &buf);
|
||||||
|
buf.len -= 1;
|
||||||
|
try testing.expectError(error.OutOfMemory, db.getpwnam("Name" ** 8, &buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
test "additionalGids" {
|
test "additionalGids" {
|
||||||
|
Loading…
Reference in New Issue
Block a user