comparison src/libpam/module.rs @ 144:56b559b7ecea

Big rename: separate concepts of Transaction from Handle. - An application that uses PAM creates a Transaction. - The Transaction has a Handle. Currently, a module still get something called a "handle", but that's probably going to change soon.
author Paul Fisher <paul@pfish.zone>
date Sun, 06 Jul 2025 11:59:26 -0400
parents ebb71a412b58
children 1bc52025156b
comparison
equal deleted inserted replaced
143:ebb71a412b58 144:56b559b7ecea
9 /// Here is full example of a PAM module that would authenticate 9 /// Here is full example of a PAM module that would authenticate
10 /// and authorize everybody: 10 /// and authorize everybody:
11 /// 11 ///
12 /// ```no_run 12 /// ```no_run
13 /// use nonstick::{ 13 /// use nonstick::{
14 /// pam_hooks, ConversationAdapter, Flags, OwnedLibPamHandle, PamHandleModule, PamModule, 14 /// pam_hooks, ConversationAdapter, Flags, LibPamTransaction, PamHandleModule, PamModule,
15 /// Result as PamResult, 15 /// Result as PamResult,
16 /// }; 16 /// };
17 /// use std::ffi::CStr; 17 /// use std::ffi::CStr;
18 /// # fn main() {} 18 /// # fn main() {}
19 /// 19 ///
40 #[macro_export] 40 #[macro_export]
41 macro_rules! pam_hooks { 41 macro_rules! pam_hooks {
42 ($ident:ident) => { 42 ($ident:ident) => {
43 mod _pam_hooks_scope { 43 mod _pam_hooks_scope {
44 use std::ffi::{c_char, c_int, c_void, CStr}; 44 use std::ffi::{c_char, c_int, c_void, CStr};
45 use $crate::{ErrorCode, Flags, PamModule, RawPamHandle}; 45 use $crate::{ErrorCode, Flags, LibPamHandle, PamModule};
46 46
47 #[no_mangle] 47 #[no_mangle]
48 extern "C" fn pam_sm_acct_mgmt( 48 extern "C" fn pam_sm_acct_mgmt(
49 pamh: *mut c_void, 49 pamh: *mut c_void,
50 flags: Flags, 50 flags: Flags,
51 argc: c_int, 51 argc: c_int,
52 argv: *const *const c_char, 52 argv: *const *const c_char,
53 ) -> c_int { 53 ) -> c_int {
54 if let Some(handle) = unsafe { pamh.cast::<RawPamHandle>().as_mut() } { 54 if let Some(handle) = unsafe { pamh.cast::<LibPamHandle>().as_mut() } {
55 let args = extract_argv(argc, argv); 55 let args = extract_argv(argc, argv);
56 ErrorCode::result_to_c(super::$ident::account_management(handle, args, flags)) 56 ErrorCode::result_to_c(super::$ident::account_management(handle, args, flags))
57 } else { 57 } else {
58 ErrorCode::Ignore as c_int 58 ErrorCode::Ignore as c_int
59 } 59 }
64 pamh: *mut c_void, 64 pamh: *mut c_void,
65 flags: Flags, 65 flags: Flags,
66 argc: c_int, 66 argc: c_int,
67 argv: *const *const c_char, 67 argv: *const *const c_char,
68 ) -> c_int { 68 ) -> c_int {
69 if let Some(handle) = unsafe { pamh.cast::<RawPamHandle>().as_mut() } { 69 if let Some(handle) = unsafe { pamh.cast::<LibPamHandle>().as_mut() } {
70 let args = extract_argv(argc, argv); 70 let args = extract_argv(argc, argv);
71 ErrorCode::result_to_c(super::$ident::authenticate(handle, args, flags)) 71 ErrorCode::result_to_c(super::$ident::authenticate(handle, args, flags))
72 } else { 72 } else {
73 ErrorCode::Ignore as c_int 73 ErrorCode::Ignore as c_int
74 } 74 }
79 pamh: *mut c_void, 79 pamh: *mut c_void,
80 flags: Flags, 80 flags: Flags,
81 argc: c_int, 81 argc: c_int,
82 argv: *const *const c_char, 82 argv: *const *const c_char,
83 ) -> c_int { 83 ) -> c_int {
84 if let Some(handle) = unsafe { pamh.cast::<RawPamHandle>().as_mut() } { 84 if let Some(handle) = unsafe { pamh.cast::<LibPamHandle>().as_mut() } {
85 let args = extract_argv(argc, argv); 85 let args = extract_argv(argc, argv);
86 ErrorCode::result_to_c(super::$ident::change_authtok(handle, args, flags)) 86 ErrorCode::result_to_c(super::$ident::change_authtok(handle, args, flags))
87 } else { 87 } else {
88 ErrorCode::Ignore as c_int 88 ErrorCode::Ignore as c_int
89 } 89 }
94 pamh: *mut c_void, 94 pamh: *mut c_void,
95 flags: Flags, 95 flags: Flags,
96 argc: c_int, 96 argc: c_int,
97 argv: *const *const c_char, 97 argv: *const *const c_char,
98 ) -> c_int { 98 ) -> c_int {
99 if let Some(handle) = unsafe { pamh.cast::<RawPamHandle>().as_mut() } { 99 if let Some(handle) = unsafe { pamh.cast::<LibPamHandle>().as_mut() } {
100 let args = extract_argv(argc, argv); 100 let args = extract_argv(argc, argv);
101 ErrorCode::result_to_c(super::$ident::close_session(handle, args, flags)) 101 ErrorCode::result_to_c(super::$ident::close_session(handle, args, flags))
102 } else { 102 } else {
103 ErrorCode::Ignore as c_int 103 ErrorCode::Ignore as c_int
104 } 104 }
110 flags: Flags, 110 flags: Flags,
111 argc: c_int, 111 argc: c_int,
112 argv: *const *const c_char, 112 argv: *const *const c_char,
113 ) -> c_int { 113 ) -> c_int {
114 let args = extract_argv(argc, argv); 114 let args = extract_argv(argc, argv);
115 if let Some(handle) = unsafe { pamh.cast::<RawPamHandle>().as_mut() } { 115 if let Some(handle) = unsafe { pamh.cast::<LibPamHandle>().as_mut() } {
116 ErrorCode::result_to_c(super::$ident::open_session(handle, args, flags)) 116 ErrorCode::result_to_c(super::$ident::open_session(handle, args, flags))
117 } else { 117 } else {
118 ErrorCode::Ignore as c_int 118 ErrorCode::Ignore as c_int
119 } 119 }
120 } 120 }
125 flags: Flags, 125 flags: Flags,
126 argc: c_int, 126 argc: c_int,
127 argv: *const *const c_char, 127 argv: *const *const c_char,
128 ) -> c_int { 128 ) -> c_int {
129 let args = extract_argv(argc, argv); 129 let args = extract_argv(argc, argv);
130 if let Some(handle) = unsafe { pamh.cast::<RawPamHandle>().as_mut() } { 130 if let Some(handle) = unsafe { pamh.cast::<LibPamHandle>().as_mut() } {
131 ErrorCode::result_to_c(super::$ident::set_credentials(handle, args, flags)) 131 ErrorCode::result_to_c(super::$ident::set_credentials(handle, args, flags))
132 } else { 132 } else {
133 ErrorCode::Ignore as c_int 133 ErrorCode::Ignore as c_int
134 } 134 }
135 } 135 }