pam_kanidm/pam/
macros.rs
1#[macro_export]
34macro_rules! pam_hooks {
35 ($ident:ident) => {
36 pub use self::pam_hooks_scope::*;
37 mod pam_hooks_scope {
38 use std::ffi::CStr;
39 use std::os::raw::{c_char, c_int};
40
41 use $crate::pam::constants::{PamFlag, PamResultCode};
42 use $crate::pam::module::{PamHandle, PamHooks};
43
44 fn extract_argv<'a>(argc: c_int, argv: *const *const c_char) -> Vec<&'a CStr> {
45 (0..argc)
46 .map(|o| unsafe { CStr::from_ptr(*argv.offset(o as isize) as *const c_char) })
47 .collect()
48 }
49
50 #[no_mangle]
51 pub extern "C" fn pam_sm_acct_mgmt(
52 pamh: &PamHandle,
53 flags: PamFlag,
54 argc: c_int,
55 argv: *const *const c_char,
56 ) -> PamResultCode {
57 let args = extract_argv(argc, argv);
58 super::$ident::acct_mgmt(pamh, args, flags)
59 }
60
61 #[no_mangle]
62 pub extern "C" fn pam_sm_authenticate(
63 pamh: &PamHandle,
64 flags: PamFlag,
65 argc: c_int,
66 argv: *const *const c_char,
67 ) -> PamResultCode {
68 let args = extract_argv(argc, argv);
69 super::$ident::sm_authenticate(pamh, args, flags)
70 }
71
72 #[no_mangle]
73 pub extern "C" fn pam_sm_chauthtok(
74 pamh: &PamHandle,
75 flags: PamFlag,
76 argc: c_int,
77 argv: *const *const c_char,
78 ) -> PamResultCode {
79 let args = extract_argv(argc, argv);
80 super::$ident::sm_chauthtok(pamh, args, flags)
81 }
82
83 #[no_mangle]
84 pub extern "C" fn pam_sm_close_session(
85 pamh: &PamHandle,
86 flags: PamFlag,
87 argc: c_int,
88 argv: *const *const c_char,
89 ) -> PamResultCode {
90 let args = extract_argv(argc, argv);
91 super::$ident::sm_close_session(pamh, args, flags)
92 }
93
94 #[no_mangle]
95 pub extern "C" fn pam_sm_open_session(
96 pamh: &PamHandle,
97 flags: PamFlag,
98 argc: c_int,
99 argv: *const *const c_char,
100 ) -> PamResultCode {
101 let args = extract_argv(argc, argv);
102 super::$ident::sm_open_session(pamh, args, flags)
103 }
104
105 #[no_mangle]
106 pub extern "C" fn pam_sm_setcred(
107 pamh: &PamHandle,
108 flags: PamFlag,
109 argc: c_int,
110 argv: *const *const c_char,
111 ) -> PamResultCode {
112 let args = extract_argv(argc, argv);
113 super::$ident::sm_setcred(pamh, args, flags)
114 }
115 }
116 };
117}