Mercurial > crates > nonstick
view libpam-sys/src/constants.rs @ 113:178310336596
Fix up more constants, make things i32 rather than u32.
author | Paul Fisher <paul@pfish.zone> |
---|---|
date | Sun, 29 Jun 2025 03:11:33 -0400 |
parents | 82995b4dccee |
children |
line wrap: on
line source
//! All the constants. //! //! These constants are tested on a per-platform basis by `libpam-sys-test`'s //! `test_constants.rs`. use libpam_sys_impls::cfg_pam_impl; /// Macro to make defining a bunch of constants way easier. macro_rules! define { ($(#[$attr:meta])* $($name:ident = $value:expr);+$(;)?) => { define!( @meta { $(#[$attr])* } $(pub const $name: i32 = $value;)+ ); }; (@meta $m:tt $($i:item)+) => { define!(@expand $($m $i)+); }; (@expand $({ $(#[$m:meta])* } $i:item)+) => {$($(#[$m])* $i)+}; } /// Macro to make defining C-style enums way easier. macro_rules! c_enum { ($(#[$attr:meta])* $($name:ident $(= $value:expr)?,)*) => { c_enum!( (0) $(#[$attr])* $($name $(= $value)?,)* ); }; (($n:expr) $(#[$attr:meta])* $name:ident, $($rest:ident $(= $rv:expr)?,)*) => { $(#[$attr])* pub const $name: i32 = $n; c_enum!(($n + 1) $(#[$attr])* $($rest $(= $rv)?,)*); }; (($n:expr) $(#[$attr:meta])* $name:ident = $value:expr, $($rest:ident $(= $rv:expr)?,)*) => { $(#[$attr])* pub const $name: i32 = $value; c_enum!(($value + 1) $(#[$attr])* $($rest $(= $rv)?,)*); }; (($n:expr) $(#[$attr:meta])*) => {}; } // There are a few truly universal constants. // They are defined here directly. pub const PAM_SUCCESS: i32 = 0; c_enum!( /// An item type. PAM_SERVICE = 1, PAM_USER, PAM_TTY, PAM_RHOST, PAM_CONV, PAM_AUTHTOK, PAM_OLDAUTHTOK, PAM_RUSER, ); c_enum!( /// A message style. PAM_PROMPT_ECHO_OFF = 1, PAM_PROMPT_ECHO_ON, PAM_ERROR_MSG, PAM_TEXT_INFO, ); define!( /// Maximum size of PAM conversation elements (suggested). PAM_MAX_NUM_MSG = 32; PAM_MAX_MSG_SIZE = 512; PAM_MAX_RESP_SIZE = 512; ); #[cfg_pam_impl("LinuxPam")] pub use linux_pam::*; #[cfg_pam_impl("LinuxPam")] mod linux_pam { c_enum!( /// An error code. PAM_OPEN_ERR = 1, PAM_SYMBOL_ERR, PAM_SERVICE_ERR, PAM_SYSTEM_ERR, PAM_BUF_ERR, PAM_PERM_DENIED, PAM_AUTH_ERR, PAM_CRED_INSUFFICIENT, PAM_AUTHINFO_UNAVAIL, PAM_USER_UNKNOWN, PAM_MAXTRIES, PAM_NEW_AUTHTOK_REQD, PAM_ACCT_EXPIRED, PAM_SESSION_ERR, PAM_CRED_UNAVAIL, PAM_CRED_EXPIRED, PAM_CRED_ERR, PAM_NO_MODULE_DATA, PAM_CONV_ERR, PAM_AUTHTOK_ERR, PAM_AUTHTOK_RECOVERY_ERR, PAM_AUTHTOK_LOCK_BUSY, PAM_AUTHTOK_DISABLE_AGING, PAM_TRY_AGAIN, PAM_IGNORE, PAM_ABORT, PAM_AUTHTOK_EXPIRED, PAM_MODULE_UNKNOWN, PAM_BAD_ITEM, PAM_CONV_AGAIN, PAM_INCOMPLETE, _PAM_RETURN_VALUES, ); /// An error code. pub const PAM_AUTHTOK_RECOVER_ERR: i32 = 21; define!( /// A flag value. PAM_SILENT = 0x8000; PAM_DISALLOW_NULL_AUTHTOK = 0x0001; PAM_ESTABLISH_CRED = 0x0002; PAM_DELETE_CRED = 0x0004; PAM_REINITIALIZE_CRED = 0x0008; PAM_REFRESH_CRED = 0x0010; PAM_CHANGE_EXPIRED_AUTHTOK = 0x0020; PAM_PRELIM_CHECK = 0x4000; PAM_UPDATE_AUTHTOK = 0x2000; PAM_DATA_REPLACE = 0x20000000; ); c_enum!( PAM_USER_PROMPT = 9, PAM_FAIL_DELAY, PAM_XDISPLAY, PAM_XAUTHDATA, PAM_AUTHTOK_TYPE, ); /// To suppress messages in the item cleanup function. pub const PAM_DATA_SILENT: i32 = 0x40000000; // Message styles define!( /// A message style. PAM_RADIO_TYPE = 5; PAM_BINARY_PROMPT = 7; ); } #[cfg_pam_impl(any("OpenPam", "OpenPamMinimal", "Sun"))] pub use openpam_sun::*; #[cfg_pam_impl(any("OpenPam", "OpenPamMinimal", "Sun"))] mod openpam_sun { c_enum!( /// An error code. PAM_OPEN_ERR = 1, PAM_SYMBOL_ERR, PAM_SERVICE_ERR, PAM_SYSTEM_ERR, PAM_BUF_ERR, PAM_CONV_ERR, PAM_PERM_DENIED, PAM_MAXTRIES, PAM_AUTH_ERR, PAM_NEW_AUTHTOK_REQD, PAM_CRED_INSUFFICIENT, PAM_AUTHINFO_UNAVAIL, PAM_USER_UNKNOWN, PAM_CRED_UNAVAIL, PAM_CRED_EXPIRED, PAM_CRED_ERR, PAM_ACCT_EXPIRED, PAM_AUTHTOK_EXPIRED, PAM_SESSION_ERR, PAM_AUTHTOK_ERR, PAM_AUTHTOK_RECOVERY_ERR, PAM_AUTHTOK_LOCK_BUSY, PAM_AUTHTOK_DISABLE_AGING, PAM_NO_MODULE_DATA, PAM_IGNORE, PAM_ABORT, PAM_TRY_AGAIN, ); define!( /// An item type. PAM_USER_PROMPT = 9; PAM_REPOSITORY = 10; ); /// A general flag for PAM operations. pub const PAM_SILENT: i32 = 0x80000000u32 as i32; /// The password must be non-null. pub const PAM_DISALLOW_NULL_AUTHTOK: i32 = 0b1; define!( /// A flag for `pam_setcred`. PAM_ESTABLISH_CRED = 0b0001; PAM_DELETE_CRED = 0b0010; PAM_REINITIALIZE_CRED = 0b0100; PAM_REFRESH_CRED = 0b1000; ); define!( /// A flag for `pam_chauthtok`. PAM_PRELIM_CHECK = 0b0001; PAM_UPDATE_AUTHTOK = 0b0010; PAM_CHANGE_EXPIRED_AUTHTOK = 0b0100; ); } #[cfg_pam_impl("OpenPam")] pub use openpam::*; #[cfg_pam_impl("OpenPam")] mod openpam { c_enum!( /// An error code. PAM_MODULE_UNKNOWN = 28, PAM_DOMAIN_UNKNOWN, PAM_BAD_HANDLE, PAM_BAD_ITEM, PAM_BAD_FEATURE, PAM_BAD_CONSTANT, ); /// The total number of PAM error codes. pub const PAM_NUM_ERRORS: i32 = 34; c_enum!( /// An item type. PAM_AUTHTOK_PROMPT = 11, PAM_OLDAUTHTOK_PROMPT, PAM_HOST, ); /// The total number of PAM items. pub const PAM_NUM_ITEMS: i32 = 14; c_enum!( /// An optional OpenPAM feature. OPENPAM_RESTRICT_SERVICE_NAME, OPENPAM_VERIFY_POLICY_FILE, OPENPAM_RESTRICT_MODULE_NAME, OPENPAM_VERIFY_MODULE_FILE, OPENPAM_FALLBACK_TO_OTHER, ); /// The number of optional OpenPAM features. pub const OPENPAM_NUM_FEATURES: i32 = 5; c_enum!( /// Log level. PAM_LOG_LIBDEBUG = -1, PAM_LOG_DEBUG, PAM_LOG_VERBOSE, PAM_LOG_NOTICE, PAM_LOG_ERROR, ); } /// Constants exclusive to Illumos. #[cfg_pam_impl("Sun")] pub use sun::*; #[cfg_pam_impl("Sun")] mod sun { /// The total number of PAM error codes. pub const PAM_TOTAL_ERRNUM: i32 = 28; define!( /// An item type. PAM_RESOURCE = 11; PAM_AUSER = 12; ); /// A flag for `pam_chauthtok`. pub const PAM_NO_AUTHTOK_CHECK: i32 = 0b1000; }