diff options
-rw-r--r-- | src/lib.rs | 19 |
1 files changed, 12 insertions, 7 deletions
@@ -27,20 +27,25 @@ fn create_and_open_dir<P: AsRef<Path> + Copy>( struct SessionError; +impl From<std::io::Error> for SessionError { + fn from(_: std::io::Error) -> Self { + SessionError + } +} + fn open_session(h: &mut PamHandle) -> Result<(), SessionError> { let user = h.get_user(None).or(Err(SessionError))?; let user = users::get_user_by_name(&user).ok_or(SessionError)?; let aa = cap_std::ambient_authority(); - let d = Dir::open_ambient_dir(CG_MOUNT, aa).or(Err(SessionError))?; - let d = create_and_open_dir(&d, "user").or(Err(SessionError))?; - let d = create_and_open_dir(&d, &user.uid().to_string()) - .or(Err(SessionError))?; - let d = create_and_open_dir(&d, "leaf").or(Err(SessionError))?; + let d = Dir::open_ambient_dir(CG_MOUNT, aa)?; + let d = create_and_open_dir(&d, "user")?; + let d = create_and_open_dir(&d, &user.uid().to_string())?; + let d = create_and_open_dir(&d, "leaf")?; let pid = process::id().to_string(); let mut options = OpenOptions::new(); options.write(true); - let mut procs = d.open_with("cgroup.procs", &options).or(Err(SessionError))?; - procs.write_all(pid.as_bytes()).or(Err(SessionError))?; + let mut procs = d.open_with("cgroup.procs", &options)?; + procs.write_all(pid.as_bytes())?; Ok(()) } |