comparison src/libpam/handle.rs @ 103:dfcd96a74ac4 default tip

write a truly prodigious amount of documentation adds a bunch of links to the OpenPAM man pages and the XSSO spec as well as just a bunch of prose and stuff.
author Paul Fisher <paul@pfish.zone>
date Wed, 25 Jun 2025 00:59:24 -0400
parents 94eb11cb1798
children
comparison
equal deleted inserted replaced
102:94eb11cb1798 103:dfcd96a74ac4
5 use crate::handle::PamShared; 5 use crate::handle::PamShared;
6 use crate::libpam::environ::{LibPamEnviron, LibPamEnvironMut}; 6 use crate::libpam::environ::{LibPamEnviron, LibPamEnvironMut};
7 pub use crate::libpam::pam_ffi::LibPamHandle; 7 pub use crate::libpam::pam_ffi::LibPamHandle;
8 use crate::libpam::{memory, pam_ffi}; 8 use crate::libpam::{memory, pam_ffi};
9 use crate::logging::Level; 9 use crate::logging::Level;
10 use crate::{Conversation, EnvironMap, Flags, PamHandleApplication, PamHandleModule}; 10 use crate::{
11 Conversation, EnvironMap, Flags, PamHandleApplication, PamHandleModule, _guide, _linklist,
12 _stdlinks,
13 };
11 use num_enum::{IntoPrimitive, TryFromPrimitive}; 14 use num_enum::{IntoPrimitive, TryFromPrimitive};
12 use std::cell::Cell; 15 use std::cell::Cell;
13 use std::ffi::{c_char, c_int, CString}; 16 use std::ffi::{c_char, c_int, CString};
14 use std::ops::{Deref, DerefMut}; 17 use std::ops::{Deref, DerefMut};
15 use std::ptr; 18 use std::ptr;
76 /// 79 ///
77 /// The service name is what controls the steps and checks PAM goes through 80 /// The service name is what controls the steps and checks PAM goes through
78 /// when authenticating a user. This corresponds to the configuration file 81 /// when authenticating a user. This corresponds to the configuration file
79 /// named <code>/etc/pam.d/<var>service_name</var></code>. 82 /// named <code>/etc/pam.d/<var>service_name</var></code>.
80 /// 83 ///
81 /// For more information, see the [`pam_start` man page][man], or 84 /// # References
82 /// [`pam_start` in the PAM Application Developers' Guide][adg]. 85 #[doc = _linklist!(pam_start: adg, _std)]
83 /// 86 ///
84 /// [man]: https://www.man7.org/linux/man-pages/man3/pam_start.3.html 87 #[doc = _stdlinks!(3 pam_start)]
85 /// [adg]: https://www.chiark.greenend.org.uk/doc/libpam-doc/html/adg-interface-by-app-expected.html#adg-pam_start 88 #[doc = _guide!(adg: "adg-interface-by-app-expected.html#adg-pam_start")]
86 pub fn build_with_service(service_name: String) -> HandleBuilder { 89 pub fn build_with_service(service_name: String) -> HandleBuilder {
87 HandleBuilder { service_name, username: None } 90 HandleBuilder {
91 service_name,
92 username: None,
93 }
88 } 94 }
89 95
90 fn start( 96 fn start(
91 service_name: String, 97 service_name: String,
92 username: Option<String>, 98 username: Option<String>,
150 // pam_getenvlist - shared 156 // pam_getenvlist - shared
151 157
152 impl Drop for OwnedLibPamHandle<'_> { 158 impl Drop for OwnedLibPamHandle<'_> {
153 /// Closes the PAM session on an owned PAM handle. 159 /// Closes the PAM session on an owned PAM handle.
154 /// 160 ///
155 /// See the [`pam_end` manual page][man] for more information. 161 /// This internally calls `pam_end` with the appropriate error code.
156 /// 162 ///
157 /// [man]: https://www.man7.org/linux/man-pages/man3/pam_end.3.html 163 /// # References
164 #[doc = _linklist!(pam_end: adg, _std)]
165 ///
166 #[doc = _guide!(adg: "adg-interface-by-app-expected.html#adg-pam_end")]
167 #[doc = _stdlinks!(3 pam_end)]
158 fn drop(&mut self) { 168 fn drop(&mut self) {
159 unsafe { 169 unsafe {
160 pam_ffi::pam_end( 170 pam_ffi::pam_end(
161 self.handle.0, 171 self.handle.0,
162 ErrorCode::result_to_c(self.last_return.get()), 172 ErrorCode::result_to_c(self.last_return.get()),