Mercurial > crates > nonstick
diff src/libpam/environ.rs @ 130:80c07e5ab22f
Transfer over (almost) completely to using libpam-sys.
This reimplements everything in nonstick on top of the new -sys crate.
We don't yet use libpam-sys's helpers for binary message payloads. Soon.
author | Paul Fisher <paul@pfish.zone> |
---|---|
date | Tue, 01 Jul 2025 06:11:43 -0400 |
parents | 49d9e2b5c189 |
children |
line wrap: on
line diff
--- a/src/libpam/environ.rs Mon Jun 30 23:49:54 2025 -0400 +++ b/src/libpam/environ.rs Tue Jul 01 06:11:43 2025 -0400 @@ -1,7 +1,7 @@ use crate::constants::{ErrorCode, Result}; use crate::environ::{EnvironMap, EnvironMapMut}; use crate::libpam::memory::CHeapString; -use crate::libpam::{memory, pam_ffi, LibPamHandle}; +use crate::libpam::{memory, LibPamHandle}; use std::ffi::{c_char, CStr, CString, OsStr, OsString}; use std::marker::PhantomData; use std::os::unix::ffi::{OsStrExt, OsStringExt}; @@ -20,12 +20,7 @@ fn environ_get(&self, key: &OsStr) -> Option<OsString> { let key = CString::new(key.as_bytes()).ok()?; // SAFETY: We are a valid handle and are calling with a good key. - unsafe { - copy_env(pam_ffi::pam_getenv( - (self as *const LibPamHandle).cast_mut(), - key.as_ptr(), - )) - } + unsafe { copy_env(libpam_sys::pam_getenv(self.0.as_ref(), key.as_ptr())) } } fn environ_set(&mut self, key: &OsStr, value: Option<&OsStr>) -> Result<Option<OsString>> { @@ -44,18 +39,16 @@ } let put = CString::new(result).map_err(|_| ErrorCode::ConversationError)?; // SAFETY: This is a valid handle and a valid environment string. - ErrorCode::result_from(unsafe { pam_ffi::pam_putenv(self, put.as_ptr()) })?; + ErrorCode::result_from(unsafe { libpam_sys::pam_putenv(self.0.as_mut(), put.as_ptr()) })?; Ok(old) } fn environ_iter(&self) -> Result<impl Iterator<Item = (OsString, OsString)>> { // SAFETY: This is a valid PAM handle. It will return valid data. unsafe { - NonNull::new(pam_ffi::pam_getenvlist( - (self as *const LibPamHandle).cast_mut(), - )) - .map(|ptr| EnvList::from_ptr(ptr.cast())) - .ok_or(ErrorCode::BufferError) + NonNull::new(libpam_sys::pam_getenvlist(self.0.as_ref())) + .map(|ptr| EnvList::from_ptr(ptr.cast())) + .ok_or(ErrorCode::BufferError) } } }