Mercurial > crates > nonstick
diff src/libpam/handle.rs @ 166:2f5913131295
Separate flag/action flags into flags and action.
This also individualizes the type of flag for each PAM function,
so that you can only call a function with the right flags and values.
author | Paul Fisher <paul@pfish.zone> |
---|---|
date | Tue, 15 Jul 2025 00:32:24 -0400 |
parents | a75a66cb4181 |
children | 77470e45e397 |
line wrap: on
line diff
--- a/src/libpam/handle.rs Mon Jul 14 18:56:55 2025 -0400 +++ b/src/libpam/handle.rs Tue Jul 15 00:32:24 2025 -0400 @@ -9,7 +9,7 @@ use crate::libpam::items::{LibPamItems, LibPamItemsMut}; use crate::libpam::{items, memory}; use crate::logging::{Level, Location, Logger}; -use crate::{Conversation, EnvironMap, Flags, ModuleClient, Transaction}; +use crate::{AuthnFlags, AuthtokFlags, Conversation, EnvironMap, ModuleClient, Transaction}; use libpam_sys_consts::constants; use num_enum::{IntoPrimitive, TryFromPrimitive}; use std::any::TypeId; @@ -153,8 +153,8 @@ } macro_rules! wrap { - (fn $name:ident { $pam_func:ident }) => { - fn $name(&mut self, flags: Flags) -> Result<()> { + (fn $name:ident($ftype:ident) { $pam_func:ident }) => { + fn $name(&mut self, flags: $ftype) -> Result<()> { ErrorCode::result_from(unsafe { libpam_sys::$pam_func((self as *mut Self).cast(), flags.bits()) }) @@ -163,9 +163,9 @@ } impl Transaction for LibPamHandle { - wrap!(fn authenticate { pam_authenticate }); - wrap!(fn account_management { pam_acct_mgmt }); - wrap!(fn change_authtok { pam_chauthtok }); + wrap!(fn authenticate(AuthnFlags) { pam_authenticate }); + wrap!(fn account_management(AuthnFlags) { pam_acct_mgmt }); + wrap!(fn change_authtok(AuthtokFlags) { pam_chauthtok }); } // TODO: pam_setcred - app @@ -233,9 +233,9 @@ } impl<C: Conversation> Transaction for LibPamTransaction<C> { - delegate!(fn authenticate(&mut self, flags: Flags) -> Result<()>); - delegate!(fn account_management(&mut self, flags: Flags) -> Result<()>); - delegate!(fn change_authtok(&mut self, flags: Flags) -> Result<()>); + delegate!(fn authenticate(&mut self, flags: AuthnFlags) -> Result<()>); + delegate!(fn account_management(&mut self, flags: AuthnFlags) -> Result<()>); + delegate!(fn change_authtok(&mut self, flags: AuthtokFlags) -> Result<()>); } impl<C: Conversation> PamShared for LibPamTransaction<C> {