diff --git a/Makefile b/Makefile index 23f153d2c..3f5703468 100644 --- a/Makefile +++ b/Makefile @@ -1,18 +1,21 @@ PAM_SRC_DIR = src/pam -BINDGEN_CMD = bindgen --allowlist-function '^pam_.*$$' --allowlist-var '^PAM_.*$$' --opaque-type pam_handle_t --ctypes-prefix libc +BINDGEN_CMD = bindgen --merge-extern-blocks --allowlist-function '^pam_.*$$' --allowlist-var '^PAM_.*$$' --opaque-type pam_handle_t --ctypes-prefix libc .PHONY: all clean pam-sys pam-sys-diff pam-sys-diff: $(PAM_SRC_DIR)/wrapper.h - @$(BINDGEN_CMD) $< | diff --color=auto $(PAM_SRC_DIR)/sys.rs - || (echo run \'make -B pam-sys\' to apply these changes && false) + @$(BINDGEN_CMD) $< -- --target=x86_64-pc-linux-gnu | diff --color=auto $(PAM_SRC_DIR)/sys/x86_64_linux.rs - || (echo run \'make -B pam-sys\' to apply these changes && false) @echo $(PAM_SRC_DIR)/sys.rs does not need to be re-generated # use 'make pam-sys' to re-generate the sys.rs file -pam-sys: $(PAM_SRC_DIR)/sys.rs +pam-sys: $(PAM_SRC_DIR)/sys/x86_64_linux.rs $(PAM_SRC_DIR)/sys/i386_linux.rs -$(PAM_SRC_DIR)/sys.rs: $(PAM_SRC_DIR)/wrapper.h - $(BINDGEN_CMD) $< --output $@ +$(PAM_SRC_DIR)/sys/x86_64_linux.rs: $(PAM_SRC_DIR)/wrapper.h + $(BINDGEN_CMD) $< --output $@ -- --target=x86_64-pc-linux-gnu + +$(PAM_SRC_DIR)/sys/i386_linux.rs: $(PAM_SRC_DIR)/wrapper.h + $(BINDGEN_CMD) $< --output $@ -- --target=i386-pc-linux-gnu clean: - rm $(PAM_SRC_DIR)/sys.rs + rm $(PAM_SRC_DIR)/sys/x86_64_linux.rs diff --git a/src/pam/sys/i386_linux.rs b/src/pam/sys/i386_linux.rs new file mode 100644 index 000000000..f4679163a --- /dev/null +++ b/src/pam/sys/i386_linux.rs @@ -0,0 +1,801 @@ +/* automatically generated by rust-bindgen 0.69.1 */ + +pub const PAM_SUCCESS: u32 = 0; +pub const PAM_OPEN_ERR: u32 = 1; +pub const PAM_SYMBOL_ERR: u32 = 2; +pub const PAM_SERVICE_ERR: u32 = 3; +pub const PAM_SYSTEM_ERR: u32 = 4; +pub const PAM_BUF_ERR: u32 = 5; +pub const PAM_PERM_DENIED: u32 = 6; +pub const PAM_AUTH_ERR: u32 = 7; +pub const PAM_CRED_INSUFFICIENT: u32 = 8; +pub const PAM_AUTHINFO_UNAVAIL: u32 = 9; +pub const PAM_USER_UNKNOWN: u32 = 10; +pub const PAM_MAXTRIES: u32 = 11; +pub const PAM_NEW_AUTHTOK_REQD: u32 = 12; +pub const PAM_ACCT_EXPIRED: u32 = 13; +pub const PAM_SESSION_ERR: u32 = 14; +pub const PAM_CRED_UNAVAIL: u32 = 15; +pub const PAM_CRED_EXPIRED: u32 = 16; +pub const PAM_CRED_ERR: u32 = 17; +pub const PAM_NO_MODULE_DATA: u32 = 18; +pub const PAM_CONV_ERR: u32 = 19; +pub const PAM_AUTHTOK_ERR: u32 = 20; +pub const PAM_AUTHTOK_RECOVERY_ERR: u32 = 21; +pub const PAM_AUTHTOK_LOCK_BUSY: u32 = 22; +pub const PAM_AUTHTOK_DISABLE_AGING: u32 = 23; +pub const PAM_TRY_AGAIN: u32 = 24; +pub const PAM_IGNORE: u32 = 25; +pub const PAM_ABORT: u32 = 26; +pub const PAM_AUTHTOK_EXPIRED: u32 = 27; +pub const PAM_MODULE_UNKNOWN: u32 = 28; +pub const PAM_BAD_ITEM: u32 = 29; +pub const PAM_CONV_AGAIN: u32 = 30; +pub const PAM_INCOMPLETE: u32 = 31; +pub const PAM_SILENT: u32 = 32768; +pub const PAM_DISALLOW_NULL_AUTHTOK: u32 = 1; +pub const PAM_ESTABLISH_CRED: u32 = 2; +pub const PAM_DELETE_CRED: u32 = 4; +pub const PAM_REINITIALIZE_CRED: u32 = 8; +pub const PAM_REFRESH_CRED: u32 = 16; +pub const PAM_CHANGE_EXPIRED_AUTHTOK: u32 = 32; +pub const PAM_SERVICE: u32 = 1; +pub const PAM_USER: u32 = 2; +pub const PAM_TTY: u32 = 3; +pub const PAM_RHOST: u32 = 4; +pub const PAM_CONV: u32 = 5; +pub const PAM_AUTHTOK: u32 = 6; +pub const PAM_OLDAUTHTOK: u32 = 7; +pub const PAM_RUSER: u32 = 8; +pub const PAM_USER_PROMPT: u32 = 9; +pub const PAM_FAIL_DELAY: u32 = 10; +pub const PAM_XDISPLAY: u32 = 11; +pub const PAM_XAUTHDATA: u32 = 12; +pub const PAM_AUTHTOK_TYPE: u32 = 13; +pub const PAM_DATA_SILENT: u32 = 1073741824; +pub const PAM_PROMPT_ECHO_OFF: u32 = 1; +pub const PAM_PROMPT_ECHO_ON: u32 = 2; +pub const PAM_ERROR_MSG: u32 = 3; +pub const PAM_TEXT_INFO: u32 = 4; +pub const PAM_RADIO_TYPE: u32 = 5; +pub const PAM_BINARY_PROMPT: u32 = 7; +pub const PAM_MAX_NUM_MSG: u32 = 32; +pub const PAM_MAX_MSG_SIZE: u32 = 512; +pub const PAM_MAX_RESP_SIZE: u32 = 512; +pub const PAM_AUTHTOK_RECOVER_ERR: u32 = 21; +pub const PAM_BP_MAX_LENGTH: u32 = 131072; +pub const PAM_BPC_FALSE: u32 = 0; +pub const PAM_BPC_TRUE: u32 = 1; +pub const PAM_BPC_OK: u32 = 1; +pub const PAM_BPC_SELECT: u32 = 2; +pub const PAM_BPC_DONE: u32 = 3; +pub const PAM_BPC_FAIL: u32 = 4; +pub const PAM_BPC_GETENV: u32 = 65; +pub const PAM_BPC_PUTENV: u32 = 66; +pub const PAM_BPC_TEXT: u32 = 67; +pub const PAM_BPC_ERROR: u32 = 68; +pub const PAM_BPC_PROMPT: u32 = 69; +pub const PAM_BPC_PASS: u32 = 70; +pub const PAM_PRELIM_CHECK: u32 = 16384; +pub const PAM_UPDATE_AUTHTOK: u32 = 8192; +pub const PAM_DATA_REPLACE: u32 = 536870912; +pub const PAM_MODUTIL_NGROUPS: u32 = 64; +pub type pam_handle_t = u8; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct pam_message { + pub msg_style: libc::c_int, + pub msg: *const libc::c_char, +} +#[test] +fn bindgen_test_layout_pam_message() { + const UNINIT: ::std::mem::MaybeUninit = ::std::mem::MaybeUninit::uninit(); + let ptr = UNINIT.as_ptr(); + assert_eq!( + ::std::mem::size_of::(), + 8usize, + concat!("Size of: ", stringify!(pam_message)) + ); + assert_eq!( + ::std::mem::align_of::(), + 4usize, + concat!("Alignment of ", stringify!(pam_message)) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).msg_style) as usize - ptr as usize }, + 0usize, + concat!( + "Offset of field: ", + stringify!(pam_message), + "::", + stringify!(msg_style) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).msg) as usize - ptr as usize }, + 4usize, + concat!( + "Offset of field: ", + stringify!(pam_message), + "::", + stringify!(msg) + ) + ); +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct pam_response { + pub resp: *mut libc::c_char, + pub resp_retcode: libc::c_int, +} +#[test] +fn bindgen_test_layout_pam_response() { + const UNINIT: ::std::mem::MaybeUninit = ::std::mem::MaybeUninit::uninit(); + let ptr = UNINIT.as_ptr(); + assert_eq!( + ::std::mem::size_of::(), + 8usize, + concat!("Size of: ", stringify!(pam_response)) + ); + assert_eq!( + ::std::mem::align_of::(), + 4usize, + concat!("Alignment of ", stringify!(pam_response)) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).resp) as usize - ptr as usize }, + 0usize, + concat!( + "Offset of field: ", + stringify!(pam_response), + "::", + stringify!(resp) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).resp_retcode) as usize - ptr as usize }, + 4usize, + concat!( + "Offset of field: ", + stringify!(pam_response), + "::", + stringify!(resp_retcode) + ) + ); +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct pam_conv { + pub conv: ::std::option::Option< + unsafe extern "C" fn( + num_msg: libc::c_int, + msg: *mut *const pam_message, + resp: *mut *mut pam_response, + appdata_ptr: *mut libc::c_void, + ) -> libc::c_int, + >, + pub appdata_ptr: *mut libc::c_void, +} +#[test] +fn bindgen_test_layout_pam_conv() { + const UNINIT: ::std::mem::MaybeUninit = ::std::mem::MaybeUninit::uninit(); + let ptr = UNINIT.as_ptr(); + assert_eq!( + ::std::mem::size_of::(), + 8usize, + concat!("Size of: ", stringify!(pam_conv)) + ); + assert_eq!( + ::std::mem::align_of::(), + 4usize, + concat!("Alignment of ", stringify!(pam_conv)) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).conv) as usize - ptr as usize }, + 0usize, + concat!( + "Offset of field: ", + stringify!(pam_conv), + "::", + stringify!(conv) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).appdata_ptr) as usize - ptr as usize }, + 4usize, + concat!( + "Offset of field: ", + stringify!(pam_conv), + "::", + stringify!(appdata_ptr) + ) + ); +} +pub type __uid_t = libc::c_uint; +pub type __gid_t = libc::c_uint; +pub type gid_t = __gid_t; +pub type uid_t = __uid_t; +pub type __gnuc_va_list = __builtin_va_list; +pub type va_list = __gnuc_va_list; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct passwd { + pub pw_name: *mut libc::c_char, + pub pw_passwd: *mut libc::c_char, + pub pw_uid: __uid_t, + pub pw_gid: __gid_t, + pub pw_gecos: *mut libc::c_char, + pub pw_dir: *mut libc::c_char, + pub pw_shell: *mut libc::c_char, +} +#[test] +fn bindgen_test_layout_passwd() { + const UNINIT: ::std::mem::MaybeUninit = ::std::mem::MaybeUninit::uninit(); + let ptr = UNINIT.as_ptr(); + assert_eq!( + ::std::mem::size_of::(), + 28usize, + concat!("Size of: ", stringify!(passwd)) + ); + assert_eq!( + ::std::mem::align_of::(), + 4usize, + concat!("Alignment of ", stringify!(passwd)) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).pw_name) as usize - ptr as usize }, + 0usize, + concat!( + "Offset of field: ", + stringify!(passwd), + "::", + stringify!(pw_name) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).pw_passwd) as usize - ptr as usize }, + 4usize, + concat!( + "Offset of field: ", + stringify!(passwd), + "::", + stringify!(pw_passwd) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).pw_uid) as usize - ptr as usize }, + 8usize, + concat!( + "Offset of field: ", + stringify!(passwd), + "::", + stringify!(pw_uid) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).pw_gid) as usize - ptr as usize }, + 12usize, + concat!( + "Offset of field: ", + stringify!(passwd), + "::", + stringify!(pw_gid) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).pw_gecos) as usize - ptr as usize }, + 16usize, + concat!( + "Offset of field: ", + stringify!(passwd), + "::", + stringify!(pw_gecos) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).pw_dir) as usize - ptr as usize }, + 20usize, + concat!( + "Offset of field: ", + stringify!(passwd), + "::", + stringify!(pw_dir) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).pw_shell) as usize - ptr as usize }, + 24usize, + concat!( + "Offset of field: ", + stringify!(passwd), + "::", + stringify!(pw_shell) + ) + ); +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct group { + pub gr_name: *mut libc::c_char, + pub gr_passwd: *mut libc::c_char, + pub gr_gid: __gid_t, + pub gr_mem: *mut *mut libc::c_char, +} +#[test] +fn bindgen_test_layout_group() { + const UNINIT: ::std::mem::MaybeUninit = ::std::mem::MaybeUninit::uninit(); + let ptr = UNINIT.as_ptr(); + assert_eq!( + ::std::mem::size_of::(), + 16usize, + concat!("Size of: ", stringify!(group)) + ); + assert_eq!( + ::std::mem::align_of::(), + 4usize, + concat!("Alignment of ", stringify!(group)) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).gr_name) as usize - ptr as usize }, + 0usize, + concat!( + "Offset of field: ", + stringify!(group), + "::", + stringify!(gr_name) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).gr_passwd) as usize - ptr as usize }, + 4usize, + concat!( + "Offset of field: ", + stringify!(group), + "::", + stringify!(gr_passwd) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).gr_gid) as usize - ptr as usize }, + 8usize, + concat!( + "Offset of field: ", + stringify!(group), + "::", + stringify!(gr_gid) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).gr_mem) as usize - ptr as usize }, + 12usize, + concat!( + "Offset of field: ", + stringify!(group), + "::", + stringify!(gr_mem) + ) + ); +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct spwd { + pub sp_namp: *mut libc::c_char, + pub sp_pwdp: *mut libc::c_char, + pub sp_lstchg: libc::c_long, + pub sp_min: libc::c_long, + pub sp_max: libc::c_long, + pub sp_warn: libc::c_long, + pub sp_inact: libc::c_long, + pub sp_expire: libc::c_long, + pub sp_flag: libc::c_ulong, +} +#[test] +fn bindgen_test_layout_spwd() { + const UNINIT: ::std::mem::MaybeUninit = ::std::mem::MaybeUninit::uninit(); + let ptr = UNINIT.as_ptr(); + assert_eq!( + ::std::mem::size_of::(), + 36usize, + concat!("Size of: ", stringify!(spwd)) + ); + assert_eq!( + ::std::mem::align_of::(), + 4usize, + concat!("Alignment of ", stringify!(spwd)) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).sp_namp) as usize - ptr as usize }, + 0usize, + concat!( + "Offset of field: ", + stringify!(spwd), + "::", + stringify!(sp_namp) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).sp_pwdp) as usize - ptr as usize }, + 4usize, + concat!( + "Offset of field: ", + stringify!(spwd), + "::", + stringify!(sp_pwdp) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).sp_lstchg) as usize - ptr as usize }, + 8usize, + concat!( + "Offset of field: ", + stringify!(spwd), + "::", + stringify!(sp_lstchg) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).sp_min) as usize - ptr as usize }, + 12usize, + concat!( + "Offset of field: ", + stringify!(spwd), + "::", + stringify!(sp_min) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).sp_max) as usize - ptr as usize }, + 16usize, + concat!( + "Offset of field: ", + stringify!(spwd), + "::", + stringify!(sp_max) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).sp_warn) as usize - ptr as usize }, + 20usize, + concat!( + "Offset of field: ", + stringify!(spwd), + "::", + stringify!(sp_warn) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).sp_inact) as usize - ptr as usize }, + 24usize, + concat!( + "Offset of field: ", + stringify!(spwd), + "::", + stringify!(sp_inact) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).sp_expire) as usize - ptr as usize }, + 28usize, + concat!( + "Offset of field: ", + stringify!(spwd), + "::", + stringify!(sp_expire) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).sp_flag) as usize - ptr as usize }, + 32usize, + concat!( + "Offset of field: ", + stringify!(spwd), + "::", + stringify!(sp_flag) + ) + ); +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct pam_modutil_privs { + pub grplist: *mut gid_t, + pub number_of_groups: libc::c_int, + pub allocated: libc::c_int, + pub old_gid: gid_t, + pub old_uid: uid_t, + pub is_dropped: libc::c_int, +} +#[test] +fn bindgen_test_layout_pam_modutil_privs() { + const UNINIT: ::std::mem::MaybeUninit = ::std::mem::MaybeUninit::uninit(); + let ptr = UNINIT.as_ptr(); + assert_eq!( + ::std::mem::size_of::(), + 24usize, + concat!("Size of: ", stringify!(pam_modutil_privs)) + ); + assert_eq!( + ::std::mem::align_of::(), + 4usize, + concat!("Alignment of ", stringify!(pam_modutil_privs)) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).grplist) as usize - ptr as usize }, + 0usize, + concat!( + "Offset of field: ", + stringify!(pam_modutil_privs), + "::", + stringify!(grplist) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).number_of_groups) as usize - ptr as usize }, + 4usize, + concat!( + "Offset of field: ", + stringify!(pam_modutil_privs), + "::", + stringify!(number_of_groups) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).allocated) as usize - ptr as usize }, + 8usize, + concat!( + "Offset of field: ", + stringify!(pam_modutil_privs), + "::", + stringify!(allocated) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).old_gid) as usize - ptr as usize }, + 12usize, + concat!( + "Offset of field: ", + stringify!(pam_modutil_privs), + "::", + stringify!(old_gid) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).old_uid) as usize - ptr as usize }, + 16usize, + concat!( + "Offset of field: ", + stringify!(pam_modutil_privs), + "::", + stringify!(old_uid) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).is_dropped) as usize - ptr as usize }, + 20usize, + concat!( + "Offset of field: ", + stringify!(pam_modutil_privs), + "::", + stringify!(is_dropped) + ) + ); +} +pub const pam_modutil_redirect_fd_PAM_MODUTIL_IGNORE_FD: pam_modutil_redirect_fd = 0; +pub const pam_modutil_redirect_fd_PAM_MODUTIL_PIPE_FD: pam_modutil_redirect_fd = 1; +pub const pam_modutil_redirect_fd_PAM_MODUTIL_NULL_FD: pam_modutil_redirect_fd = 2; +pub type pam_modutil_redirect_fd = libc::c_uint; +pub type __builtin_va_list = *mut libc::c_char; +extern "C" { + pub fn pam_set_item( + pamh: *mut pam_handle_t, + item_type: libc::c_int, + item: *const libc::c_void, + ) -> libc::c_int; + pub fn pam_get_item( + pamh: *const pam_handle_t, + item_type: libc::c_int, + item: *mut *const libc::c_void, + ) -> libc::c_int; + pub fn pam_strerror(pamh: *mut pam_handle_t, errnum: libc::c_int) -> *const libc::c_char; + pub fn pam_putenv(pamh: *mut pam_handle_t, name_value: *const libc::c_char) -> libc::c_int; + pub fn pam_getenv(pamh: *mut pam_handle_t, name: *const libc::c_char) -> *const libc::c_char; + pub fn pam_getenvlist(pamh: *mut pam_handle_t) -> *mut *mut libc::c_char; + pub fn pam_fail_delay(pamh: *mut pam_handle_t, musec_delay: libc::c_uint) -> libc::c_int; + pub fn pam_start( + service_name: *const libc::c_char, + user: *const libc::c_char, + pam_conversation: *const pam_conv, + pamh: *mut *mut pam_handle_t, + ) -> libc::c_int; + pub fn pam_start_confdir( + service_name: *const libc::c_char, + user: *const libc::c_char, + pam_conversation: *const pam_conv, + confdir: *const libc::c_char, + pamh: *mut *mut pam_handle_t, + ) -> libc::c_int; + pub fn pam_end(pamh: *mut pam_handle_t, pam_status: libc::c_int) -> libc::c_int; + pub fn pam_authenticate(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; + pub fn pam_setcred(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; + pub fn pam_acct_mgmt(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; + pub fn pam_open_session(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; + pub fn pam_close_session(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; + pub fn pam_chauthtok(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; + pub fn pam_vsyslog( + pamh: *const pam_handle_t, + priority: libc::c_int, + fmt: *const libc::c_char, + args: va_list, + ); + pub fn pam_syslog( + pamh: *const pam_handle_t, + priority: libc::c_int, + fmt: *const libc::c_char, + ... + ); + pub fn pam_vprompt( + pamh: *mut pam_handle_t, + style: libc::c_int, + response: *mut *mut libc::c_char, + fmt: *const libc::c_char, + args: va_list, + ) -> libc::c_int; + pub fn pam_prompt( + pamh: *mut pam_handle_t, + style: libc::c_int, + response: *mut *mut libc::c_char, + fmt: *const libc::c_char, + ... + ) -> libc::c_int; + pub fn pam_get_authtok( + pamh: *mut pam_handle_t, + item: libc::c_int, + authtok: *mut *const libc::c_char, + prompt: *const libc::c_char, + ) -> libc::c_int; + pub fn pam_get_authtok_noverify( + pamh: *mut pam_handle_t, + authtok: *mut *const libc::c_char, + prompt: *const libc::c_char, + ) -> libc::c_int; + pub fn pam_get_authtok_verify( + pamh: *mut pam_handle_t, + authtok: *mut *const libc::c_char, + prompt: *const libc::c_char, + ) -> libc::c_int; + pub fn pam_misc_paste_env( + pamh: *mut pam_handle_t, + user_env: *const *const libc::c_char, + ) -> libc::c_int; + pub fn pam_misc_drop_env(env: *mut *mut libc::c_char) -> *mut *mut libc::c_char; + pub fn pam_misc_setenv( + pamh: *mut pam_handle_t, + name: *const libc::c_char, + value: *const libc::c_char, + readonly: libc::c_int, + ) -> libc::c_int; + pub fn pam_set_data( + pamh: *mut pam_handle_t, + module_data_name: *const libc::c_char, + data: *mut libc::c_void, + cleanup: ::std::option::Option< + unsafe extern "C" fn( + pamh: *mut pam_handle_t, + data: *mut libc::c_void, + error_status: libc::c_int, + ), + >, + ) -> libc::c_int; + pub fn pam_get_data( + pamh: *const pam_handle_t, + module_data_name: *const libc::c_char, + data: *mut *const libc::c_void, + ) -> libc::c_int; + pub fn pam_get_user( + pamh: *mut pam_handle_t, + user: *mut *const libc::c_char, + prompt: *const libc::c_char, + ) -> libc::c_int; + pub fn pam_sm_authenticate( + pamh: *mut pam_handle_t, + flags: libc::c_int, + argc: libc::c_int, + argv: *mut *const libc::c_char, + ) -> libc::c_int; + pub fn pam_sm_setcred( + pamh: *mut pam_handle_t, + flags: libc::c_int, + argc: libc::c_int, + argv: *mut *const libc::c_char, + ) -> libc::c_int; + pub fn pam_sm_acct_mgmt( + pamh: *mut pam_handle_t, + flags: libc::c_int, + argc: libc::c_int, + argv: *mut *const libc::c_char, + ) -> libc::c_int; + pub fn pam_sm_open_session( + pamh: *mut pam_handle_t, + flags: libc::c_int, + argc: libc::c_int, + argv: *mut *const libc::c_char, + ) -> libc::c_int; + pub fn pam_sm_close_session( + pamh: *mut pam_handle_t, + flags: libc::c_int, + argc: libc::c_int, + argv: *mut *const libc::c_char, + ) -> libc::c_int; + pub fn pam_sm_chauthtok( + pamh: *mut pam_handle_t, + flags: libc::c_int, + argc: libc::c_int, + argv: *mut *const libc::c_char, + ) -> libc::c_int; + pub fn pam_modutil_check_user_in_passwd( + pamh: *mut pam_handle_t, + user_name: *const libc::c_char, + file_name: *const libc::c_char, + ) -> libc::c_int; + pub fn pam_modutil_getpwnam(pamh: *mut pam_handle_t, user: *const libc::c_char) -> *mut passwd; + pub fn pam_modutil_getpwuid(pamh: *mut pam_handle_t, uid: uid_t) -> *mut passwd; + pub fn pam_modutil_getgrnam(pamh: *mut pam_handle_t, group: *const libc::c_char) -> *mut group; + pub fn pam_modutil_getgrgid(pamh: *mut pam_handle_t, gid: gid_t) -> *mut group; + pub fn pam_modutil_getspnam(pamh: *mut pam_handle_t, user: *const libc::c_char) -> *mut spwd; + pub fn pam_modutil_user_in_group_nam_nam( + pamh: *mut pam_handle_t, + user: *const libc::c_char, + group: *const libc::c_char, + ) -> libc::c_int; + pub fn pam_modutil_user_in_group_nam_gid( + pamh: *mut pam_handle_t, + user: *const libc::c_char, + group: gid_t, + ) -> libc::c_int; + pub fn pam_modutil_user_in_group_uid_nam( + pamh: *mut pam_handle_t, + user: uid_t, + group: *const libc::c_char, + ) -> libc::c_int; + pub fn pam_modutil_user_in_group_uid_gid( + pamh: *mut pam_handle_t, + user: uid_t, + group: gid_t, + ) -> libc::c_int; + pub fn pam_modutil_getlogin(pamh: *mut pam_handle_t) -> *const libc::c_char; + pub fn pam_modutil_read( + fd: libc::c_int, + buffer: *mut libc::c_char, + count: libc::c_int, + ) -> libc::c_int; + pub fn pam_modutil_write( + fd: libc::c_int, + buffer: *const libc::c_char, + count: libc::c_int, + ) -> libc::c_int; + pub fn pam_modutil_audit_write( + pamh: *mut pam_handle_t, + type_: libc::c_int, + message: *const libc::c_char, + retval: libc::c_int, + ) -> libc::c_int; + pub fn pam_modutil_drop_priv( + pamh: *mut pam_handle_t, + p: *mut pam_modutil_privs, + pw: *const passwd, + ) -> libc::c_int; + pub fn pam_modutil_regain_priv( + pamh: *mut pam_handle_t, + p: *mut pam_modutil_privs, + ) -> libc::c_int; + pub fn pam_modutil_sanitize_helper_fds( + pamh: *mut pam_handle_t, + redirect_stdin: pam_modutil_redirect_fd, + redirect_stdout: pam_modutil_redirect_fd, + redirect_stderr: pam_modutil_redirect_fd, + ) -> libc::c_int; + pub fn pam_modutil_search_key( + pamh: *mut pam_handle_t, + file_name: *const libc::c_char, + key: *const libc::c_char, + ) -> *mut libc::c_char; +} diff --git a/src/pam/sys/mod.rs b/src/pam/sys/mod.rs new file mode 100644 index 000000000..b2f8212db --- /dev/null +++ b/src/pam/sys/mod.rs @@ -0,0 +1,11 @@ +#[cfg_attr( + all(target_pointer_width = "64", target_os = "linux"), + path = "x86_64_linux.rs" +)] +#[cfg_attr( + all(target_pointer_width = "32", target_os = "linux"), + path = "i386_linux.rs" +)] +mod inner; + +pub use inner::*; diff --git a/src/pam/sys.rs b/src/pam/sys/x86_64_linux.rs similarity index 68% rename from src/pam/sys.rs rename to src/pam/sys/x86_64_linux.rs index f346a02ca..d52ec47d8 100644 --- a/src/pam/sys.rs +++ b/src/pam/sys/x86_64_linux.rs @@ -1,4 +1,4 @@ -/* automatically generated by rust-bindgen 0.66.1 */ +/* automatically generated by rust-bindgen 0.69.1 */ pub const PAM_SUCCESS: u32 = 0; pub const PAM_OPEN_ERR: u32 = 1; @@ -30,40 +30,57 @@ pub const PAM_ABORT: u32 = 26; pub const PAM_AUTHTOK_EXPIRED: u32 = 27; pub const PAM_MODULE_UNKNOWN: u32 = 28; pub const PAM_BAD_ITEM: u32 = 29; +pub const PAM_CONV_AGAIN: u32 = 30; +pub const PAM_INCOMPLETE: u32 = 31; pub const PAM_SILENT: u32 = 32768; pub const PAM_DISALLOW_NULL_AUTHTOK: u32 = 1; +pub const PAM_ESTABLISH_CRED: u32 = 2; +pub const PAM_DELETE_CRED: u32 = 4; pub const PAM_REINITIALIZE_CRED: u32 = 8; +pub const PAM_REFRESH_CRED: u32 = 16; pub const PAM_CHANGE_EXPIRED_AUTHTOK: u32 = 32; +pub const PAM_SERVICE: u32 = 1; pub const PAM_USER: u32 = 2; pub const PAM_TTY: u32 = 3; +pub const PAM_RHOST: u32 = 4; +pub const PAM_CONV: u32 = 5; +pub const PAM_AUTHTOK: u32 = 6; +pub const PAM_OLDAUTHTOK: u32 = 7; pub const PAM_RUSER: u32 = 8; +pub const PAM_USER_PROMPT: u32 = 9; +pub const PAM_FAIL_DELAY: u32 = 10; +pub const PAM_XDISPLAY: u32 = 11; +pub const PAM_XAUTHDATA: u32 = 12; +pub const PAM_AUTHTOK_TYPE: u32 = 13; pub const PAM_DATA_SILENT: u32 = 1073741824; pub const PAM_PROMPT_ECHO_OFF: u32 = 1; pub const PAM_PROMPT_ECHO_ON: u32 = 2; pub const PAM_ERROR_MSG: u32 = 3; pub const PAM_TEXT_INFO: u32 = 4; +pub const PAM_RADIO_TYPE: u32 = 5; +pub const PAM_BINARY_PROMPT: u32 = 7; +pub const PAM_MAX_NUM_MSG: u32 = 32; +pub const PAM_MAX_MSG_SIZE: u32 = 512; pub const PAM_MAX_RESP_SIZE: u32 = 512; +pub const PAM_AUTHTOK_RECOVER_ERR: u32 = 21; +pub const PAM_BP_MAX_LENGTH: u32 = 131072; +pub const PAM_BPC_FALSE: u32 = 0; +pub const PAM_BPC_TRUE: u32 = 1; +pub const PAM_BPC_OK: u32 = 1; +pub const PAM_BPC_SELECT: u32 = 2; +pub const PAM_BPC_DONE: u32 = 3; +pub const PAM_BPC_FAIL: u32 = 4; +pub const PAM_BPC_GETENV: u32 = 65; +pub const PAM_BPC_PUTENV: u32 = 66; +pub const PAM_BPC_TEXT: u32 = 67; +pub const PAM_BPC_ERROR: u32 = 68; +pub const PAM_BPC_PROMPT: u32 = 69; +pub const PAM_BPC_PASS: u32 = 70; +pub const PAM_PRELIM_CHECK: u32 = 16384; +pub const PAM_UPDATE_AUTHTOK: u32 = 8192; +pub const PAM_DATA_REPLACE: u32 = 536870912; +pub const PAM_MODUTIL_NGROUPS: u32 = 64; pub type pam_handle_t = u8; -extern "C" { - pub fn pam_set_item( - pamh: *mut pam_handle_t, - item_type: libc::c_int, - item: *const libc::c_void, - ) -> libc::c_int; -} -extern "C" { - pub fn pam_get_item( - pamh: *const pam_handle_t, - item_type: libc::c_int, - item: *mut *const libc::c_void, - ) -> libc::c_int; -} -extern "C" { - pub fn pam_strerror(pamh: *mut pam_handle_t, errnum: libc::c_int) -> *const libc::c_char; -} -extern "C" { - pub fn pam_getenvlist(pamh: *mut pam_handle_t) -> *mut *mut libc::c_char; -} #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct pam_message { @@ -194,39 +211,12 @@ fn bindgen_test_layout_pam_conv() { ) ); } -extern "C" { - pub fn pam_start( - service_name: *const libc::c_char, - user: *const libc::c_char, - pam_conversation: *const pam_conv, - pamh: *mut *mut pam_handle_t, - ) -> libc::c_int; -} -extern "C" { - pub fn pam_end(pamh: *mut pam_handle_t, pam_status: libc::c_int) -> libc::c_int; -} -extern "C" { - pub fn pam_authenticate(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; -} -extern "C" { - pub fn pam_setcred(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; -} -extern "C" { - pub fn pam_acct_mgmt(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; -} -extern "C" { - pub fn pam_open_session(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; -} -extern "C" { - pub fn pam_close_session(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; -} -extern "C" { - pub fn pam_chauthtok(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; -} pub type __uid_t = libc::c_uint; pub type __gid_t = libc::c_uint; pub type gid_t = __gid_t; pub type uid_t = __uid_t; +pub type __gnuc_va_list = __builtin_va_list; +pub type va_list = __gnuc_va_list; #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct passwd { @@ -589,6 +579,10 @@ fn bindgen_test_layout_pam_modutil_privs() { ) ); } +pub const pam_modutil_redirect_fd_PAM_MODUTIL_IGNORE_FD: pam_modutil_redirect_fd = 0; +pub const pam_modutil_redirect_fd_PAM_MODUTIL_PIPE_FD: pam_modutil_redirect_fd = 1; +pub const pam_modutil_redirect_fd_PAM_MODUTIL_NULL_FD: pam_modutil_redirect_fd = 2; +pub type pam_modutil_redirect_fd = libc::c_uint; pub type __builtin_va_list = [__va_list_tag; 1usize]; #[repr(C)] #[derive(Debug, Copy, Clone)] @@ -653,3 +647,218 @@ fn bindgen_test_layout___va_list_tag() { ) ); } +extern "C" { + pub fn pam_set_item( + pamh: *mut pam_handle_t, + item_type: libc::c_int, + item: *const libc::c_void, + ) -> libc::c_int; + pub fn pam_get_item( + pamh: *const pam_handle_t, + item_type: libc::c_int, + item: *mut *const libc::c_void, + ) -> libc::c_int; + pub fn pam_strerror(pamh: *mut pam_handle_t, errnum: libc::c_int) -> *const libc::c_char; + pub fn pam_putenv(pamh: *mut pam_handle_t, name_value: *const libc::c_char) -> libc::c_int; + pub fn pam_getenv(pamh: *mut pam_handle_t, name: *const libc::c_char) -> *const libc::c_char; + pub fn pam_getenvlist(pamh: *mut pam_handle_t) -> *mut *mut libc::c_char; + pub fn pam_fail_delay(pamh: *mut pam_handle_t, musec_delay: libc::c_uint) -> libc::c_int; + pub fn pam_start( + service_name: *const libc::c_char, + user: *const libc::c_char, + pam_conversation: *const pam_conv, + pamh: *mut *mut pam_handle_t, + ) -> libc::c_int; + pub fn pam_start_confdir( + service_name: *const libc::c_char, + user: *const libc::c_char, + pam_conversation: *const pam_conv, + confdir: *const libc::c_char, + pamh: *mut *mut pam_handle_t, + ) -> libc::c_int; + pub fn pam_end(pamh: *mut pam_handle_t, pam_status: libc::c_int) -> libc::c_int; + pub fn pam_authenticate(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; + pub fn pam_setcred(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; + pub fn pam_acct_mgmt(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; + pub fn pam_open_session(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; + pub fn pam_close_session(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; + pub fn pam_chauthtok(pamh: *mut pam_handle_t, flags: libc::c_int) -> libc::c_int; + pub fn pam_vsyslog( + pamh: *const pam_handle_t, + priority: libc::c_int, + fmt: *const libc::c_char, + args: *mut __va_list_tag, + ); + pub fn pam_syslog( + pamh: *const pam_handle_t, + priority: libc::c_int, + fmt: *const libc::c_char, + ... + ); + pub fn pam_vprompt( + pamh: *mut pam_handle_t, + style: libc::c_int, + response: *mut *mut libc::c_char, + fmt: *const libc::c_char, + args: *mut __va_list_tag, + ) -> libc::c_int; + pub fn pam_prompt( + pamh: *mut pam_handle_t, + style: libc::c_int, + response: *mut *mut libc::c_char, + fmt: *const libc::c_char, + ... + ) -> libc::c_int; + pub fn pam_get_authtok( + pamh: *mut pam_handle_t, + item: libc::c_int, + authtok: *mut *const libc::c_char, + prompt: *const libc::c_char, + ) -> libc::c_int; + pub fn pam_get_authtok_noverify( + pamh: *mut pam_handle_t, + authtok: *mut *const libc::c_char, + prompt: *const libc::c_char, + ) -> libc::c_int; + pub fn pam_get_authtok_verify( + pamh: *mut pam_handle_t, + authtok: *mut *const libc::c_char, + prompt: *const libc::c_char, + ) -> libc::c_int; + pub fn pam_misc_paste_env( + pamh: *mut pam_handle_t, + user_env: *const *const libc::c_char, + ) -> libc::c_int; + pub fn pam_misc_drop_env(env: *mut *mut libc::c_char) -> *mut *mut libc::c_char; + pub fn pam_misc_setenv( + pamh: *mut pam_handle_t, + name: *const libc::c_char, + value: *const libc::c_char, + readonly: libc::c_int, + ) -> libc::c_int; + pub fn pam_set_data( + pamh: *mut pam_handle_t, + module_data_name: *const libc::c_char, + data: *mut libc::c_void, + cleanup: ::std::option::Option< + unsafe extern "C" fn( + pamh: *mut pam_handle_t, + data: *mut libc::c_void, + error_status: libc::c_int, + ), + >, + ) -> libc::c_int; + pub fn pam_get_data( + pamh: *const pam_handle_t, + module_data_name: *const libc::c_char, + data: *mut *const libc::c_void, + ) -> libc::c_int; + pub fn pam_get_user( + pamh: *mut pam_handle_t, + user: *mut *const libc::c_char, + prompt: *const libc::c_char, + ) -> libc::c_int; + pub fn pam_sm_authenticate( + pamh: *mut pam_handle_t, + flags: libc::c_int, + argc: libc::c_int, + argv: *mut *const libc::c_char, + ) -> libc::c_int; + pub fn pam_sm_setcred( + pamh: *mut pam_handle_t, + flags: libc::c_int, + argc: libc::c_int, + argv: *mut *const libc::c_char, + ) -> libc::c_int; + pub fn pam_sm_acct_mgmt( + pamh: *mut pam_handle_t, + flags: libc::c_int, + argc: libc::c_int, + argv: *mut *const libc::c_char, + ) -> libc::c_int; + pub fn pam_sm_open_session( + pamh: *mut pam_handle_t, + flags: libc::c_int, + argc: libc::c_int, + argv: *mut *const libc::c_char, + ) -> libc::c_int; + pub fn pam_sm_close_session( + pamh: *mut pam_handle_t, + flags: libc::c_int, + argc: libc::c_int, + argv: *mut *const libc::c_char, + ) -> libc::c_int; + pub fn pam_sm_chauthtok( + pamh: *mut pam_handle_t, + flags: libc::c_int, + argc: libc::c_int, + argv: *mut *const libc::c_char, + ) -> libc::c_int; + pub fn pam_modutil_check_user_in_passwd( + pamh: *mut pam_handle_t, + user_name: *const libc::c_char, + file_name: *const libc::c_char, + ) -> libc::c_int; + pub fn pam_modutil_getpwnam(pamh: *mut pam_handle_t, user: *const libc::c_char) -> *mut passwd; + pub fn pam_modutil_getpwuid(pamh: *mut pam_handle_t, uid: uid_t) -> *mut passwd; + pub fn pam_modutil_getgrnam(pamh: *mut pam_handle_t, group: *const libc::c_char) -> *mut group; + pub fn pam_modutil_getgrgid(pamh: *mut pam_handle_t, gid: gid_t) -> *mut group; + pub fn pam_modutil_getspnam(pamh: *mut pam_handle_t, user: *const libc::c_char) -> *mut spwd; + pub fn pam_modutil_user_in_group_nam_nam( + pamh: *mut pam_handle_t, + user: *const libc::c_char, + group: *const libc::c_char, + ) -> libc::c_int; + pub fn pam_modutil_user_in_group_nam_gid( + pamh: *mut pam_handle_t, + user: *const libc::c_char, + group: gid_t, + ) -> libc::c_int; + pub fn pam_modutil_user_in_group_uid_nam( + pamh: *mut pam_handle_t, + user: uid_t, + group: *const libc::c_char, + ) -> libc::c_int; + pub fn pam_modutil_user_in_group_uid_gid( + pamh: *mut pam_handle_t, + user: uid_t, + group: gid_t, + ) -> libc::c_int; + pub fn pam_modutil_getlogin(pamh: *mut pam_handle_t) -> *const libc::c_char; + pub fn pam_modutil_read( + fd: libc::c_int, + buffer: *mut libc::c_char, + count: libc::c_int, + ) -> libc::c_int; + pub fn pam_modutil_write( + fd: libc::c_int, + buffer: *const libc::c_char, + count: libc::c_int, + ) -> libc::c_int; + pub fn pam_modutil_audit_write( + pamh: *mut pam_handle_t, + type_: libc::c_int, + message: *const libc::c_char, + retval: libc::c_int, + ) -> libc::c_int; + pub fn pam_modutil_drop_priv( + pamh: *mut pam_handle_t, + p: *mut pam_modutil_privs, + pw: *const passwd, + ) -> libc::c_int; + pub fn pam_modutil_regain_priv( + pamh: *mut pam_handle_t, + p: *mut pam_modutil_privs, + ) -> libc::c_int; + pub fn pam_modutil_sanitize_helper_fds( + pamh: *mut pam_handle_t, + redirect_stdin: pam_modutil_redirect_fd, + redirect_stdout: pam_modutil_redirect_fd, + redirect_stderr: pam_modutil_redirect_fd, + ) -> libc::c_int; + pub fn pam_modutil_search_key( + pamh: *mut pam_handle_t, + file_name: *const libc::c_char, + key: *const libc::c_char, + ) -> *mut libc::c_char; +}