PAM_START(3PAM)             PAM Library Functions            PAM_START(3PAM)
NAME
       pam_start, pam_end - PAM authentication transaction functions
SYNOPSIS
       cc [ 
flag ... ] 
file ... 
-lpam [ 
library ... ]
       #include <security/pam_appl.h>       
int pam_start(
const char *service, 
const char *user,            
const struct pam_conv *pam_conv, 
pam_handle_t **pamh);       
int pam_end(
pam_handle_t *pamh, 
int status);
DESCRIPTION
       The 
pam_start() function is called to initiate an authentication
       transaction. It takes as arguments the name of the current service,       
service, the name of the user to be authenticated, 
user, the address
       of the conversation structure, 
pam_conv, and the address of a
       variable to be assigned the authentication handle 
pamh. Upon
       successful completion,  
pamh refers to a 
PAM handle for use with
       subsequent calls to the authentication library.
       The  
pam_conv structure contains the address of the conversation
       function provided by the application.  The underlying 
PAM service
       module invokes this function to output information to and retrieve
       input from the user. The 
pam_conv structure has the following
       entries:
         struct pam_conv {
             int   (*conv)();     /* Conversation function */
             void  *appdata_ptr;  /* Application data */
         };
         int conv(int num_msg, const struct pam_message **msg,
                  struct pam_response **resp, void *appdata_ptr);
       The 
conv() function is called by a service module to hold a 
PAM       conversation with the application or user. For window applications,
       the application can create a new pop-up window to be used by the
       interaction.
       The 
num_msg  parameter is the number of messages associated with the
       call. The parameter 
msg is a pointer to an array of length 
num_msg of
       the 
pam_message structure.
       The 
pam_message structure is used to pass prompt, error message, or
       any text information from the authentication service to the
       application or user. It is the responsibility of the 
PAM service
       modules to localize the messages. The memory used by 
pam_message has
       to be allocated and freed by the  
PAM modules.  The 
pam_message       structure has the following entries:
         struct pam_message{
             int     msg_style;
             char    *msg;
         };
       The message style, 
msg_style, can be set to one of the following
       values:       
PAM_PROMPT_ECHO_OFF                              Prompt user, disabling echoing of response.       
PAM_PROMPT_ECHO_ON                              Prompt user, enabling echoing of response.       
PAM_ERROR_MSG                              Print error message.       
PAM_TEXT_INFO                              Print general text information.
       The maximum size of the message and the response string is       
PAM_MAX_MSG_SIZE as defined in <
security/pam.appl.h>.
       The structure 
pam_response is used by the authentication service to
       get the user's response back from the application or user. The
       storage used by 
pam_response has to be allocated by the application
       and freed by the 
PAM modules. The 
pam_response structure has the
       following entries:
         struct pam_response{
             char *resp;
             int  resp_retcode;  /* currently not used, */
                                 /* should be set to 0 */
          };
       It is the responsibility of the conversation function to strip off       
NEWLINE characters for 
PAM_PROMPT_ECHO_OFF and 
PAM_PROMPT_ECHO_ON       message styles, and to add 
NEWLINE characters (if appropriate) for       
PAM_ERROR_MSG and 
PAM_TEXT_INFO message styles.
       The 
appdata_ptr argument is an application data pointer which is
       passed by the application to the  
PAM service modules. Since the  
PAM       modules pass it back through the conversation function, the
       applications can use this pointer to point to any application-
       specific data.
       The 
pam_end() function is called to terminate the authentication
       transaction identified by  
pamh and to free any storage area
       allocated by the authentication module. The argument, 
status, is
       passed to the 
cleanup(|) function stored within the  
pam handle, and
       is used to determine what module-specific state must be purged.  A
       cleanup function is attached to the handle by the underlying 
PAM       modules through a call to 
pam_set_data(3PAM) to free module-specific
       data.
RETURN VALUES
       Refer to the RETURN VALUES section on 
pam(3PAM).
ATTRIBUTES
       See 
attributes(7) for description of the following attributes:
       +--------------------+-------------------------+
       |  ATTRIBUTE TYPE    |     ATTRIBUTE VALUE     |
       +--------------------+-------------------------+
       |Interface Stability |  Stable                 |
       +--------------------+-------------------------+
       |MT-Level            | MT-Safe with exceptions |
       +--------------------+-------------------------+
SEE ALSO
       libpam(3LIB), 
pam(3PAM), 
pam_acct_mgmt(3PAM), 
pam_authenticate(3PAM),       
pam_chauthtok(3PAM), 
pam_open_session(3PAM), 
pam_set_data(3PAM),       
pam_setcred(3PAM), 
pam_strerror(3PAM), 
attributes(7)NOTES
       The interfaces in 
libpam(3LIB) are MT-Safe only if each thread within
       the multithreaded application uses its own 
PAM handle.
                               August 19, 2023               PAM_START(3PAM)