summaryrefslogtreecommitdiffstats
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/lib.rs b/src/lib.rs
index e7b6edc..c104a23 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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)?;