comparison src/libpam/answer.rs @ 100:3f11b8d30f63

Implement environment variable management. This actually wires up the environment variable handling to libpam, so that applications and modules can manage the environment through the authentication process.
author Paul Fisher <paul@pfish.zone>
date Tue, 24 Jun 2025 17:08:01 -0400
parents b87100c5eed4
children 94b51fa4f797
comparison
equal deleted inserted replaced
99:8840fa6534f6 100:3f11b8d30f63
7 use crate::{ErrorCode, Result}; 7 use crate::{ErrorCode, Result};
8 use std::ffi::CStr; 8 use std::ffi::CStr;
9 use std::ops::{Deref, DerefMut}; 9 use std::ops::{Deref, DerefMut};
10 use std::ptr::NonNull; 10 use std::ptr::NonNull;
11 use std::{iter, mem, ptr, slice}; 11 use std::{iter, mem, ptr, slice};
12 use std::mem::ManuallyDrop;
12 13
13 /// The corridor via which the answer to Messages navigate through PAM. 14 /// The corridor via which the answer to Messages navigate through PAM.
14 #[derive(Debug)] 15 #[derive(Debug)]
15 pub struct Answers { 16 pub struct Answers {
16 /// The actual list of answers. This can't be a [`CHeapBox`] because 17 /// The actual list of answers. This can't be a [`CHeapBox`] because
46 /// Converts this into a `*Answer` for passing to PAM. 47 /// Converts this into a `*Answer` for passing to PAM.
47 /// 48 ///
48 /// This object is consumed and the `Answer` pointer now owns its data. 49 /// This object is consumed and the `Answer` pointer now owns its data.
49 /// It can be recreated with [`Self::from_c_heap`]. 50 /// It can be recreated with [`Self::from_c_heap`].
50 pub fn into_ptr(self) -> NonNull<Answer> { 51 pub fn into_ptr(self) -> NonNull<Answer> {
51 let ret = self.base; 52 ManuallyDrop::new(self).base
52 mem::forget(self);
53 ret
54 } 53 }
55 54
56 /// Takes ownership of a list of answers allocated on the C heap. 55 /// Takes ownership of a list of answers allocated on the C heap.
57 /// 56 ///
58 /// # Safety 57 /// # Safety