PAM_SET_DATA(3PAM)          PAM Library Functions         PAM_SET_DATA(3PAM)
NAME
       pam_set_data, pam_get_data - PAM routines to maintain module specific
       state
SYNOPSIS
       cc [ 
flag ... ] 
file ... 
-lpam [ 
library ... ]
       #include <security/pam_modules.h>       
int pam_set_data(
pam_handle_t *pamh,            
const char *module_data_name, 
void *data,            
void  (*cleanup) (pam_handle_t *
pamh, 
void *data,            
int pam_end_status));       
int pam_get_data(
const pam_handle_t *pamh,            
const char *module_data_name, 
const void **data);
DESCRIPTION
       The 
pam_set_data() and 
pam_get_data() functions allow 
PAM service
       modules to access and update module specific information as needed.
       These functions should not be used by applications.
       The 
pam_set_data() function stores module specific data within the       
PAM handle 
pamh. The 
module_data_name argument uniquely identifies
       the data, and the 
data argument represents the actual data.  The       
module_data_name argument should be unique across all services.
       The 
cleanup function frees up any memory used by the 
data after it is
       no longer needed, and is invoked by 
pam_end(). The 
cleanup function
       takes as its arguments a pointer to the  
PAM handle, 
pamh, a pointer
       to the actual data, 
data, and a status code, 
pam_end_status. The
       status code determines exactly what state information needs to be
       purged.
       If 
pam_set_data() is called and module data already exists  from a
       prior call to  
pam_set_data() under the same 
module_data_name, then
       the existing 
data is replaced by the new 
data, and the existing       
cleanup function is replaced by the new 
cleanup function.
       The 
pam_get_data() function retrieves module-specific data stored in
       the 
PAM handle, 
pamh, identified by the unique name,       
module_data_name. The 
data argument is assigned the address of the
       requested data. The  
data retrieved by 
pam_get_data() should not be
       modified or freed.  The 
data will be released by 
pam_end().
RETURN VALUES
       In addition to the return values listed in 
pam(3PAM), the following
       value may also be returned:       
PAM_NO_MODULE_DATA                             No module specific data is present.
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_end(3PAM), 
attributes(7)NOTES
       The interfaces in  
libpam are MT-Safe only if each thread within the
       multithreaded application uses its own  
PAM handle.
                                July 6, 2024              PAM_SET_DATA(3PAM)