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)
         }
     }
 }