From b906a8a67b1502ccf39eb4315a6f91c52343538b Mon Sep 17 00:00:00 2001 From: Dominik George <dominik.george@teckids.org> Date: Mon, 10 May 2021 22:16:09 +0200 Subject: [PATCH] [NSS] get user token from cache --- src/nss.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/nss.rs b/src/nss.rs index dc66ed2..e866eb4 100644 --- a/src/nss.rs +++ b/src/nss.rs @@ -18,9 +18,13 @@ use crate::config::{ get_optional }; use config::Config; +use crate::cache::get_cache; use crate::logging::setup_log; +use libc::{getpwuid, geteuid}; +use std::ffi::CStr; + use libnss::interop::Response; use libnss::passwd::{PasswdHooks, Passwd}; @@ -36,12 +40,28 @@ fn nss_hook_prepare() -> Config { return conf; } +fn get_current_user() -> String { + let euid; + let euser; + unsafe { + euid = geteuid(); + euser = CStr::from_ptr((*getpwuid(euid)).pw_name); + }; + euser.to_str().ok().unwrap().to_string() +} + struct OidcPasswd; impl PasswdHooks for OidcPasswd { fn get_all_entries() -> Response<Vec<Passwd>> { let config = nss_hook_prepare(); + let user = get_current_user(); + let token = match get_cache().load_user_token(&user) { + Some(t) => t, + None => return Response::Unavail + }; + Response::Success( vec![ Passwd { -- GitLab