diff options
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -1,9 +1,11 @@ // Copyright (C) 2023 Tomasz Kramkowski <tomasz@kramkow.ski> // SPDX-License-Identifier: MIT +mod passwd; + use cap_std::fs::{Dir, OpenOptions}; use pam::module::PamHandle; -use std::ffi::{c_char, c_int}; +use std::ffi::{c_char, c_int, CString}; use std::io::{ErrorKind, Write}; use std::panic; use std::path::Path; @@ -31,8 +33,9 @@ impl From<std::io::Error> for SessionError { fn open_session(h: &PamHandle, mountpoint: &str) -> Result<(), SessionError> { let user = h.get_user(None).or(Err(SessionError))?; - let user = users::get_user_by_name(&user).ok_or(SessionError)?; - let uid = user.uid().to_string(); + let user = CString::new(user).or(Err(SessionError))?; + let uid = passwd::get_uid_by_name(&user).ok_or(SessionError)?; + let uid = uid.to_string(); let d = Dir::open_ambient_dir(mountpoint, cap_std::ambient_authority())?; let d = create_and_open_dir(&d, "user")?; let d = create_and_open_dir(&d, &uid)?; |