PAM_SM_CHAUTHTOK(3PAM) PAM Library Functions PAM_SM_CHAUTHTOK(3PAM)
NAME
pam_sm_chauthtok - service provider implementation for pam_chauthtok
SYNOPSIS
cc [
flag ...]
file ...
-lpam [
library ... ]
#include <security/pam_appl.h>
#include <security/pam_modules.h>
int pam_sm_chauthtok(
pam_handle_t *pamh,
int flags,
int argc,
const char **argv);
DESCRIPTION
In response to a call to
pam_chauthtok(3PAM) the
PAM framework calls
pam_sm_chauthtok() from the modules listed in the
pam.conf(5) file.
The password management provider supplies the back-end functionality
for this interface function.
The
pam_sm_chauthtok() function changes the authentication token
associated with a particular user referenced by the authentication
handle
pamh.
The following flags may be passed to
pam_chauthtok():
PAM_SILENT The password service should not
generate any messages.
PAM_CHANGE_EXPIRED_AUTHTOK The password service should only update
those passwords that have aged. If this
flag is not passed, the password
service should update all passwords.
PAM_PRELIM_CHECK The password service should only
perform preliminary checks. No
passwords should be updated.
PAM_NO_AUTHTOK_CHECK The password service should not perform
conformance checks on the structure of
the password. Conformance checks do not
apply to verification that the same
password was entered during both
passes.
PAM_UPDATE_AUTHTOK The password service should update
passwords.
Note that
PAM_PRELIM_CHECK and
PAM_UPDATE_AUTHTOK cannot be set at
the same time.
Upon successful completion of the call, the authentication token of
the user will be ready for change or will be changed, depending upon
the flag, in accordance with the authentication scheme configured
within the system.
The
argc argument represents the number of module options passed in
from the configuration file
pam.conf(5). The
argv argument specifies
the module options, which are interpreted and processed by the
password management service. Please refer to the specific module man
pages for the various available
options.
It is the responsibility of
pam_sm_chauthtok() to determine if the
new password meets certain strength requirements.
pam_sm_chauthtok() may continue to re-prompt the user (for a limited number of times)
for a new password until the password entered meets the strength
requirements.
Before returning,
pam_sm_chauthtok() should call
pam_get_item() and
retrieve both
PAM_AUTHTOK and
PAM_OLDAUTHTOK. If both are
NULL,
pam_sm_chauthtok() should set them to the new and old passwords as
entered by the user.
RETURN VALUES
Upon successful completion,
PAM_SUCCESS must be returned. The
following values may also be returned:
PAM_PERM_DENIED No permission.
PAM_AUTHTOK_ERR Authentication token manipulation error.
PAM_AUTHTOK_RECOVERY_ERR Old authentication token cannot be
recovered.
PAM_AUTHTOK_LOCK_BUSY Authentication token lock busy.
PAM_AUTHTOK_DISABLE_AGING Authentication token aging disabled.
PAM_USER_UNKNOWN User unknown to password service.
PAM_TRY_AGAIN Preliminary check by password service
failed.
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_chauthtok(3PAM),
pam_get_data(3PAM),
pam_get_item(3PAM),
pam_set_data(3PAM),
pam.conf(5),
attributes(7),
ping(8)NOTES
The
PAM framework invokes the password services twice. The first time
the modules are invoked with the flag,
PAM_PRELIM_CHECK. During this
stage, the password modules should only perform preliminary checks.
For example, they may
ping remote name services to see if they are
ready for updates. If a password module detects a transient error
such as a remote name service temporarily down, it should return
PAM_TRY_AGAIN to the
PAM framework, which will immediately return the
error back to the application. If all password modules pass the
preliminary check, the
PAM framework invokes the password services
again with the flag,
PAM_UPDATE_AUTHTOK. During this stage, each
password module should proceed to update the appropriate password.
Any error will again be reported back to application.
If a service module receives the flag
PAM_CHANGE_EXPIRED_AUTHTOK, it
should check whether the password has aged or expired. If the
password has aged or expired, then the service module should proceed
to update the password. If the status indicates that the password has
not yet aged or expired, then the password module should return
PAM_IGNORE.
If a user's password has aged or expired, a
PAM account module could
save this information as state in the authentication handle,
pamh,
using
pam_set_data(). The related password management module could
retrieve this information using
pam_get_data() to determine whether
or not it should prompt the user to update the password for this
particular module.
The interfaces in
libpam(3LIB) are MT-Safe only if each thread within
the multithreaded application uses its own
PAM handle.
If the
PAM_REPOSITORY item_type is set and a service module does not
recognize the type, the service module does not process any
information, and returns
PAM_IGNORE. If the
PAM_REPOSITORY item_type is not set, a service module performs its default action.
August 19, 2023 PAM_SM_CHAUTHTOK(3PAM)