# Module Pam

    module Pam: sig .. end

    type pam_error =

`|` | `Pam_Abort`
`|` | `Pam_Session_Err`
`|` | `Pam_Authtok_Err`
`|` | `Pam_Authtok_Recover_Err`
`|` | `Pam_Authtok_Lock_Busy`
`|` | `Pam_Authtok_Disable_Aging`
`|` | `Pam_Try_Again`
`|` | `Pam_Acct_Expired`
`|` | `Pam_New_Authtok_Reqd`
`|` | `Pam_Perm_Denied`
`|` | `Pam_Cred_Err`
`|` | `Pam_Cred_Expired`
`|` | `Pam_Cred_Unavail`
`|` | `Pam_Auth_Err`
`|` | `Pam_Cred_Insufficient`
`|` | `Pam_Authinfo_Unavail`
`|` | `Pam_Maxtries`
`|` | `Pam_User_Unknown`
`|` | `Pam_Buf_Err`
`|` | `Pam_System_Err`
`|` | `Pam_Bad_Item`

    exception Pam_Error of pam_error

    type pam_handle

    type pam_conv_type =

`|` | `Pam_Prompt_Echo_Off`
`|` | `Pam_Prompt_Echo_On`
`|` | `Pam_Error_Msg`
`|` | `Pam_Text_Info`

    type pam_conv = pam_conv_type -> string -> string

    type pam_auth_flags =

`|` | `Pam_Disallow_Null_Authtok`

    type pam_fail_delay = int -> int -> unit

    type pam_credentials =

`|` | `Pam_Establish_Cred`
`|` | `Pam_Delete_Cred`
`|` | `Pam_Reinitialize_Cred`
`|` | `Pam_Refresh_Cred`

    type pam_token_flags =

`|` | `Pam_Change_Expired_Authtok`

    type pam_item =

`|` | `Pam_Service of `string``
`|` | `Pam_User of `string``
`|` | `Pam_User_Prompt of `string``
`|` | `Pam_Tty of `string``
`|` | `Pam_RUser of `string``
`|` | `Pam_RHost of `string``
`|` | `Pam_AuthTok of `string``
`|` | `Pam_OldAuthTok of `string``
`|` | `Pam_Conv of `pam_conv``
`|` | `Pam_Fail_Delay of `pam_fail_delay``

    val pam_item_service : pam_item

    val pam_item_user : pam_item

    val pam_item_user_prompt : pam_item

    val pam_item_tty : pam_item

    val pam_item_ruser : pam_item

    val pam_item_rhost : pam_item

    val pam_item_authtok : pam_item

    val pam_item_oldauthtok : pam_item

    val pam_item_conv : pam_item

    val pam_item_fail_delay : pam_item

    type pam_functions = {

`` | `pam_end : `unit -> bool`;`
`` | `pam_set_item : `pam_item -> unit`;`
`` | `pam_get_item : `pam_item -> pam_item`;`
`` | `pam_fail_delay : `int -> unit`;`
`` | `pam_authenticate : `pam_auth_flags list -> ?silent:bool -> unit`;`
`` | `pam_setcred : `pam_credentials -> ?silent:bool -> unit`;`
`` | `pam_acct_mgmt : `pam_auth_flags list -> ?silent:bool -> unit`;`
`` | `pam_chauthtok : `pam_token_flags list -> ?silent:bool -> unit`;`
`` | `pam_open_session : `?silent:bool -> unit -> unit`;`
`` | `pam_close_session : `?silent:bool -> unit -> unit`;`
`` | `pam_putenv : `string -> unit`;`
`` | `pam_getenv : `string -> string option`;`
`` | `pam_getenvlist : `unit -> string list`;`

`}`

    val pam_start_ex : string -> ?user:string -> pam_conv -> pam_functions

    val pam_start : string -> ?user:string -> pam_conv -> pam_handle

    val pam_end : pam_handle -> bool

    val pam_set_item : pam_handle -> pam_item -> unit

    val pam_get_item : pam_handle -> pam_item -> pam_item

    val pam_fail_delay : pam_handle -> int -> unit

    val pam_authenticate : pam_handle -> pam_auth_flags list -> ?silent:bool -> unit

    val pam_setcred : pam_handle -> pam_credentials -> ?silent:bool -> unit

    val pam_acct_mgmt : pam_handle -> pam_auth_flags list -> ?silent:bool -> unit

    val pam_chauthtok : pam_handle -> pam_token_flags list -> ?silent:bool -> unit

    val pam_open_session : pam_handle -> ?silent:bool -> unit

    val pam_close_session : pam_handle -> ?silent:bool -> unit

    val pam_putenv : pam_handle -> string -> unit

    val pam_getenv : pam_handle -> string -> string option

    val pam_getenvlist : pam_handle -> string list