libnss: shorter code

This commit is contained in:
2022-07-06 13:53:34 +03:00
parent 9bd922a55a
commit 59eae5fa3b
2 changed files with 31 additions and 27 deletions

View File

@@ -19,10 +19,10 @@ const c = @cImport({
});
const ENV_DB = "TURBONSS_DB";
const ENV_VERBOSE = "TURBONSS__VERBOSE";
const ENV_VERBOSE = "TURBONSS_VERBOSE";
const ENV_OMIT_MEMBERS = "TURBONSS_OMIT_MEMBERS";
export const turbonss_default_path: [:0]const u8 = "/etc/turbonss/db.turbo";
export var turbonss_db_path: [:0]const u8 = "/etc/turbonss/db.turbo";
pub var log_level: std.log.Level = .err;
@@ -47,7 +47,7 @@ fn init() void {
else
.err;
const fname = os.getenvZ(ENV_DB) orelse turbonss_default_path[0..];
const fname = os.getenvZ(ENV_DB) orelse turbonss_db_path[0..];
log.debug("opening {s}", .{fname});
const env_omit_members = os.getenvZ(ENV_OMIT_MEMBERS) orelse "auto";
@@ -75,34 +75,38 @@ fn shouldOmitMembers(envvar: []const u8, argv: [][*:0]u8) bool {
export fn _nss_turbo_getpwuid_r(
uid: c_uint,
res: *CUser,
pwd: *CUser,
buf: [*]u8,
len: usize,
buflen: usize,
errnop: *c_int,
) c.enum_nss_status {
global_init.call();
const db = get_db(errnop) orelse return c.NSS_STATUS_UNAVAIL;
if (global_state.file == null) {
errnop.* = @enumToInt(os.E.AGAIN);
return c.NSS_STATUS_UNAVAIL;
}
const db = global_state.file.?.db;
const cuser = db.getpwuid(uid, buf[0..len]) catch |err| switch (err) {
error.OutOfMemory => {
if (db.getpwuid(uid, buf[0..buflen])) |maybe_cuser| {
if (maybe_cuser) |cuser| {
pwd.* = cuser;
return c.NSS_STATUS_SUCCESS;
} else {
errnop.* = @enumToInt(os.E.NOENT);
return c.NSS_STATUS_NOTFOUND;
}
} else |err| switch (err) {
error.BufferTooSmall => {
errnop.* = @enumToInt(os.E.RANGE);
return c.NSS_STATUS_TRYAGAIN;
},
};
if (cuser == null) {
errnop.* = @enumToInt(os.E.NOENT);
return c.NSS_STATUS_NOTFOUND;
}
res.* = cuser.?;
}
return c.NSS_STATUS_SUCCESS;
fn get_db(errnop: *c_int) ?DB {
global_init.call();
if (global_state.file) |file| {
return file.db;
} else {
errnop.* = @enumToInt(os.E.AGAIN);
return null;
}
}
const testing = std.testing;