diff src/constants.rs @ 136:efbc235f01d3

Separate libpam-sys-helpers from libpam-sys. This separates the parts of libpam-sys that don't need linking against libpam from the parts that do need to link against libpam.
author Paul Fisher <paul@pfish.zone>
date Thu, 03 Jul 2025 14:28:04 -0400
parents a632a8874131
children
line wrap: on
line diff
--- a/src/constants.rs	Thu Jul 03 11:14:49 2025 -0400
+++ b/src/constants.rs	Thu Jul 03 14:28:04 2025 -0400
@@ -18,8 +18,8 @@
 /// **The values of these constants are deliberately selected _not_ to match
 /// any PAM implementations. Applications should always use the symbolic value
 /// and not a magic number.**
-mod pam_ffi {
-    pub use libpam_sys::*;
+mod pam_constants {
+    pub use libpam_sys_helpers::constants::*;
 
     macro_rules! define {
         ($(#[$attr:meta])* $($name:ident = $value:expr;)+) => {
@@ -34,24 +34,21 @@
 
     define!(
         /// A fictitious constant for testing purposes.
-        #[cfg(not(feature = "link"))]
-        #[cfg_pam_impl(not("OpenPam"))]
+        #[cfg(not(pam_impl = "OpenPam"))]
         PAM_BAD_CONSTANT = 513;
         PAM_BAD_FEATURE = 514;
     );
 
     define!(
         /// A fictitious constant for testing purposes.
-        #[cfg(not(feature = "link"))]
-        #[cfg_pam_impl(not(any("LinuxPam", "OpenPam")))]
+        #[cfg(not(any(pam_impl = "LinuxPam", pam_impl = "OpenPam")))]
         PAM_BAD_ITEM = 515;
         PAM_MODULE_UNKNOWN = 516;
     );
 
     define!(
         /// A fictitious constant for testing purposes.
-        #[cfg(not(feature = "link"))]
-        #[cfg_pam_impl(not("LinuxPam"))]
+        #[cfg(not(pam_impl = "LinuxPam"))]
         PAM_CONV_AGAIN = 517;
         PAM_INCOMPLETE = 518;
     );
@@ -66,24 +63,24 @@
     #[repr(transparent)]
     pub struct Flags: c_int {
         /// The module should not generate any messages.
-        const SILENT = libpam_sys::PAM_SILENT;
+        const SILENT = pam_constants::PAM_SILENT;
 
         /// The module should return [ErrorCode::AuthError]
         /// if the user has an empty authentication token
         /// rather than immediately accepting them.
-        const DISALLOW_NULL_AUTHTOK = libpam_sys::PAM_DISALLOW_NULL_AUTHTOK;
+        const DISALLOW_NULL_AUTHTOK = pam_constants::PAM_DISALLOW_NULL_AUTHTOK;
 
         // Flag used for `set_credentials`.
 
         /// Set user credentials for an authentication service.
-        const ESTABLISH_CREDENTIALS = libpam_sys::PAM_ESTABLISH_CRED;
+        const ESTABLISH_CREDENTIALS = pam_constants::PAM_ESTABLISH_CRED;
         /// Delete user credentials associated with
         /// an authentication service.
-        const DELETE_CREDENTIALS = libpam_sys::PAM_DELETE_CRED;
+        const DELETE_CREDENTIALS = pam_constants::PAM_DELETE_CRED;
         /// Reinitialize user credentials.
-        const REINITIALIZE_CREDENTIALS = libpam_sys::PAM_REINITIALIZE_CRED;
+        const REINITIALIZE_CREDENTIALS = pam_constants::PAM_REINITIALIZE_CRED;
         /// Extend the lifetime of user credentials.
-        const REFRESH_CREDENTIALS = libpam_sys::PAM_REFRESH_CRED;
+        const REFRESH_CREDENTIALS = pam_constants::PAM_REFRESH_CRED;
 
         // Flags used for password changing.
 
@@ -92,7 +89,7 @@
         /// the password service should update all passwords.
         ///
         /// This flag is only used by `change_authtok`.
-        const CHANGE_EXPIRED_AUTHTOK = libpam_sys::PAM_CHANGE_EXPIRED_AUTHTOK;
+        const CHANGE_EXPIRED_AUTHTOK = pam_constants::PAM_CHANGE_EXPIRED_AUTHTOK;
         /// This is a preliminary check for password changing.
         /// The password should not be changed.
         ///
@@ -100,7 +97,7 @@
         /// Applications may not use this flag.
         ///
         /// This flag is only used by `change_authtok`.
-        const PRELIMINARY_CHECK = libpam_sys::PAM_PRELIM_CHECK;
+        const PRELIMINARY_CHECK = pam_constants::PAM_PRELIM_CHECK;
         /// The password should actuallyPR be updated.
         /// This and [Self::PRELIMINARY_CHECK] are mutually exclusive.
         ///
@@ -108,7 +105,7 @@
         /// Applications may not use this flag.
         ///
         /// This flag is only used by `change_authtok`.
-        const UPDATE_AUTHTOK = libpam_sys::PAM_UPDATE_AUTHTOK;
+        const UPDATE_AUTHTOK = pam_constants::PAM_UPDATE_AUTHTOK;
     }
 }
 
@@ -131,41 +128,41 @@
 #[non_exhaustive] // C might give us anything!
 #[repr(i32)]
 pub enum ErrorCode {
-    OpenError = pam_ffi::PAM_OPEN_ERR,
-    SymbolError = pam_ffi::PAM_SYMBOL_ERR,
-    ServiceError = pam_ffi::PAM_SERVICE_ERR,
-    SystemError = pam_ffi::PAM_SYSTEM_ERR,
-    BufferError = pam_ffi::PAM_BUF_ERR,
-    PermissionDenied = pam_ffi::PAM_PERM_DENIED,
-    AuthenticationError = pam_ffi::PAM_AUTH_ERR,
-    CredentialsInsufficient = pam_ffi::PAM_CRED_INSUFFICIENT,
-    AuthInfoUnavailable = pam_ffi::PAM_AUTHINFO_UNAVAIL,
-    UserUnknown = pam_ffi::PAM_USER_UNKNOWN,
-    MaxTries = pam_ffi::PAM_MAXTRIES,
-    NewAuthTokRequired = pam_ffi::PAM_NEW_AUTHTOK_REQD,
-    AccountExpired = pam_ffi::PAM_ACCT_EXPIRED,
-    SessionError = pam_ffi::PAM_SESSION_ERR,
-    CredentialsUnavailable = pam_ffi::PAM_CRED_UNAVAIL,
-    CredentialsExpired = pam_ffi::PAM_CRED_EXPIRED,
-    CredentialsError = pam_ffi::PAM_CRED_ERR,
-    NoModuleData = pam_ffi::PAM_NO_MODULE_DATA,
-    ConversationError = pam_ffi::PAM_CONV_ERR,
-    AuthTokError = pam_ffi::PAM_AUTHTOK_ERR,
-    AuthTokRecoveryError = pam_ffi::PAM_AUTHTOK_RECOVERY_ERR,
-    AuthTokLockBusy = pam_ffi::PAM_AUTHTOK_LOCK_BUSY,
-    AuthTokDisableAging = pam_ffi::PAM_AUTHTOK_DISABLE_AGING,
-    TryAgain = pam_ffi::PAM_TRY_AGAIN,
-    Ignore = pam_ffi::PAM_IGNORE,
-    Abort = pam_ffi::PAM_ABORT,
-    AuthTokExpired = pam_ffi::PAM_AUTHTOK_EXPIRED,
+    OpenError = pam_constants::PAM_OPEN_ERR,
+    SymbolError = pam_constants::PAM_SYMBOL_ERR,
+    ServiceError = pam_constants::PAM_SERVICE_ERR,
+    SystemError = pam_constants::PAM_SYSTEM_ERR,
+    BufferError = pam_constants::PAM_BUF_ERR,
+    PermissionDenied = pam_constants::PAM_PERM_DENIED,
+    AuthenticationError = pam_constants::PAM_AUTH_ERR,
+    CredentialsInsufficient = pam_constants::PAM_CRED_INSUFFICIENT,
+    AuthInfoUnavailable = pam_constants::PAM_AUTHINFO_UNAVAIL,
+    UserUnknown = pam_constants::PAM_USER_UNKNOWN,
+    MaxTries = pam_constants::PAM_MAXTRIES,
+    NewAuthTokRequired = pam_constants::PAM_NEW_AUTHTOK_REQD,
+    AccountExpired = pam_constants::PAM_ACCT_EXPIRED,
+    SessionError = pam_constants::PAM_SESSION_ERR,
+    CredentialsUnavailable = pam_constants::PAM_CRED_UNAVAIL,
+    CredentialsExpired = pam_constants::PAM_CRED_EXPIRED,
+    CredentialsError = pam_constants::PAM_CRED_ERR,
+    NoModuleData = pam_constants::PAM_NO_MODULE_DATA,
+    ConversationError = pam_constants::PAM_CONV_ERR,
+    AuthTokError = pam_constants::PAM_AUTHTOK_ERR,
+    AuthTokRecoveryError = pam_constants::PAM_AUTHTOK_RECOVERY_ERR,
+    AuthTokLockBusy = pam_constants::PAM_AUTHTOK_LOCK_BUSY,
+    AuthTokDisableAging = pam_constants::PAM_AUTHTOK_DISABLE_AGING,
+    TryAgain = pam_constants::PAM_TRY_AGAIN,
+    Ignore = pam_constants::PAM_IGNORE,
+    Abort = pam_constants::PAM_ABORT,
+    AuthTokExpired = pam_constants::PAM_AUTHTOK_EXPIRED,
     #[cfg(feature = "basic-ext")]
-    ModuleUnknown = pam_ffi::PAM_MODULE_UNKNOWN,
+    ModuleUnknown = pam_constants::PAM_MODULE_UNKNOWN,
     #[cfg(feature = "basic-ext")]
-    BadItem = pam_ffi::PAM_BAD_ITEM,
+    BadItem = pam_constants::PAM_BAD_ITEM,
     #[cfg(feature = "linux-pam-ext")]
-    ConversationAgain = pam_ffi::PAM_CONV_AGAIN,
+    ConversationAgain = pam_constants::PAM_CONV_AGAIN,
     #[cfg(feature = "linux-pam-ext")]
-    Incomplete = pam_ffi::PAM_INCOMPLETE,
+    Incomplete = pam_constants::PAM_INCOMPLETE,
 }
 
 /// A PAM-specific Result type with an [ErrorCode] error.
@@ -235,12 +232,12 @@
     fn test_enums() {
         assert_eq!(Ok(()), ErrorCode::result_from(0));
         assert_eq!(
-            pam_ffi::PAM_SESSION_ERR as i32,
+            pam_constants::PAM_SESSION_ERR as i32,
             ErrorCode::result_to_c::<()>(Err(ErrorCode::SessionError))
         );
         assert_eq!(
             Err(ErrorCode::Abort),
-            ErrorCode::result_from(pam_ffi::PAM_ABORT as i32)
+            ErrorCode::result_from(pam_constants::PAM_ABORT as i32)
         );
         assert_eq!(Err(ErrorCode::SystemError), ErrorCode::result_from(423));
     }