mirror of
https://github.com/RustPython/RustPython.git
synced 2026-06-09 22:49:57 +09:00
Merge pull request #3991 from Yaminyam/refactor/module-pwd
Refactor: pwd module
This commit is contained in:
@@ -53,39 +53,39 @@ mod pwd {
|
||||
|
||||
#[pyfunction]
|
||||
fn getpwnam(name: PyStrRef, vm: &VirtualMachine) -> PyResult<Passwd> {
|
||||
if name.as_str().contains('\0') {
|
||||
let pw_name = name.as_str();
|
||||
if pw_name.contains('\0') {
|
||||
return Err(exceptions::cstring_error(vm));
|
||||
}
|
||||
match User::from_name(name.as_str()).map_err(|err| err.into_pyexception(vm))? {
|
||||
Some(user) => Ok(Passwd::from(user)),
|
||||
None => {
|
||||
let name_repr = name.as_object().repr(vm)?;
|
||||
let message = vm
|
||||
.ctx
|
||||
.new_str(format!("getpwnam(): name not found: {}", name_repr))
|
||||
.into();
|
||||
Err(vm.new_key_error(message))
|
||||
}
|
||||
}
|
||||
let user = User::from_name(name.as_str()).map_err(|err| err.into_pyexception(vm))?;
|
||||
let user = user.ok_or_else(|| {
|
||||
vm.new_key_error(
|
||||
vm.ctx
|
||||
.new_str(format!("getpwnam(): name not found: {}", pw_name))
|
||||
.into(),
|
||||
)
|
||||
})?;
|
||||
Ok(Passwd::from(user))
|
||||
}
|
||||
|
||||
#[pyfunction]
|
||||
fn getpwuid(uid: PyIntRef, vm: &VirtualMachine) -> PyResult<Passwd> {
|
||||
let uid_t = libc::uid_t::try_from(uid.as_bigint()).map(unistd::Uid::from_raw);
|
||||
let user = match uid_t {
|
||||
Ok(uid) => User::from_uid(uid).map_err(|err| err.into_pyexception(vm))?,
|
||||
Err(_) => None,
|
||||
};
|
||||
match user {
|
||||
Some(user) => Ok(Passwd::from(user)),
|
||||
None => {
|
||||
let message = vm
|
||||
.ctx
|
||||
let uid_t = libc::uid_t::try_from(uid.as_bigint())
|
||||
.map(unistd::Uid::from_raw)
|
||||
.ok();
|
||||
let user = uid_t
|
||||
.map(User::from_uid)
|
||||
.transpose()
|
||||
.map_err(|err| err.into_pyexception(vm))?
|
||||
.flatten();
|
||||
let user = user.ok_or_else(|| {
|
||||
vm.new_key_error(
|
||||
vm.ctx
|
||||
.new_str(format!("getpwuid(): uid not found: {}", uid.as_bigint()))
|
||||
.into();
|
||||
Err(vm.new_key_error(message))
|
||||
}
|
||||
}
|
||||
.into(),
|
||||
)
|
||||
})?;
|
||||
Ok(Passwd::from(user))
|
||||
}
|
||||
|
||||
// TODO: maybe merge this functionality into nix?
|
||||
|
||||
Reference in New Issue
Block a user