use omit_members sometimes

This commit is contained in:
2022-07-08 08:40:24 +03:00
parent 434f9e1571
commit 5fa4a71ddf
2 changed files with 76 additions and 20 deletions

View File

@@ -160,8 +160,12 @@ export fn _nss_turbo_getgrgid_r(
buflen: usize,
errnop: *c_int,
) c.enum_nss_status {
const db = getDBErrno(errnop) orelse return c.NSS_STATUS_UNAVAIL;
var cgroup = db.getgrgid(gid, buffer[0..buflen]) catch |err| switch (err) {
const state = getStateErrno(errnop) orelse return c.NSS_STATUS_UNAVAIL;
const db = state.file.db;
const omit_members = state.omit_members;
var buf = buffer[0..buflen];
var cgroup = db.getgrgid(gid, buf, omit_members) catch |err| switch (err) {
error.BufferTooSmall => {
errnop.* = @enumToInt(os.E.RANGE);
return c.NSS_STATUS_TRYAGAIN;
@@ -184,10 +188,13 @@ export fn _nss_turbo_getgrnam_r(
buflen: usize,
errnop: *c_int,
) c.enum_nss_status {
const db = getDBErrno(errnop) orelse return c.NSS_STATUS_UNAVAIL;
const state = getStateErrno(errnop) orelse return c.NSS_STATUS_UNAVAIL;
const db = state.file.db;
const omit_members = state.omit_members;
const nameSlice = mem.sliceTo(name, 0);
var buf = buffer[0..buflen];
var cgroup = db.getgrnam(nameSlice, buf) catch |err| switch (err) {
var cgroup = db.getgrnam(nameSlice, buf, omit_members) catch |err| switch (err) {
error.BufferTooSmall => {
errnop.* = @enumToInt(os.E.RANGE);
return c.NSS_STATUS_TRYAGAIN;
@@ -267,16 +274,20 @@ export fn _nss_turbo_getgrent_r(
return c.NSS_STATUS_NOTFOUND;
};
const buf = buffer[0..buflen];
const cgroup = state.file.db.packCGroup(group, buf) catch |err| switch (err) {
const cgroup1 = if (state.omit_members)
DB.packCGroupNoMembers(group, buffer[0..buflen])
else
state.file.db.packCGroup(group, buffer[0..buflen]);
if (cgroup1) |cgroup| {
result.* = cgroup;
return c.NSS_STATUS_SUCCESS;
} else |err| switch (err) {
error.BufferTooSmall => {
errnop.* = @enumToInt(os.E.RANGE);
return c.NSS_STATUS_TRYAGAIN;
},
};
result.* = cgroup;
return c.NSS_STATUS_SUCCESS;
}
}
export fn _nss_turbo_getpwent_r(