shitbox/src/cmd/whoami/mod.rs
2023-01-10 18:28:33 -05:00

37 lines
775 B
Rust

use std::ffi::CStr;
use {
super::Cmd,
clap::Command,
libc::{geteuid, getpwuid},
};
#[derive(Debug, Default)]
pub struct Whoami;
impl Cmd for Whoami {
fn name(&self) -> &str {
"whoami"
}
fn cli(&self) -> clap::Command {
Command::new("whoami")
.about("print effective user name")
.author("Nathan Fisher")
}
fn run(&self, _matches: Option<&clap::ArgMatches>) -> Result<(), Box<dyn std::error::Error>> {
let pwnam = unsafe {
let pw = *getpwuid(geteuid());
CStr::from_ptr((pw).pw_name)
};
let pwnam = pwnam.to_str()?;
println!("{pwnam}");
Ok(())
}
fn path(&self) -> Option<crate::Path> {
Some(crate::Path::UsrBin)
}
}