17
|
1 use pam::module::{PamHandleT};
|
|
2 use pam::constants::{PamFlag, PamResultCode, PAM_SILENT};
|
|
3 use std::ffi::CStr;
|
|
4 use std::os::raw::{c_char, c_int};
|
|
5
|
|
6
|
|
7
|
|
8 fn extract_argv(argc: c_int, argv: *const *const c_char) -> Vec<String> {
|
|
9 (0..argc)
|
|
10 .map(|o| unsafe {
|
|
11 CStr::from_ptr(*argv.offset(o as isize) as *const c_char)
|
|
12 .to_string_lossy()
|
|
13 .into_owned()
|
|
14 })
|
|
15 .collect()
|
|
16 }
|
|
17
|
|
18 #[no_mangle]
|
|
19 pub extern "C" fn pam_sm_acct_mgmt(
|
|
20 pamh: &PamHandleT,
|
|
21 flags: PamFlag,
|
|
22 argc: c_int,
|
|
23 argv: *const *const c_char,
|
|
24 ) -> PamResultCode {
|
|
25 let args = extract_argv(argc, argv);
|
|
26 let silent = (flags & PAM_SILENT) != 0;
|
|
27 super::acct_mgmt(pamh, args, silent)
|
|
28 }
|
|
29
|
|
30 #[no_mangle]
|
|
31 pub extern "C" fn pam_sm_authenticate(
|
|
32 pamh: &PamHandleT,
|
|
33 flags: PamFlag,
|
|
34 argc: c_int,
|
|
35 argv: *const *const c_char,
|
|
36 ) -> PamResultCode {
|
|
37 let args = extract_argv(argc, argv);
|
|
38 let silent = (flags & PAM_SILENT) != 0;
|
|
39 super::sm_authenticate(pamh, args, silent)
|
|
40 }
|
|
41
|
|
42 #[no_mangle]
|
|
43 pub extern "C" fn pam_sm_chauthtok(
|
|
44 _: &PamHandleT,
|
|
45 _: PamFlag,
|
|
46 _: c_int,
|
|
47 _: *const *const c_char,
|
|
48 ) -> PamResultCode {
|
|
49 PamResultCode::PAM_IGNORE
|
|
50 }
|
|
51
|
|
52 #[no_mangle]
|
|
53 pub extern "C" fn pam_sm_close_session(
|
|
54 _: &PamHandleT,
|
|
55 _: PamFlag,
|
|
56 _: c_int,
|
|
57 _: *const *const c_char,
|
|
58 ) -> PamResultCode {
|
|
59 PamResultCode::PAM_IGNORE
|
|
60 }
|
|
61
|
|
62 #[no_mangle]
|
|
63 pub extern "C" fn pam_sm_open_session(
|
|
64 _: &PamHandleT,
|
|
65 _: PamFlag,
|
|
66 _: c_int,
|
|
67 _: *const *const c_char,
|
|
68 ) -> PamResultCode {
|
|
69 PamResultCode::PAM_IGNORE
|
|
70 }
|
|
71
|
|
72 #[no_mangle]
|
|
73 pub extern "C" fn pam_sm_setcred(
|
|
74 pamh: &PamHandleT,
|
|
75 flags: PamFlag,
|
|
76 argc: c_int,
|
|
77 argv: *const *const c_char,
|
|
78 ) -> PamResultCode {
|
|
79 let args = extract_argv(argc, argv);
|
|
80 let silent = (flags & PAM_SILENT) != 0;
|
|
81 super::sm_setcred(pamh, args, silent)
|
|
82 }
|