From 0e7223cfb0fd69bf3d43ac61dff01b69e693b046 Mon Sep 17 00:00:00 2001 From: Danilo Bargen Date: Fri, 18 Sep 2015 10:41:29 +0200 Subject: [PATCH] Handle null pointer return value for getpwuid on Linux --- src/whoami/platform/unix.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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)