Mercurial > crates > nonstick
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 } |