diff --git a/src/whoami/platform/unix.rs b/src/whoami/platform/unix.rs index 3250edc91..d24d02eca 100644 --- a/src/whoami/platform/unix.rs +++ b/src/whoami/platform/unix.rs @@ -17,8 +17,16 @@ extern { } pub unsafe fn getusername() -> Result { - let passwd: *const c_passwd = getpwuid(geteuid()); + // Get effective user id + let uid = geteuid(); + // Try to find username for uid + let passwd: *const c_passwd = getpwuid(uid); + if passwd.is_null() { + return Err(format!("cannot find name for user ID {}", uid)) + } + + // Extract username from passwd struct let pw_name: *const libc::c_char = (*passwd).pw_name; let username = String::from_utf8_lossy(::std::ffi::CStr::from_ptr(pw_name).to_bytes()).to_string(); Ok(username)