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