diff --git a/src/cache.rs b/src/cache.rs
index f5fa9d9c33a002c8c1a28912505c3f05497c8df7..040ec373d0a66e5b19ad85dbf5eae3f51b1f69a4 100644
--- a/src/cache.rs
+++ b/src/cache.rs
@@ -63,9 +63,17 @@ impl Cache {
             Ok(nam) => nam,
             Err(_) => return Err("Invalid username in lookup")
         };
+        let pw;
+        unsafe {
+            pw = getpwnam(nam.as_ptr());
+        };
+        if pw.is_null() {
+            error!("Failed to lookup user {}", username);
+            return Err("Failed to lookup user");
+        }
         let target_euid;
         unsafe {
-            target_euid = (*getpwnam(nam.as_ptr())).pw_uid;
+            target_euid = (*pw).pw_uid;
         };
 
         if target_euid == current_euid {
diff --git a/src/nss.rs b/src/nss.rs
index 9d76fce74cc68f4a33a6816f89093e778acabaad..9588e033f6745a656f316c1495aa0ccee7682f2b 100644
--- a/src/nss.rs
+++ b/src/nss.rs
@@ -59,10 +59,19 @@ fn nss_hook_prepare() -> Config {
 
 fn get_current_user() -> String {
     let euid;
-    let euser;
+    let pw;
     unsafe {
         euid = geteuid();
-        euser = CStr::from_ptr((*getpwuid(euid)).pw_name);
+        pw = getpwuid(euid);
+    };
+    if pw.is_null() {
+        error!("Failed to look up user name for UID {}", euid);
+        return "nobody".to_string();
+    }
+
+    let euser;
+    unsafe {
+        euser = CStr::from_ptr((*pw).pw_name);
     };
     euser.to_str().ok().unwrap().to_string()
 }