diff 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 diff
--- a/libpam-sys/src/constants.rs	Sun Jun 29 02:21:26 2025 -0400
+++ b/libpam-sys/src/constants.rs	Sun Jun 29 03:11:33 2025 -0400
@@ -10,35 +10,55 @@
     ($(#[$attr:meta])* $($name:ident = $value:expr);+$(;)?) => {
         define!(
             @meta { $(#[$attr])* }
-            $(pub const $name: u32 = $value;)+
+            $(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: u32 = 0;
+pub const PAM_SUCCESS: i32 = 0;
 
-define!(
+c_enum!(
     /// 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;
+    PAM_SERVICE = 1,
+    PAM_USER,
+    PAM_TTY,
+    PAM_RHOST,
+    PAM_CONV,
+    PAM_AUTHTOK,
+    PAM_OLDAUTHTOK,
+    PAM_RUSER,
 );
 
-define!(
+c_enum!(
     /// A message style.
-    PAM_PROMPT_ECHO_OFF = 1;
-    PAM_PROMPT_ECHO_ON = 2;
-    PAM_ERROR_MSG = 3;
-    PAM_TEXT_INFO = 4;
+    PAM_PROMPT_ECHO_OFF = 1,
+    PAM_PROMPT_ECHO_ON,
+    PAM_ERROR_MSG,
+    PAM_TEXT_INFO,
 );
 
 define!(
@@ -52,42 +72,43 @@
 pub use linux_pam::*;
 #[cfg_pam_impl("LinuxPam")]
 mod linux_pam {
-    define!(
+    c_enum!(
         /// 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_RECOVER_ERR = 21;
-        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;
+        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.
@@ -105,16 +126,16 @@
         PAM_DATA_REPLACE = 0x20000000;
     );
 
-    define!(
-        PAM_USER_PROMPT = 9;
-        PAM_FAIL_DELAY = 10;
-        PAM_XDISPLAY = 11;
-        PAM_XAUTHDATA = 12;
-        PAM_AUTHTOK_TYPE = 13;
+    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: u32 = 0x40000000;
+    pub const PAM_DATA_SILENT: i32 = 0x40000000;
 
     // Message styles
     define!(
@@ -128,35 +149,35 @@
 pub use openpam_sun::*;
 #[cfg_pam_impl(any("OpenPam", "OpenPamMinimal", "Sun"))]
 mod openpam_sun {
-    define!(
+    c_enum!(
         /// 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;
+        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!(
@@ -166,10 +187,10 @@
     );
 
     /// A general flag for PAM operations.
-    pub const PAM_SILENT: u32 = 0x80000000;
+    pub const PAM_SILENT: i32 = 0x80000000u32 as i32;
 
     /// The password must be non-null.
-    pub const PAM_DISALLOW_NULL_AUTHTOK: u32 = 0b1;
+    pub const PAM_DISALLOW_NULL_AUTHTOK: i32 = 0b1;
 
     define!(
         /// A flag for `pam_setcred`.
@@ -191,26 +212,46 @@
 pub use openpam::*;
 #[cfg_pam_impl("OpenPam")]
 mod openpam {
-    define!(
+    c_enum!(
         /// 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;
+        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;
 
-    define!(
+    c_enum!(
         /// An item type.
-        PAM_AUTHTOK_PROMPT = 11;
-        PAM_OLDAUTHTOK_PROMPT = 12;
-        PAM_HOST = 13;
+        PAM_AUTHTOK_PROMPT = 11,
+        PAM_OLDAUTHTOK_PROMPT,
+        PAM_HOST,
     );
     /// The total number of PAM items.
-    pub const PAM_NUM_ITEMS: u32 = 14;
+    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.
@@ -219,7 +260,7 @@
 #[cfg_pam_impl("Sun")]
 mod sun {
     /// The total number of PAM error codes.
-    pub const PAM_TOTAL_ERRNUM: u32 = 28;
+    pub const PAM_TOTAL_ERRNUM: i32 = 28;
 
     define!(
         /// An item type.
@@ -228,6 +269,5 @@
     );
 
     /// A flag for `pam_chauthtok`.
-    pub const PAM_NO_AUTHTOK_CHECK: u32 = 0b1000;
+    pub const PAM_NO_AUTHTOK_CHECK: i32 = 0b1000;
 }
-