diff libpam-sys/src/constants.rs @ 106:49d9e2b5c189

An irresponsible mix of implementing libpam-sys and other stuff.
author Paul Fisher <paul@pfish.zone>
date Thu, 26 Jun 2025 22:41:28 -0400
parents
children e97534be35e3
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpam-sys/src/constants.rs	Thu Jun 26 22:41:28 2025 -0400
@@ -0,0 +1,241 @@
+//! All the constants.
+#![allow(dead_code)]
+
+/// 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: u32 = $value;)+
+            );
+        };
+        (@meta $m:tt $($i:item)+) => { define!(@expand $($m $i)+); };
+        (@expand $({ $(#[$m:meta])* } $i:item)+) => {$($(#[$m])* $i)+};
+    }
+
+#[cfg(feature = "use-system-headers")]
+pub use system_headers::*;
+
+#[cfg(not(feature = "use-system-headers"))]
+pub use export::*;
+
+mod export {
+    // There are a few truly universal constants.
+    // They are defined here directly.
+    pub const PAM_SUCCESS: u32 = 0;
+
+    define!(
+        /// An item type.
+        PAM_SERVICE = 1;
+        PAM_USER = 2;
+        PAM_TTY = 3;
+        PAM_RHOST = 4;
+        PAM_CONV = 5;
+        PAM_AUTHTOK = 6;
+        PAM_OLDAUTHTOK = 7;
+        PAM_RUSER = 8;
+    );
+
+    define!(
+        /// A message style.
+        PAM_PROMPT_ECHO_OFF = 1;
+        PAM_PROMPT_ECHO_ON = 2;
+        PAM_ERROR_MSG = 3;
+        PAM_TEXT_INFO = 4;
+    );
+
+    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 = "linux-pam")]
+    pub use super::linux_pam::*;
+
+    #[cfg(not(pam_impl = "linux-pam"))]
+    pub use super::shared::*;
+
+    #[cfg(pam_impl = "illumos")]
+    pub use super::illumos::*;
+
+    #[cfg(pam_impl = "openpam")]
+    pub use super::openpam::*;
+}
+
+/// Constants extracted from PAM header files.
+mod system_headers {
+    include!(concat!(env!("OUT_DIR"), "/constants.rs"));
+}
+
+/// Constants used by Linux-PAM.
+mod linux_pam {
+    define!(
+        /// An error code.
+        PAM_OPEN_ERR = 1;
+        PAM_SYMBOL_ERR = 2;
+        PAM_SERVICE_ERR = 3;
+        PAM_SYSTEM_ERR = 4;
+        PAM_BUF_ERR = 5;
+        PAM_PERM_DENIED = 6;
+        PAM_AUTH_ERR = 7;
+        PAM_CRED_INSUFFICIENT = 8;
+        PAM_AUTHINFO_UNAVAIL = 9;
+        PAM_USER_UNKNOWN = 10;
+        PAM_MAXTRIES = 11;
+        PAM_NEW_AUTHTOK_REQD = 12;
+        PAM_ACCT_EXPIRED = 13;
+        PAM_SESSION_ERR = 14;
+        PAM_CRED_UNAVAIL = 15;
+        PAM_CRED_EXPIRED = 16;
+        PAM_CRED_ERR = 17;
+        PAM_NO_MODULE_DATA = 18;
+        PAM_CONV_ERR = 19;
+        PAM_AUTHTOK_ERR = 20;
+        PAM_AUTHTOK_RECOVERY_ERR = 21;
+        PAM_AUTHTOK_LOCK_BUSY = 22;
+        PAM_AUTHTOK_DISABLE_AGING = 23;
+        PAM_TRY_AGAIN = 24;
+        PAM_IGNORE = 25;
+        PAM_ABORT = 26;
+        PAM_AUTHTOK_EXPIRED = 27;
+        PAM_MODULE_UNKNOWN = 28;
+        PAM_BAD_ITEM = 29;
+        PAM_CONV_AGAIN = 30;
+        PAM_INCOMPLETE = 31;
+        _PAM_RETURN_VALUES = 32;
+    );
+
+    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_CHANGE_EXPIRED_AUTHTOK = 0x0020;
+    );
+
+    define!(
+        PAM_USER_PROMPT = 9;
+        PAM_FAIL_DELAY = 10;
+        PAM_XDISPLAY = 11;
+        PAM_XAUTHDATA = 12;
+        PAM_AUTHTOKTYPE = 13;
+    );
+
+    /// To suppress messages in the item cleanup function.
+    pub const PAM_DATA_SILENT: u32 = 0x40000000;
+
+    // Message styles
+    define!(
+        /// A message style.
+        PAM_RADIO_TYPE = 5;
+        PAM_BINARY_PROMPT = 7;
+    );
+}
+
+/// Constants shared between Illumos and OpenPAM.
+mod shared {
+    define!(
+        /// An error code.
+        PAM_OPEN_ERR = 1;
+        PAM_SYMBOL_ERR = 2;
+        PAM_SERVICE_ERR = 3;
+        PAM_SYSTEM_ERR = 4;
+        PAM_BUF_ERR = 5;
+        PAM_CONV_ERR = 6;
+        PAM_PERM_DENIED = 7;
+        PAM_MAXTRIES = 8;
+        PAM_AUTH_ERR = 9;
+        PAM_NEW_AUTHTOK_REQD = 10;
+        PAM_CRED_INSUFFICIENT = 11;
+        PAM_AUTHINFO_UNAVAIL = 12;
+        PAM_USER_UNKNOWN = 13;
+        PAM_CRED_UNAVAIL = 14;
+        PAM_CRED_EXPIRED = 15;
+        PAM_CRED_ERR = 16;
+        PAM_ACCT_EXPIRED = 17;
+        PAM_AUTHTOK_EXPIRED = 18;
+        PAM_SESSION_ERR = 19;
+        PAM_AUTHTOK_ERR = 20;
+        PAM_AUTHTOK_RECOVERY_ERR = 21;
+        PAM_AUTHTOK_LOCK_BUSY = 22;
+        PAM_AUTHTOK_DISABLE_AGING = 23;
+        PAM_NO_MODULE_DATA = 24;
+        PAM_IGNORE = 25;
+        PAM_ABORT = 26;
+        PAM_TRY_AGAIN = 27;
+    );
+
+    define!(
+        /// An item type.
+        PAM_USER_PROMPT = 9;
+        PAM_REPOSITORY = 10;
+    );
+
+    /// A general flag for PAM operations.
+    pub const PAM_SILENT: u32 = 0x80000000;
+
+    /// The password must be non-null.
+    pub const PAM_DISALLOW_NULL_AUTHTOK: u32 = 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;
+    );
+}
+
+/// Constants exclusive to Illumos.
+mod illumos {
+    /// The total number of PAM error codes.
+    pub const PAM_TOTAL_ERRNUM: u32 = 28;
+
+    define!(
+        /// An item type.
+        PAM_RESOURCE = 11;
+        PAM_AUSER = 12;
+    );
+
+    /// A flag for `pam_chauthtok`.
+    pub const PAM_NO_AUTHTOK_CHECK: u32 = 0b1000;
+}
+
+/// Constants exclusive to OpenPAM.
+mod openpam {
+    define!(
+        /// An error code.
+        PAM_MODULE_UNKNOWN = 28;
+        PAM_DOMAIN_UNKNOWN = 29;
+        PAM_BAD_HANDLE = 30;
+        PAM_BAD_ITEM = 31;
+        PAM_BAD_FEATURE = 32;
+        PAM_BAD_CONSTANT = 33;
+    );
+    /// The total number of PAM error codes.
+    pub const PAM_NUM_ERRORS: i32 = 34;
+
+    define!(
+        /// An item type.
+        PAM_AUTHTOK_PROMPT = 11;
+        PAM_OLDAUTHTOK_PROMPT = 12;
+        PAM_HOST = 13;
+    );
+    /// The total number of PAM items.
+    pub const PAM_NUM_ITEMS: u32 = 14;
+}
+
+#[cfg(test)]
+mod test {}