diff --git a/src/cache.rs b/src/cache.rs
index 2c4018e870a9805ff7a14112be02f508078183fd..9256531f68c061e255854fcfe741266e8a2fdedc 100644
--- a/src/cache.rs
+++ b/src/cache.rs
@@ -182,6 +182,13 @@ impl UserInfo {
         };
     }
 
+    /// Set the full passwd struct from outside
+    pub fn set_passwd(&mut self, passwd: Passwd) {
+        self.passwd = Some(passwd.clone());
+        self.username = Some(passwd.pw_name);
+        self.uid = Some(passwd.pw_uid);
+    }
+
     /// Return the home directory from the passwd slot,
     /// attempting NSS resolution before doing so
     pub fn get_home_directory(&mut self) -> Result<String, io::Error> {
diff --git a/src/pam.rs b/src/pam.rs
index 8bfef0c02b3cce320bae474581c6720e478f7a99..d7637ed2c7938459969dd4fce51cdcd75c790181 100644
--- a/src/pam.rs
+++ b/src/pam.rs
@@ -26,6 +26,8 @@ use crate::logging::setup_log;
 
 use crate::cache::{get_context_user, set_is_getpwnam_safe};
 
+use crate::unix::getpwnam_safe;
+
 use pamsm::{PamServiceModule, Pam, PamFlag, PamError, PamLibExt};
 
 fn pam_sm_prepare(argv: &Vec<String>) -> Config {
@@ -91,7 +93,10 @@ impl PamServiceModule for PamOidc {
                 Ok(t) => {
                     info!("Authenticated {} using Resource Owner Password Grant", username);
                     set_is_getpwnam_safe(false);
-                    get_context_user().set_username(username.to_string());
+                    let passwd = getpwnam_safe(username.to_string());
+                    if passwd.is_ok() {
+                        get_context_user().set_passwd(passwd.unwrap());
+                    }
                     get_context_user().set_access_token(t);
                     set_is_getpwnam_safe(true);
                     return PamError::SUCCESS;
diff --git a/src/unix.rs b/src/unix.rs
index d74e0e7076661ddabd647bee51b6263dcc46ec47..64523668ea0a106e22e8f25ee6fae1250792699b 100644
--- a/src/unix.rs
+++ b/src/unix.rs
@@ -20,6 +20,7 @@ use std::io;
 use std::mem::uninitialized;
 use std::ptr::null_mut;
 
+#[derive(Clone)]
 pub struct Passwd {
     pub pw_name: String,
     pub pw_passwd: String,