comparison src/libpam/environ.rs @ 163:a75a66cb4181

Add end-to-end tests; fix issues found by tests. - Create tests and installer/remover shell script - Fix Pointer/pointee problems - Add Debug formatting - Misc cleanup
author Paul Fisher <paul@pfish.zone>
date Mon, 14 Jul 2025 17:40:11 -0400
parents 56b559b7ecea
children
comparison
equal deleted inserted replaced
162:180237d0b498 163:a75a66cb4181
9 9
10 impl LibPamHandle { 10 impl LibPamHandle {
11 fn environ_get(&self, key: &OsStr) -> Option<OsString> { 11 fn environ_get(&self, key: &OsStr) -> Option<OsString> {
12 let key = CString::new(key.as_bytes()).ok()?; 12 let key = CString::new(key.as_bytes()).ok()?;
13 // SAFETY: We are a valid handle and are calling with a good key. 13 // SAFETY: We are a valid handle and are calling with a good key.
14 let src = unsafe { libpam_sys::pam_getenv(self.raw_ref(), key.as_ptr()) }; 14 let src = unsafe { libpam_sys::pam_getenv(self.inner(), key.as_ptr()) };
15 let val = match NonNull::new(src) { 15 let val = match NonNull::new(src) {
16 None => return None, 16 None => return None,
17 Some(ptr) => ptr.as_ptr(), 17 Some(ptr) => ptr.as_ptr(),
18 }; 18 };
19 // SAFETY: We were just returned this string from PAM. 19 // SAFETY: We were just returned this string from PAM.
37 result.extend(value.as_bytes()); 37 result.extend(value.as_bytes());
38 } 38 }
39 let put = CString::new(result).unwrap(); 39 let put = CString::new(result).unwrap();
40 // SAFETY: This is a valid handle and a valid environment string. 40 // SAFETY: This is a valid handle and a valid environment string.
41 // pam_putenv is only ever going to 41 // pam_putenv is only ever going to
42 let _ = unsafe { libpam_sys::pam_putenv(self.raw_mut(), put.as_ptr()) }; 42 let _ = unsafe { libpam_sys::pam_putenv(self.inner_mut(), put.as_ptr()) };
43 old 43 old
44 } 44 }
45 45
46 fn environ_iter(&self) -> impl Iterator<Item = (OsString, OsString)> { 46 fn environ_iter(&self) -> impl Iterator<Item = (OsString, OsString)> {
47 // SAFETY: This is a valid PAM handle. It will return valid data. 47 // SAFETY: This is a valid PAM handle. It will return valid data.
48 unsafe { 48 unsafe {
49 NonNull::new(libpam_sys::pam_getenvlist(self.raw_ref())) 49 NonNull::new(libpam_sys::pam_getenvlist(self.inner()))
50 .map(|ptr| EnvList::from_ptr(ptr.cast())) 50 .map(|ptr| EnvList::from_ptr(ptr.cast()))
51 .unwrap_or_else(EnvList::empty) 51 .unwrap_or_else(EnvList::empty)
52 } 52 }
53 } 53 }
54 } 54 }