PAM_START(3)
π NAME π
okay so bestie, welcome to PAM_START(3) β this is the Linux-PAM page for pam_start, pam_start_confdir, and it's literally all about initialization of PAM transaction β¨ like the setup era before the main character plot begins π
πΈ SYNOPSIS πΈ
#include <security/pam_appl.h>
int pam_start(const char *service_name, const char *user,
const struct pam_conv *pam_conversation,
pam_handle_t **pamh);
int pam_start_confdir(const char *service_name, const char *user,
const struct pam_conv *pam_conversation,
const char *confdir, pam_handle_t **pamh);
π DESCRIPTION π
so pam_start creates the PAM context and initiates the PAM transaction β it's the first of the PAM functions that needs to be called by an application, no cap π The transaction state is contained entirely within the structure identified by this handle, which means you can have multiple transactions in parallel, iconic. But bestie, listen: it is not possible to use the same handle for different transactions β a new one is needed for every new context, periodt π«Ά
The service_name argument specifies the name of the service to apply and will be stored as PAM_SERVICE item in the new context. The policy for the service will be read from the file /etc/pam.d/service_name or, if that file does not exist, from /etc/pam.conf. iykyk, that's just how the policy girlies work π
The user argument can specify the name of the target user and will be stored as PAM_USER item. If the argument is NULL, the module has to ask for this item if necessary β so don't stress, it's giving "we'll figure it out" energy π
The pam_conversation argument points to a struct pam_conv describing the conversation function to use. An application must provide this for direct communication between a loaded module and the application β it's literally the group chat between them π¬
Following a successful return (PAM_SUCCESS) the contents of pamh is a handle that contains the PAM context for successive calls to the PAM functions. In an error case is the content of pamh undefined π so like, don't go poking at it.
The pam_handle_t is a blind structure and the application should not attempt to probe it directly for information. Instead the PAM library provides the functions pam_set_item(3) and pam_get_item(3) β use those, bestie, that's the whole vibe π The PAM handle cannot be used for multiple authentications at the same time as long as pam_end was not called on it before. like, one main character arc at a time, okay? π
The pam_start_confdir function behaves like the pam_start function but it also allows setting confdir argument with a path to a directory to override the default (/etc/pam.d) path for service policy files. If the confdir is NULL, the function works exactly the same as pam_start. slay, flexible queen β¨
π₯ RETURN VALUES π₯
PAM_ABORTβ General failure. it's giving "everything is on fire" πPAM_BUF_ERRβ Memory buffer error. the buffer said nah πPAM_SUCCESSβ Transaction was successfully started. ate and left no crumbs πPAM_SYSTEM_ERRβ System error, for example aNULLpointer was submitted instead of a pointer to data. bestie, check your pointers fr fr π
π¦ SEE ALSO π¦
this whole page is from Linux-PAM, dated 07/08/2026, and it's literally titled PAM_START(3) β okay love you, go start that transaction responsibly πβ¨π
π¦ where this page comes from
- fedora 44: pam-devel 1.7.2-2.fc44 Β· BSD-3-Clause AND GPL-2.0-or-later
- fedora 44: pam-devel 1.7.2-2.fc44 Β· BSD-3-Clause AND GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms