Go to main content

man pages section 3: Extended Library Functions, Volume 3

Exit Print View

Updated: Wednesday, July 27, 2022



pam_set_data, pam_get_data - PAM routines to maintain module specific state


cc [ flag ... ] file ... –lpam [ library ... ]
#include <security/pam_appl.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);


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 pam_set_data() function may register a cleanup function to be called during pam_end(3PAM) processing. The cleanup function should do whatever is appropriate based on pam_end_status, the status passed to pam_end() by the application. Any allocated memory for the module_data_name must be freed.

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, the existing cleanup function is called with a pam_end_status of PAM_SUCCESS , 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:


No module specific data is present.


See attributes(7) for description of the following attributes:

Interface Stability
MT-Safe with exceptions

See Also

libpam(3LIB), pam(3PAM), pam_end(3PAM), attributes(7)


The interfaces in libpam are MT-Safe only if each thread within the multithreaded application uses its own PAM handle.