view src/user.rs @ 24:e8ba0f63c227

remove static variable
author AnaTofuZ <anatofuz@gmail.com>
date Tue, 03 Nov 2020 18:37:04 +0900
parents e6dc51066703
children afec42bdd5ab
line wrap: on
line source

pub struct User {
    pub Uid: u32,
    pub Gid: u32,
    pub Name: String
}

pub fn getlogin(uid: u32) -> String {
    use std::ffi::CStr;
    let user_passwd = unsafe { nix::libc::getpwuid(uid) };
    let c_str = unsafe { CStr::from_ptr((*user_passwd).pw_name) };
    c_str.to_str().unwrap().to_string()
}

pub fn getuid() -> u32 {
    let uid_struct = nix::unistd::getuid();
    uid_struct.into()
}

pub fn getgid() -> u32 {
    let gid_struct = nix::unistd::getgid();
    gid_struct.into()
}

const ROOT_ID: u32 = 0;

pub fn set_root_id() {
    if let Err(err) = nix::unistd::seteuid(nix::unistd::Uid::from_raw(ROOT_ID)) {
        panic!("failed seteuid {}", err)
    }
    if let Err(err) = nix::unistd::setegid(nix::unistd::Gid::from_raw(ROOT_ID)) {
        panic!("failed setedid{}", err)
    }
    if let Err(err) = nix::unistd::setuid(nix::unistd::Uid::from_raw(ROOT_ID)) {
        panic!("failed setuid {}", err)
    }
    if let Err(err) = nix::unistd::setgid(nix::unistd::Gid::from_raw(ROOT_ID)) {
        panic!("failed setdid{}", err)
    }
}