Adding upstream version 1.7.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
This commit is contained in:
parent
3d1aa0caa1
commit
82f0236850
776 changed files with 129446 additions and 0 deletions
7
AUTHORS
Normal file
7
AUTHORS
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
Original authors and current maintainers of Linux-PAM:
|
||||||
|
|
||||||
|
Andrew G. Morgan <morgan@kernel.org>
|
||||||
|
Dmitry V. Levin <ldv@altlinux.org>
|
||||||
|
Thorsten Kukuk <kukuk@thkukuk.de>
|
||||||
|
Sebastien Tricaud <toady@gscore.org>
|
||||||
|
Tomas Mraz <t8m@centrum.cz>
|
40
COPYING
Normal file
40
COPYING
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
Unless otherwise *explicitly* stated the following text describes the
|
||||||
|
licensed conditions under which the contents of this Linux-PAM release
|
||||||
|
may be distributed:
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------
|
||||||
|
Redistribution and use in source and binary forms of Linux-PAM, with
|
||||||
|
or without modification, are permitted provided that the following
|
||||||
|
conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain any existing copyright
|
||||||
|
notice, and this entire permission notice in its entirety,
|
||||||
|
including the disclaimer of warranties.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce all prior and current
|
||||||
|
copyright notices, this list of conditions, and the following
|
||||||
|
disclaimer in the documentation and/or other materials provided
|
||||||
|
with the distribution.
|
||||||
|
|
||||||
|
3. The name of any author may not be used to endorse or promote
|
||||||
|
products derived from this software without their specific prior
|
||||||
|
written permission.
|
||||||
|
|
||||||
|
ALTERNATIVELY, this product may be distributed under the terms of the
|
||||||
|
GNU General Public License, in which case the provisions of the GNU
|
||||||
|
GPL are required INSTEAD OF the above restrictions. (This clause is
|
||||||
|
necessary due to a potential conflict between the GNU GPL and the
|
||||||
|
restrictions contained in a BSD-style copyright.)
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||||
|
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||||
|
OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||||
|
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||||
|
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||||
|
DAMAGE.
|
||||||
|
-------------------------------------------------------------------------
|
40
Copyright
Normal file
40
Copyright
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
Unless otherwise *explicitly* stated the following text describes the
|
||||||
|
licensed conditions under which the contents of this Linux-PAM release
|
||||||
|
may be distributed:
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------
|
||||||
|
Redistribution and use in source and binary forms of Linux-PAM, with
|
||||||
|
or without modification, are permitted provided that the following
|
||||||
|
conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain any existing copyright
|
||||||
|
notice, and this entire permission notice in its entirety,
|
||||||
|
including the disclaimer of warranties.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce all prior and current
|
||||||
|
copyright notices, this list of conditions, and the following
|
||||||
|
disclaimer in the documentation and/or other materials provided
|
||||||
|
with the distribution.
|
||||||
|
|
||||||
|
3. The name of any author may not be used to endorse or promote
|
||||||
|
products derived from this software without their specific prior
|
||||||
|
written permission.
|
||||||
|
|
||||||
|
ALTERNATIVELY, this product may be distributed under the terms of the
|
||||||
|
GNU General Public License, in which case the provisions of the GNU
|
||||||
|
GPL are required INSTEAD OF the above restrictions. (This clause is
|
||||||
|
necessary due to a potential conflict between the GNU GPL and the
|
||||||
|
restrictions contained in a BSD-style copyright.)
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||||
|
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||||
|
OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||||
|
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||||
|
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||||
|
DAMAGE.
|
||||||
|
-------------------------------------------------------------------------
|
518
NEWS
Normal file
518
NEWS
Normal file
|
@ -0,0 +1,518 @@
|
||||||
|
Linux-PAM NEWS -- history of user-visible changes.
|
||||||
|
|
||||||
|
Release 1.7.0
|
||||||
|
* build: changed build system from autotools to meson.
|
||||||
|
* libpam_misc: use ECHOCTL in the terminal input
|
||||||
|
* pam_access: support UID and GID in access.conf
|
||||||
|
* pam_env: install environment file in vendordir if vendordir is enabled
|
||||||
|
* pam_issue: only count class user if logind support is enabled
|
||||||
|
* pam_limits: use systemd-logind instead of utmp if logind support is enabled
|
||||||
|
* pam_unix: compare password hashes in constant time
|
||||||
|
* Multiple minor bug fixes, build fixes, portability fixes,
|
||||||
|
documentation improvements, and translation updates.
|
||||||
|
|
||||||
|
Release 1.6.1
|
||||||
|
* build: fail if specified configure options cannot be satisfied.
|
||||||
|
* pam_env: fixed --disable-econf --enable-vendordir support.
|
||||||
|
* pam_unix: do not warn if password aging is disabled.
|
||||||
|
* pam_unix: try to set uid to 0 before unix_chkpwd invocation.
|
||||||
|
* pam_unix: allow empty passwords with non-empty hashes.
|
||||||
|
* Multiple minor bug fixes, build fixes, portability fixes,
|
||||||
|
documentation improvements, and translation updates.
|
||||||
|
|
||||||
|
Release 1.6.0
|
||||||
|
* Added support of configuration files with arbitrarily long lines.
|
||||||
|
* build: fixed build outside of the source tree.
|
||||||
|
* libpam: added use of getrandom(2) as a source of randomness if available.
|
||||||
|
* libpam: fixed calculation of fail delay with very long delays.
|
||||||
|
* libpam: fixed potential infinite recursion with includes.
|
||||||
|
* libpam: implemented string to number conversions validation when parsing
|
||||||
|
controls in configuration.
|
||||||
|
* pam_access: added quiet_log option.
|
||||||
|
* pam_access: fixed truncation of very long group names.
|
||||||
|
* pam_canonicalize_user: new module to canonicalize user name.
|
||||||
|
* pam_echo: fixed file handling to prevent overflows and short reads.
|
||||||
|
* pam_env: added support of '\' character in environment variable values.
|
||||||
|
* pam_exec: allowed expose_authtok for password PAM_TYPE.
|
||||||
|
* pam_exec: fixed stack overflow with binary output of programs.
|
||||||
|
* pam_faildelay: implemented parameter ranges validation.
|
||||||
|
* pam_listfile: changed to treat \r and \n exactly the same in configuration.
|
||||||
|
* pam_mkhomedir: hardened directory creation against timing attacks.
|
||||||
|
Please note that using *at functions leads to more open file handles
|
||||||
|
during creation.
|
||||||
|
* pam_namespace: fixed potential local DoS (CVE-2024-22365).
|
||||||
|
* pam_nologin: fixed file handling to prevent short reads.
|
||||||
|
* pam_pwhistory: helper binary is now built only if SELinux support is enabled.
|
||||||
|
* pam_pwhistory: implemented reliable usernames handling when remembering
|
||||||
|
passwords.
|
||||||
|
* pam_shells: changed to allow shell entries with absolute paths only.
|
||||||
|
* pam_succeed_if: fixed treating empty strings as numerical value 0.
|
||||||
|
* pam_unix: added support of disabled password aging.
|
||||||
|
* pam_unix: synchronized password aging with shadow.
|
||||||
|
* pam_unix: implemented string to number conversions validation.
|
||||||
|
* pam_unix: fixed truncation of very long user names.
|
||||||
|
* pam_unix: corrected rounds retrieval for configured encryption method.
|
||||||
|
* pam_unix: implemented reliable usernames handling when remembering passwords.
|
||||||
|
* pam_unix: changed to always run the helper to obtain shadow password entries.
|
||||||
|
* pam_unix: unix_update helper binary is now built only if SELinux support
|
||||||
|
is enabled.
|
||||||
|
* pam_unix: added audit support to unix_update helper.
|
||||||
|
* pam_userdb: added gdbm support.
|
||||||
|
* Multiple minor bug fixes, portability fixes, documentation improvements,
|
||||||
|
and translation updates.
|
||||||
|
|
||||||
|
Release 1.5.3
|
||||||
|
* configure: added options to configure stylesheets.
|
||||||
|
* configure: added --enable-logind option to use logind instead of utmp
|
||||||
|
in pam_issue and pam_timestamp.
|
||||||
|
* pam_modutil_getlogin: changed to use getlogin() from libc instead of parsing utmp.
|
||||||
|
* Added libeconf support to pam_env and pam_shells.
|
||||||
|
* Added vendor directory support to pam_access, pam_env, pam_group, pam_faillock,
|
||||||
|
pam_limits, pam_namespace, pam_pwhistory, pam_sepermit, pam_shells, and pam_time.
|
||||||
|
* pam_limits: changed to not fail on missing config files.
|
||||||
|
* pam_pwhistory: added conf= option to specify config file location.
|
||||||
|
* pam_pwhistory: added file= option to specify password history file location.
|
||||||
|
* pam_shells: added shells.d support when libeconf and vendordir are enabled.
|
||||||
|
* Deprecated pam_lastlog: this module is no longer built by default because
|
||||||
|
it uses utmp, wtmp, btmp and lastlog, but none of them are Y2038 safe,
|
||||||
|
even on 64bit architectures.
|
||||||
|
pam_lastlog will be removed in one of the next releases, consider using
|
||||||
|
pam_lastlog2 (from https://github.com/thkukuk/lastlog2) and/or
|
||||||
|
pam_wtmpdb (from https://github.com/thkukuk/wtmpdb) instead.
|
||||||
|
* Deprecated _pam_overwrite(), _pam_overwrite_n(), and _pam_drop_reply() macros
|
||||||
|
provided by _pam_macros.h; the memory override performed by these macros can
|
||||||
|
be optimized out by the compiler and therefore can no longer be relied upon.
|
||||||
|
* Multiple minor bug fixes, portability fixes, documentation improvements,
|
||||||
|
and translation updates.
|
||||||
|
|
||||||
|
Release 1.5.2
|
||||||
|
* pam_exec: implemented quiet_log option.
|
||||||
|
* pam_mkhomedir: added support of HOME_MODE and UMASK from /etc/login.defs.
|
||||||
|
* pam_timestamp: changed hmac algorithm to call openssl instead of the bundled
|
||||||
|
sha1 implementation if selected, added option to select
|
||||||
|
the hash algorithm to use with HMAC.
|
||||||
|
* Added pkgconfig files for provided libraries.
|
||||||
|
* Added --with-systemdunitdir configure option to specify systemd unit
|
||||||
|
directory.
|
||||||
|
* Added --with-misc-conv-bufsize configure option to specify the buffer size
|
||||||
|
in libpam_misc's misc_conv() function, raised the default value for this
|
||||||
|
parameter from 512 to 4096.
|
||||||
|
* Multiple minor bug fixes, portability fixes, documentation improvements,
|
||||||
|
and translation updates.
|
||||||
|
|
||||||
|
Release 1.5.1
|
||||||
|
* pam_unix: fixed CVE-2020-27780 - authentication bypass when a user
|
||||||
|
doesn't exist and root password is blank
|
||||||
|
* pam_faillock: added nodelay option to not set pam_fail_delay
|
||||||
|
* pam_wheel: use pam_modutil_user_in_group to check for the group membership
|
||||||
|
with getgrouplist where it is available
|
||||||
|
|
||||||
|
Release 1.5.0
|
||||||
|
* Multiple minor bug fixes, portability fixes, and documentation improvements.
|
||||||
|
* Extended libpam API with pam_modutil_check_user_in_passwd function.
|
||||||
|
* configure: added --disable-unix option to disable build of pam_unix module.
|
||||||
|
* pam_faillock: changed /run/faillock/$USER permissions from 0600 to 0660.
|
||||||
|
* pam_limits: added support for nonewprivs item.
|
||||||
|
* pam_motd: read motd files with target user credentials skipping unreadable ones.
|
||||||
|
* pam_pwhistory: added a SELinux helper executable.
|
||||||
|
* pam_unix, pam_usertype: implemented avoidance of certain timing attacks.
|
||||||
|
* pam_wheel: implemented PAM_RUSER fallback for the case when getlogin fails.
|
||||||
|
* Removed deprecated pam_cracklib module, use pam_passwdqc (from passwdqc project)
|
||||||
|
or pam_pwquality (from libpwquality project) instead.
|
||||||
|
* Removed deprecated pam_tally and pam_tally2 modules, use pam_faillock instead.
|
||||||
|
* pam_env: Reading of the user environment is deprecated and will be removed
|
||||||
|
at some point in the future.
|
||||||
|
* libpam: pam_modutil_drop_priv() now correctly sets the target user's
|
||||||
|
supplementary groups, allowing pam_motd to filter messages accordingly
|
||||||
|
|
||||||
|
Release 1.4.0
|
||||||
|
* Multiple minor bug fixes and documentation improvements
|
||||||
|
* Fixed grammar of messages printed via pam_prompt
|
||||||
|
* Added support for a vendor directory and libeconf
|
||||||
|
* configure: Added --enable-Werror option to enable -Werror build
|
||||||
|
* configure: Allowed disabling documentation through --disable-doc
|
||||||
|
* pam_get_authtok_verify: Avoid duplicate password verification
|
||||||
|
* pam_cracklib: Fixed parsing of options without arguments
|
||||||
|
* pam_env: Changed the default to not read the user .pam_environment file
|
||||||
|
* pam_exec: Require a user name to be specified before the command is executed
|
||||||
|
* pam_faillock: New module for locking after multiple auth failures
|
||||||
|
* pam_group, pam_time: Fixed logical error with multiple ! operators
|
||||||
|
* pam_keyinit: In pam_sm_setcred do the same as in pam_sm_open_session
|
||||||
|
* pam_lastlog: Do not log info about failed login if the session was opened
|
||||||
|
with PAM_SILENT flag
|
||||||
|
* pam_lastlog: Limit lastlog file use by LASTLOG_UID_MAX option in login.defs
|
||||||
|
* pam_lastlog: With 'unlimited' option prevent SIGXFSZ due to reduced 'fsize'
|
||||||
|
limit
|
||||||
|
* pam_mkhomedir: Fixed return value when the user is unknown
|
||||||
|
* pam_motd: Export MOTD_SHOWN=pam after showing MOTD
|
||||||
|
* pam_motd: Support multiple motd paths specified, with filename overrides
|
||||||
|
* pam_namespace: Added a systemd service, which creates the namespaced
|
||||||
|
instance parent directories during boot
|
||||||
|
* pam_namespace: Support for noexec, nosuid and nodev flags for tmpfs mounts
|
||||||
|
* pam_selinux: Check unknown object classes or permissions in current policy
|
||||||
|
* pam_selinux: Fall back to log to syslog if audit logging fails
|
||||||
|
* pam_setquota: New module to set or modify disk quotas on session start
|
||||||
|
* pam_shells: Recognize /bin/sh as the default shell
|
||||||
|
* pam_succeed_if: Fixed potential override of the default prompt
|
||||||
|
* pam_succeed_if: Support lists in group membership checks
|
||||||
|
* pam_time: Added conffile= option to specify an alternative configuration file
|
||||||
|
* pam_tty_audit: If kernel audit is disabled return PAM_IGNORE
|
||||||
|
* pam_umask: Added new 'nousergroups' module argument and allowed specifying
|
||||||
|
the default for usergroups at build-time
|
||||||
|
* pam_unix: Added 'nullresetok' option to allow resetting blank passwords
|
||||||
|
* pam_unix: Report unusable hashes found by checksalt to syslog
|
||||||
|
* pam_unix: Return PAM_AUTHINFO_UNAVAIL when shadow entry is unavailable
|
||||||
|
* pam_unix: Support for (gost-)yescrypt hashing methods
|
||||||
|
* pam_unix: Use bcrypt b-variant when it bcrypt is chosen
|
||||||
|
* pam_usertype: New module to tell if uid is in login.defs ranges
|
||||||
|
* Fixed and documented possible values returned by pam_get_user()
|
||||||
|
* Added new API call pam_start_confdir() for special applications that
|
||||||
|
cannot use the system-default PAM configuration paths and need to
|
||||||
|
explicitly specify another path
|
||||||
|
* Deprecated pam_cracklib: this module is no longer built by default and will
|
||||||
|
be removed in the next release, use pam_passwdqc (from passwdqc project)
|
||||||
|
or pam_pwquality (from libpwquality project) instead
|
||||||
|
* Deprecated pam_tally and pam_tally2: these modules are no longer built
|
||||||
|
by default and will be removed in the next release, use pam_faillock instead
|
||||||
|
|
||||||
|
Release 1.3.1
|
||||||
|
* pam_motd: add support for a motd.d directory
|
||||||
|
* pam_umask: Fix documentation to align with order of loading umask
|
||||||
|
* pam_get_user.3: Fix missing word in documentation
|
||||||
|
* pam_tally2 --reset: avoid creating a missing tallylog file
|
||||||
|
* pam_mkhomedir: Allow creating parent of homedir under /
|
||||||
|
* access.conf.5: Add note about spaces around ':'
|
||||||
|
* pam.8: Workaround formatting problem
|
||||||
|
* pam_unix: Check return value of malloc used for setcred data
|
||||||
|
* pam_cracklib: Drop unused prompt macros
|
||||||
|
* pam_tty_audit: Support matching users by uid range
|
||||||
|
* pam_access: support parsing files in /etc/security/access.d/*.conf
|
||||||
|
* pam_localuser: Correct documentation
|
||||||
|
* pam_issue: Fix no prompting in parse escape codes mode
|
||||||
|
* Unification and cleanup of syslog log levels
|
||||||
|
|
||||||
|
|
||||||
|
Release 1.3.0
|
||||||
|
* Remove of static modules support
|
||||||
|
* pam_unix: pass_not_set was removed
|
||||||
|
* Lot of documentation fixes
|
||||||
|
* Use TI-RPC function calls if we build against libtirpc
|
||||||
|
* Add support for new, IPv6 enabled libnsl
|
||||||
|
* Lot of bug fixes
|
||||||
|
* Use fedora.zanata.org for translations
|
||||||
|
|
||||||
|
|
||||||
|
Release 1.2.1
|
||||||
|
* Fix CVE-2015-3238, affected PAM modules are pam_unix and pam_exec
|
||||||
|
|
||||||
|
|
||||||
|
Release 1.2.0
|
||||||
|
* Update documentation
|
||||||
|
* Update translations
|
||||||
|
* pam_unix: add quiet option
|
||||||
|
* libpam: support alternative configuration files in /usr/lib/pam.d
|
||||||
|
as fallback
|
||||||
|
* pam_env: add support for @{HOME} and @{SHELL}
|
||||||
|
* libpam: add grantor field to audit records
|
||||||
|
* libpam: Introduce pam_modutil_sanitize_helper_fds
|
||||||
|
|
||||||
|
|
||||||
|
Release 1.1.8
|
||||||
|
* pam_unix: bug fix for compiling with SELinux, fix crash at login time
|
||||||
|
|
||||||
|
|
||||||
|
Release 1.1.7
|
||||||
|
* Update translations
|
||||||
|
* pam_exec: add stdout and type= options
|
||||||
|
* pam_tty_audit: add options to control logging of passwords
|
||||||
|
* pam_unix: Read defaults from /etc/login.defs
|
||||||
|
* pam_userdb: Allow modern password hashes
|
||||||
|
* pam_selinux/pam_tally2: Add tty and rhost to audit data
|
||||||
|
* Lot of docu and code fixes
|
||||||
|
|
||||||
|
|
||||||
|
Release 1.1.6
|
||||||
|
* Update translations
|
||||||
|
* pam_cracklib: Add more checks for weak passwords
|
||||||
|
* pam_lastlog: Never lock out root
|
||||||
|
* Lot of bug fixes and smaller enhancements
|
||||||
|
|
||||||
|
|
||||||
|
Release 1.1.5
|
||||||
|
* pam_env: Fix CVE-2011-3148 and CVE-2011-3149
|
||||||
|
* pam_access: Add hostname resolution cache
|
||||||
|
* Documentation: Improvements/fixes
|
||||||
|
|
||||||
|
|
||||||
|
Release 1.1.4
|
||||||
|
|
||||||
|
* Add vietnamese translation
|
||||||
|
* pam_namespace: Add new functionality
|
||||||
|
* pam_securetty: Honour console= kernel option, add noconsole option
|
||||||
|
* pam_limits: Add %group syntax, drop change_uid option, add set_all option
|
||||||
|
* Lot of small bug fixes
|
||||||
|
* Lot of compiler warnings fixed
|
||||||
|
* Add support for libtirpc
|
||||||
|
|
||||||
|
|
||||||
|
Release 1.1.3
|
||||||
|
|
||||||
|
* pam_namespace: Clean environment for child processes (CVE-2010-3853)
|
||||||
|
* libpam: New interface to drop/regain privileges
|
||||||
|
* Drop root privileges in pam_env, pam_mail and pam_xauth before
|
||||||
|
accessing user files (CVE-2010-3430, CVE-2010-3431)
|
||||||
|
* pam_unix: Add minlen option, change default from 6 to 0
|
||||||
|
* Documentation improvements
|
||||||
|
* Lot of small bug fixes
|
||||||
|
|
||||||
|
Release 1.1.2
|
||||||
|
|
||||||
|
* pam_unix: Add minlen= option
|
||||||
|
* pam_group: Add support for UNIX groups beside netgroups
|
||||||
|
* pam_tally: Document that it is deprecated
|
||||||
|
* pam_rootok: Add support for chauthtok and acct_mgmt
|
||||||
|
* Update translations
|
||||||
|
|
||||||
|
Release 1.1.1
|
||||||
|
|
||||||
|
* Update translations
|
||||||
|
* pam_access: Revert netgroup match to original behavior, add new
|
||||||
|
syntax for adding the local hostname to netgroup match
|
||||||
|
* libpam: Add new functions pam_get_authtok_noverify() and
|
||||||
|
pam_get_authtok_verify()
|
||||||
|
* Add sepermit.conf.5 manual page
|
||||||
|
* Lot of bug fixes
|
||||||
|
|
||||||
|
Release 1.1.0
|
||||||
|
|
||||||
|
* Update translations
|
||||||
|
* Documentation updates and fixes
|
||||||
|
|
||||||
|
Release 1.0.92
|
||||||
|
|
||||||
|
* Update translations
|
||||||
|
* pam_succeed_if: Use provided username
|
||||||
|
* pam_mkhomedir: Fix handling of options
|
||||||
|
|
||||||
|
Release 1.0.91
|
||||||
|
|
||||||
|
* Fixed CVE-2009-0579 (minimum days limit on password change is ignored).
|
||||||
|
* Fix libpam internal config/argument parser
|
||||||
|
* Add optional file locking to pam_tally2
|
||||||
|
* Update translations
|
||||||
|
* pam_access improvements
|
||||||
|
* Changes in the behavior of the password stack. Results of PRELIM_CHECK
|
||||||
|
are not used for the final run.
|
||||||
|
|
||||||
|
Release 1.0.90
|
||||||
|
|
||||||
|
* Supply hostname of the machine to netgroup match call in pam_access
|
||||||
|
* Make pam_namespace to work safe on child directories of parent directories
|
||||||
|
owned by users
|
||||||
|
* Redefine LOCAL keyword of pam_access configuration file
|
||||||
|
* Add support for try_first_pass and use_first_pass to pam_cracklib
|
||||||
|
* Print informative messages for rejected login and add silent and
|
||||||
|
no_log_info options to pam_tally
|
||||||
|
* Add support for passing PAM_AUTHTOK to stdin of helpers from pam_exec
|
||||||
|
* New password quality tests in pam_cracklib
|
||||||
|
* New options for pam_lastlog to show last failed login attempt and
|
||||||
|
to disable lastlog update
|
||||||
|
* New pam_pwhistory module to store last used passwords
|
||||||
|
* New pam_tally2 module similar to pam_tally with wordsize independent
|
||||||
|
tally data format
|
||||||
|
* Make libpam not log missing module if its type is prepended with '-'
|
||||||
|
* New pam_timestamp module for authentication based on recent successful
|
||||||
|
login.
|
||||||
|
* Add blowfish support to pam_unix.
|
||||||
|
* Add support for user specific environment file to pam_env.
|
||||||
|
* Add pam_get_authtok to libpam as Linux-PAM extension.
|
||||||
|
* Rename type option of pam_cracklib to authtok_type.
|
||||||
|
|
||||||
|
Release 1.0.3
|
||||||
|
|
||||||
|
* Small bug fix release
|
||||||
|
|
||||||
|
|
||||||
|
Release 1.0.2
|
||||||
|
|
||||||
|
* Regression fixed in pam_selinux
|
||||||
|
* Problem with big UIDs fixed in pam_loginuid
|
||||||
|
|
||||||
|
|
||||||
|
Release 1.0.1
|
||||||
|
|
||||||
|
* Regression fixed in pam_set_item()
|
||||||
|
|
||||||
|
|
||||||
|
Release 1.0.0
|
||||||
|
|
||||||
|
* Small bug fixes
|
||||||
|
* Translation updates
|
||||||
|
|
||||||
|
|
||||||
|
Release 0.99.10.0
|
||||||
|
|
||||||
|
* New substack directive in config file syntax.
|
||||||
|
* New module pam_tty_audit.so for enabling and disabling tty
|
||||||
|
auditing.
|
||||||
|
* New PAM items PAM_XDISPLAY and PAM_XAUTHDATA.
|
||||||
|
* Auditing login denials based by origin (pam_access), time (pam_time),
|
||||||
|
and number of sessions (pam_limits) to the Linux audit subsystem.
|
||||||
|
* Support sha256 and sha512 algorithms in pam_unix when they are supported
|
||||||
|
by crypt().
|
||||||
|
* New pam_sepermit.so module for allowing/rejecting access based on
|
||||||
|
SELinux mode.
|
||||||
|
* Improved functionality of pam_namespace.so module (method flags,
|
||||||
|
namespace.d configuration directory, new options).
|
||||||
|
* Finally removed deprecated pam_rhosts_auth module.
|
||||||
|
|
||||||
|
|
||||||
|
Release 0.99.9.0
|
||||||
|
|
||||||
|
* misc_conv no longer blocks SIGINT; applications that don't want
|
||||||
|
user-interruptable prompts should block SIGINT themselves
|
||||||
|
* Merge fixes from Debian
|
||||||
|
* Fix parser for pam_group and pam_time
|
||||||
|
|
||||||
|
|
||||||
|
Release 0.99.8.1
|
||||||
|
|
||||||
|
* Fix a regression in audit code introduced with last release
|
||||||
|
* Fix compiling with --disable-nls
|
||||||
|
|
||||||
|
|
||||||
|
Release 0.99.8.0
|
||||||
|
|
||||||
|
* Add translations for ar, ca, da, ru, sv and zu.
|
||||||
|
* Update hungarian translation.
|
||||||
|
* Add support for limits.d directory to pam_limits.
|
||||||
|
* Improve pam_namespace module tobe more useful
|
||||||
|
for MLS, fixed crash with bad config files.
|
||||||
|
* Improve pam_selinux module to be more useful
|
||||||
|
for MLS.
|
||||||
|
* Add minclass option to pam_cracklib
|
||||||
|
* Add new group syntax to pam_access
|
||||||
|
|
||||||
|
|
||||||
|
Release 0.99.7.1
|
||||||
|
|
||||||
|
* Security fix for pam_unix.so (CVE-2007-0003).
|
||||||
|
|
||||||
|
|
||||||
|
Release 0.99.7.0
|
||||||
|
|
||||||
|
* Add manual page for pam_unix.so.
|
||||||
|
* Add pam_faildelay module to set pam_fail_delay() value.
|
||||||
|
* Fix possible seg.fault in libpam/pam_set_data().
|
||||||
|
* Cleanup of configure options.
|
||||||
|
* Update hungarian translation, fix german translation.
|
||||||
|
|
||||||
|
|
||||||
|
Release 0.99.6.3
|
||||||
|
|
||||||
|
* pam_loginuid: New PAM module.
|
||||||
|
* pam_access, pam_succeed_if: Support passwd and session services.
|
||||||
|
|
||||||
|
|
||||||
|
Release 0.99.6.2
|
||||||
|
|
||||||
|
* pam_lastlog: Don't refuse login if lastlog file got lost.
|
||||||
|
* pam_cracklib: Fix a user triggerable crash.
|
||||||
|
* documentation: Regenerate with fixed docbook stylesheet.
|
||||||
|
|
||||||
|
|
||||||
|
Release 0.99.6.1
|
||||||
|
|
||||||
|
* Fix bootstrapping problems.
|
||||||
|
* Bug fixes: pam_keyinit, pam_umask
|
||||||
|
|
||||||
|
|
||||||
|
Release 0.99.6.0
|
||||||
|
|
||||||
|
* pam_namespace: Code cleanup, add init script to tar archive.
|
||||||
|
* pam_succeed_if: Add support for service match.
|
||||||
|
* Add xtests (to run after installation).
|
||||||
|
* Documentation: Convert sgml guides to XML, unify documentation
|
||||||
|
for PAM functions and modules.
|
||||||
|
|
||||||
|
|
||||||
|
Release 0.99.5.0
|
||||||
|
|
||||||
|
* pam_tally: Fix support for large UIDs
|
||||||
|
* Fixed all problems found by Coverity
|
||||||
|
* Add support for Intel C Compiler
|
||||||
|
* Add manual page for pam_mkhomedir, pam_umask, pam_filter,
|
||||||
|
pam_issue, pam_ftp, pam_group, pam_lastlog, pam_listfile,
|
||||||
|
pam_localuser, pam_mail, pam_motd, pam_nologin, pam_permit,
|
||||||
|
pam_rootok, pam_securetty, pam_shells, pam_userdb, pam_warn,
|
||||||
|
pam_time, pam_limits, pam_debug, pam_tally
|
||||||
|
* The libpam memory debug code was removed
|
||||||
|
* pam_keyinit: New module to initialise kernel session keyring.
|
||||||
|
* pam_namespace: New module to configure private namespace for a session.
|
||||||
|
* pam_rhosts: New module which replaces pam_rhosts_auth, now IPv6 capable.
|
||||||
|
* pam_rhosts_auth: This module is now deprecated.
|
||||||
|
|
||||||
|
|
||||||
|
Release 0.99.4.0
|
||||||
|
|
||||||
|
* Add test suite
|
||||||
|
* Fix building of static variants of libpam, libpamc and libpam_misc
|
||||||
|
* pam_listfile: Add support for password and session management
|
||||||
|
* pam_exec: New PAM module to execute arbitrary commands
|
||||||
|
* Fix building of a static libpam including all PAM modules
|
||||||
|
* New/updated translations for: nl, pt, pl, fi, km, tr, uk, fr
|
||||||
|
* pam_access: Add network(address) / netmask and IPv6 support
|
||||||
|
* Add manual pages for pam_cracklib, pam_deny and pam_access
|
||||||
|
* pam_pwdb: This deprecated module was removed
|
||||||
|
* Manual pages: Major rewrite/cleanup
|
||||||
|
|
||||||
|
|
||||||
|
Release 0.99.3.0
|
||||||
|
|
||||||
|
* Fix NULL pointer checks in libpam.so
|
||||||
|
* pam_succeed_if, pam_group, pam_time: Support netgroup matching
|
||||||
|
* New translations for: nb, hu, fi, de, es, fr, it, ja, pt_BR, zh_CN, zh_TW
|
||||||
|
* Audit PAM calls if Linux Audit is available
|
||||||
|
* Compile upperLOWER and unix_chkpwd as PIE binaries
|
||||||
|
|
||||||
|
|
||||||
|
Release 0.99.2.1
|
||||||
|
|
||||||
|
* Fix install of PS, PDF, TXT and HTML files
|
||||||
|
* pam_mail: Update README
|
||||||
|
* Use %m consistent
|
||||||
|
* pam_modutil_getlogin: Fix parsing of PAM_TTY variable
|
||||||
|
|
||||||
|
|
||||||
|
Release 0.99.2.0
|
||||||
|
|
||||||
|
* Fix parsing of full path tty name in various modules
|
||||||
|
* pam_xauth: Look for xauth executable in multiple places
|
||||||
|
* pam_unix: Disable user check in unix_chkpwd only if real uid
|
||||||
|
is 0 (CVE-2005-2977). Log failed password check attempt.
|
||||||
|
* pam_env: Support /etc/environment again, but don't treat it as
|
||||||
|
error if it is missing.
|
||||||
|
* pam_userdb: Fix memory leak.
|
||||||
|
|
||||||
|
|
||||||
|
Release 0.99.1.0
|
||||||
|
|
||||||
|
* Use autoconf/automake/libtool
|
||||||
|
* Add gettext support
|
||||||
|
* Add translations for cs, de, es, fr, hu, it, ja, nb, pa, pt_BR,
|
||||||
|
pt, zh_CN and zh_TW
|
||||||
|
* libpam: Remove pam_authenticate_secondary stub
|
||||||
|
* libpam: Add pam_prompt,pam_vprompt,pam_error,pam_verror,pam_info
|
||||||
|
and pam_vinfo functions for use by modules as extension
|
||||||
|
* libpam: Add pam_syslog function for unified syslog messages from
|
||||||
|
PAM modules
|
||||||
|
* libpam: Moved functions from pammodutil to libpam
|
||||||
|
* pam_umask: New module for setting umask from GECOS field, /etc/login.defs
|
||||||
|
or /etc/default/login
|
||||||
|
* pam_echo: New PAM module for message output
|
||||||
|
* pam_userdb: Fix regression (crash when crypt param not specified)
|
||||||
|
* pam_limits: Fix regression from RLIMIT_NICE support (wrong limit
|
||||||
|
values for other limits are applied)
|
||||||
|
* pam_access: Support for NULL tty - matches ALL and NONE keywords
|
||||||
|
* pam_lastlog: Enable log to wtmp by default. Add "nowtmp" option
|
||||||
|
* pam_radius: This module was removed
|
50
README
Normal file
50
README
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
Hello!
|
||||||
|
|
||||||
|
Thanks for downloading Linux-PAM.
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
|
||||||
|
How to use it is as follows:
|
||||||
|
|
||||||
|
Please look at the ci/install-dependencies.sh for the necessary
|
||||||
|
prerequisite packages to be able to build the Linux-PAM. The script
|
||||||
|
is targeted at Debian based Linux distributions so the package
|
||||||
|
names and availability might differ on other distributions.
|
||||||
|
|
||||||
|
First, configure the build using meson setup:
|
||||||
|
|
||||||
|
mkdir build
|
||||||
|
meson setup <your-options> build
|
||||||
|
|
||||||
|
Then compile:
|
||||||
|
|
||||||
|
meson compile -C build
|
||||||
|
|
||||||
|
To make sure everything was compiled correct, run:
|
||||||
|
|
||||||
|
meson test -C build
|
||||||
|
|
||||||
|
If a test fails, you should not continue to install this build.
|
||||||
|
These tests require a suitable file /etc/pam.d/other; if necessary,
|
||||||
|
create such a file containing, e.g., these five lines (not indented)
|
||||||
|
|
||||||
|
#%PAM-1.0
|
||||||
|
auth required pam_deny.so
|
||||||
|
account required pam_deny.so
|
||||||
|
password required pam_deny.so
|
||||||
|
session required pam_deny.so
|
||||||
|
|
||||||
|
|
||||||
|
Note, if you are worried - don't even think about doing the next line
|
||||||
|
(most Linux distributions already support PAM out of the box, so if
|
||||||
|
something goes wrong with installing the code from this version your
|
||||||
|
box may stop working..)
|
||||||
|
|
||||||
|
meson install -C build
|
||||||
|
|
||||||
|
That said, please report problems to the bug reporting database
|
||||||
|
at https://github.com/linux-pam/linux-pam/issues .
|
||||||
|
|
||||||
|
To generate manual pages from the XML source files you need the
|
||||||
|
docbook-xsl stylesheets in version 1.69.1 or newer, older versions had
|
||||||
|
a bug which generates a broken layout.
|
6
aux/chdir_meson_build_subdir.sh
Executable file
6
aux/chdir_meson_build_subdir.sh
Executable file
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/sh -efu
|
||||||
|
|
||||||
|
exe=$1; shift
|
||||||
|
exe=$(readlink -ev -- "$exe")
|
||||||
|
cd "$MESON_BUILD_SUBDIR"
|
||||||
|
exec "$exe" "$@"
|
6
aux/redir_exe.sh
Executable file
6
aux/redir_exe.sh
Executable file
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/sh -efu
|
||||||
|
# stdin stdout ...
|
||||||
|
|
||||||
|
exec < "$1"; shift
|
||||||
|
exec > "$1"; shift
|
||||||
|
exec "$@"
|
53
ci/build.sh
Executable file
53
ci/build.sh
Executable file
|
@ -0,0 +1,53 @@
|
||||||
|
#!/bin/sh -ex
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018-2024 The strace developers.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
opts='-Doptimization=2 -Dwerror=true -Dpam_lastlog=enabled'
|
||||||
|
|
||||||
|
case "${VENDORDIR-}" in
|
||||||
|
*/*)
|
||||||
|
opts="$opts -Dvendordir=$VENDORDIR"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "${USE_OPENSSL-}" in
|
||||||
|
yes)
|
||||||
|
opts="$opts -Dopenssl=enabled"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "${ENABLE_DEBUG-}" in
|
||||||
|
yes)
|
||||||
|
opts="$opts -Dpam-debug=true"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo 'BEGIN OF BUILD ENVIRONMENT INFORMATION'
|
||||||
|
uname -a |head -1
|
||||||
|
libc="$(ldd /bin/sh |sed -n 's|^[^/]*\(/[^ ]*/libc\.so[^ ]*\).*|\1|p' |head -1)"
|
||||||
|
$libc |head -1
|
||||||
|
$CC --version |head -1
|
||||||
|
meson --version |head -1
|
||||||
|
ninja --version |head -1
|
||||||
|
kver="$(printf '%s\n%s\n' '#include <linux/version.h>' 'LINUX_VERSION_CODE' | $CC -E -P -)"
|
||||||
|
printf 'kernel-headers %s.%s.%s\n' $((kver/65536)) $((kver/256%256)) $((kver%256))
|
||||||
|
echo 'END OF BUILD ENVIRONMENT INFORMATION'
|
||||||
|
|
||||||
|
mkdir build
|
||||||
|
meson setup $opts build
|
||||||
|
|
||||||
|
# If "meson dist" supported -v option, it could be used here
|
||||||
|
# instead of all subsequent individual meson commands.
|
||||||
|
|
||||||
|
meson compile -v -C build
|
||||||
|
mkdir build/destdir
|
||||||
|
DESTDIR=$(pwd)/build/destdir meson install -C build
|
||||||
|
meson test -v -C build
|
||||||
|
|
||||||
|
if git status --porcelain |grep '^?'; then
|
||||||
|
echo >&2 'git status reported untracked files'
|
||||||
|
exit 1
|
||||||
|
fi
|
77
ci/install-dependencies.sh
Executable file
77
ci/install-dependencies.sh
Executable file
|
@ -0,0 +1,77 @@
|
||||||
|
#!/bin/sh -ex
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018-2019 The strace developers.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
j=-j`nproc` || j=
|
||||||
|
type sudo >/dev/null 2>&1 && sudo=sudo || sudo=
|
||||||
|
packages="
|
||||||
|
bison
|
||||||
|
docbook5-xml
|
||||||
|
docbook-xsl-ns
|
||||||
|
flex
|
||||||
|
gettext
|
||||||
|
libaudit-dev
|
||||||
|
libdb-dev
|
||||||
|
libfl-dev
|
||||||
|
libselinux1-dev
|
||||||
|
libssl-dev
|
||||||
|
libxml2-utils
|
||||||
|
meson
|
||||||
|
pkg-config
|
||||||
|
sed
|
||||||
|
w3m
|
||||||
|
xsltproc
|
||||||
|
xz-utils
|
||||||
|
$CC"
|
||||||
|
|
||||||
|
retry_if_failed()
|
||||||
|
{
|
||||||
|
for i in `seq 0 99`; do
|
||||||
|
"$@" && i= && break || sleep 1
|
||||||
|
done
|
||||||
|
[ -z "$i" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
updated=
|
||||||
|
apt_get_install()
|
||||||
|
{
|
||||||
|
[ -n "$updated" ] || {
|
||||||
|
retry_if_failed $sudo apt-get -qq update
|
||||||
|
updated=1
|
||||||
|
}
|
||||||
|
retry_if_failed $sudo \
|
||||||
|
apt-get -qq --no-install-suggests --no-install-recommends \
|
||||||
|
install -y "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$CC" in
|
||||||
|
gcc-*)
|
||||||
|
retry_if_failed \
|
||||||
|
$sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$TARGET" in
|
||||||
|
x32|x86)
|
||||||
|
packages="$packages gcc-multilib"
|
||||||
|
case "$CC" in
|
||||||
|
gcc-*) packages="$packages $CC-multilib" ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
apt_get_install $packages
|
||||||
|
|
||||||
|
case "${CHECK-}" in
|
||||||
|
coverage)
|
||||||
|
apt_get_install lcov python-pip python-setuptools
|
||||||
|
retry_if_failed \
|
||||||
|
pip install --user codecov
|
||||||
|
;;
|
||||||
|
valgrind)
|
||||||
|
apt_get_install valgrind
|
||||||
|
;;
|
||||||
|
esac
|
36
conf/install_conf
Executable file
36
conf/install_conf
Executable file
|
@ -0,0 +1,36 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
CONFILE="$FAKEROOT"$CONFIGED/pam.conf
|
||||||
|
IGNORE_AGE=./.ignore_age
|
||||||
|
CONF=./pam.conf
|
||||||
|
|
||||||
|
echo
|
||||||
|
|
||||||
|
if [ -f "$IGNORE_AGE" ]; then
|
||||||
|
echo "you don't want to be bothered with the age of your $CONFILE file"
|
||||||
|
yes="n"
|
||||||
|
elif [ ! -f "$CONFILE" ] || [ "$CONF" -nt "$CONFILE" ]; then
|
||||||
|
if [ -f "$CONFILE" ]; then
|
||||||
|
echo "\
|
||||||
|
An older Linux-PAM configuration file already exists ($CONFILE)"
|
||||||
|
WRITE=overwrite
|
||||||
|
fi
|
||||||
|
echo -n "\
|
||||||
|
Do you wish to copy the $CONF file in this distribution
|
||||||
|
to $CONFILE ? (y/n) [n] "
|
||||||
|
read yes
|
||||||
|
else
|
||||||
|
yes=n
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$yes" = "y" ]; then
|
||||||
|
echo " copying $CONF to $CONFILE"
|
||||||
|
cp $CONF $CONFILE
|
||||||
|
else
|
||||||
|
touch "$IGNORE_AGE"
|
||||||
|
echo " Skipping $CONF installation"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
|
||||||
|
exit 0
|
43
conf/md5itall
Executable file
43
conf/md5itall
Executable file
|
@ -0,0 +1,43 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
# Created by Andrew G. Morgan (morgan@parc.power.net)
|
||||||
|
#
|
||||||
|
|
||||||
|
MD5SUM=md5sum
|
||||||
|
CHKFILE1=./.md5sum
|
||||||
|
CHKFILE2=./.md5sum-new
|
||||||
|
|
||||||
|
which $MD5SUM > /dev/null
|
||||||
|
result=$?
|
||||||
|
|
||||||
|
if [ -x "$MD5SUM" ] || [ $result -eq 0 ]; then
|
||||||
|
rm -f $CHKFILE2
|
||||||
|
echo -n "computing md5 checksums."
|
||||||
|
for x in `cat ../.filelist` ; do
|
||||||
|
(cd ../.. ; $MD5SUM $x) >> $CHKFILE2
|
||||||
|
echo -n "."
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
if [ -f "$CHKFILE1" ]; then
|
||||||
|
echo "\
|
||||||
|
---> Note, since the last \`make check', the following file(s) have changed:
|
||||||
|
==========================================================================="
|
||||||
|
diff $CHKFILE1 $CHKFILE2
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "\
|
||||||
|
--------------------------- Nothing has changed ---------------------------"
|
||||||
|
fi
|
||||||
|
echo "\
|
||||||
|
==========================================================================="
|
||||||
|
fi
|
||||||
|
rm -f "$CHKFILE1"
|
||||||
|
mv "$CHKFILE2" "$CHKFILE1"
|
||||||
|
chmod 400 "$CHKFILE1"
|
||||||
|
else
|
||||||
|
echo "\
|
||||||
|
Please install \`$MD5SUM'.
|
||||||
|
[It is used to check the integrity of this distribution]
|
||||||
|
---> no check done."
|
||||||
|
fi
|
120
conf/pam.conf
Normal file
120
conf/pam.conf
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
# ---------------------------------------------------------------------------#
|
||||||
|
# /etc/pam.conf #
|
||||||
|
# #
|
||||||
|
# Last modified by Andrew G. Morgan <morgan@kernel.org> #
|
||||||
|
# ---------------------------------------------------------------------------#
|
||||||
|
# $Id$
|
||||||
|
# ---------------------------------------------------------------------------#
|
||||||
|
# serv. module ctrl module [path] ...[args..] #
|
||||||
|
# name type flag #
|
||||||
|
# ---------------------------------------------------------------------------#
|
||||||
|
#
|
||||||
|
# The PAM configuration file for the `chfn' service
|
||||||
|
#
|
||||||
|
chfn auth required pam_unix.so
|
||||||
|
chfn account required pam_unix.so
|
||||||
|
chfn password required pam_unix.so shadow md5 use_authtok
|
||||||
|
#
|
||||||
|
# The PAM configuration file for the `chsh' service
|
||||||
|
#
|
||||||
|
chsh auth required pam_unix.so
|
||||||
|
chsh account required pam_unix.so
|
||||||
|
chsh password required pam_unix.so shadow md5 use_authtok
|
||||||
|
#
|
||||||
|
# The PAM configuration file for the `ftp' service
|
||||||
|
#
|
||||||
|
ftp auth requisite pam_listfile.so \
|
||||||
|
item=user sense=deny file=/etc/ftpusers onerr=succeed
|
||||||
|
ftp auth requisite pam_shells.so
|
||||||
|
ftp auth required pam_unix.so
|
||||||
|
ftp account required pam_unix.so
|
||||||
|
#
|
||||||
|
# The PAM configuration file for the `imap' service
|
||||||
|
#
|
||||||
|
imap auth required pam_unix.so
|
||||||
|
imap account required pam_unix.so
|
||||||
|
#
|
||||||
|
# The PAM configuration file for the `login' service
|
||||||
|
#
|
||||||
|
login auth requisite pam_securetty.so
|
||||||
|
login auth required pam_unix.so
|
||||||
|
login auth optional pam_group.so
|
||||||
|
login account requisite pam_time.so
|
||||||
|
login account required pam_unix.so
|
||||||
|
login password required pam_unix.so shadow md5 use_authtok
|
||||||
|
login session required pam_unix.so
|
||||||
|
#
|
||||||
|
# The PAM configuration file for the `netatalk' service
|
||||||
|
#
|
||||||
|
netatalk auth required pam_unix.so
|
||||||
|
netatalk account required pam_unix.so
|
||||||
|
#
|
||||||
|
# The PAM configuration file for the `other' service
|
||||||
|
#
|
||||||
|
other auth required pam_deny.so
|
||||||
|
other auth required pam_warn.so
|
||||||
|
other account required pam_deny.so
|
||||||
|
other password required pam_deny.so
|
||||||
|
other password required pam_warn.so
|
||||||
|
other session required pam_deny.so
|
||||||
|
#
|
||||||
|
# The PAM configuration file for the `passwd' service
|
||||||
|
#
|
||||||
|
passwd password required pam_unix.so shadow md5 use_authtok
|
||||||
|
#
|
||||||
|
# The PAM configuration file for the `rexec' service
|
||||||
|
#
|
||||||
|
rexec auth requisite pam_securetty.so
|
||||||
|
rexec auth requisite pam_nologin.so
|
||||||
|
rexec auth sufficient pam_rhosts_auth.so
|
||||||
|
rexec auth required pam_unix.so
|
||||||
|
rexec account required pam_unix.so
|
||||||
|
rexec session required pam_unix.so
|
||||||
|
rexec session required pam_limits.so
|
||||||
|
#
|
||||||
|
# The PAM configuration file for the `rlogin' service
|
||||||
|
# this application passes control to `login' if it fails
|
||||||
|
#
|
||||||
|
rlogin auth requisite pam_securetty.so
|
||||||
|
rlogin auth requisite pam_nologin.so
|
||||||
|
rlogin auth required pam_rhosts_auth.so
|
||||||
|
rlogin account required pam_unix.so
|
||||||
|
rlogin password required pam_unix.so shadow md5 use_authtok
|
||||||
|
rlogin session required pam_unix.so
|
||||||
|
rlogin session required pam_limits.so
|
||||||
|
#
|
||||||
|
# The PAM configuration file for the `rsh' service
|
||||||
|
#
|
||||||
|
rsh auth requisite pam_securetty.so
|
||||||
|
rsh auth requisite pam_nologin.so
|
||||||
|
rsh auth sufficient pam_rhosts_auth.so
|
||||||
|
rsh auth required pam_unix.so
|
||||||
|
rsh account required pam_unix.so
|
||||||
|
rsh session required pam_unix.so
|
||||||
|
rsh session required pam_limits.so
|
||||||
|
#
|
||||||
|
# The PAM configuration file for the `samba' service
|
||||||
|
#
|
||||||
|
samba auth required pam_unix.so
|
||||||
|
samba account required pam_unix.so
|
||||||
|
#
|
||||||
|
# The PAM configuration file for the `su' service
|
||||||
|
#
|
||||||
|
su auth required pam_wheel.so
|
||||||
|
su auth sufficient pam_rootok.so
|
||||||
|
su auth required pam_unix.so
|
||||||
|
su account required pam_unix.so
|
||||||
|
su session required pam_unix.so
|
||||||
|
#
|
||||||
|
# The PAM configuration file for the `vlock' service
|
||||||
|
#
|
||||||
|
vlock auth required pam_unix.so
|
||||||
|
#
|
||||||
|
# The PAM configuration file for the `xdm' service
|
||||||
|
#
|
||||||
|
xdm auth required pam_unix.so
|
||||||
|
xdm account required pam_unix.so
|
||||||
|
#
|
||||||
|
# The PAM configuration file for the `xlock' service
|
||||||
|
#
|
||||||
|
xlock auth required pam_unix.so
|
8
conf/pam_conv1/README
Normal file
8
conf/pam_conv1/README
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
This directory contains a utility to convert pam.conf files to a pam.d/
|
||||||
|
tree. The conversion program takes pam.conf from the standard input and
|
||||||
|
creates the pam.d/ directory in the current directory.
|
||||||
|
|
||||||
|
The program will fail if ./pam.d/ already exists.
|
||||||
|
|
||||||
|
Andrew Morgan, February 1997
|
25
conf/pam_conv1/meson.build
Normal file
25
conf/pam_conv1/meson.build
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
pam_conv_y = custom_target(
|
||||||
|
'pam_conv_y.[ch]',
|
||||||
|
input: 'pam_conv_y.y',
|
||||||
|
output: ['pam_conv_y.c', 'pam_conv_y.h'],
|
||||||
|
command: yacc_cmd,
|
||||||
|
)
|
||||||
|
|
||||||
|
pam_conv_l = custom_target(
|
||||||
|
'pam_conv_l.c',
|
||||||
|
input: 'pam_conv_l.l',
|
||||||
|
output: 'pam_conv_l.c',
|
||||||
|
depends: pam_conv_y,
|
||||||
|
command: [prog_flex, '-o', '@OUTPUT@', '@INPUT@'],
|
||||||
|
)
|
||||||
|
|
||||||
|
executable(
|
||||||
|
'pam_conv1',
|
||||||
|
sources: [pam_conv_l, pam_conv_y],
|
||||||
|
include_directories: [libpam_inc],
|
||||||
|
c_args: [
|
||||||
|
'-Wno-unused-function',
|
||||||
|
'-Wno-sign-compare',
|
||||||
|
],
|
||||||
|
link_args: exe_link_args,
|
||||||
|
)
|
45
conf/pam_conv1/pam_conv_l.l
Normal file
45
conf/pam_conv1/pam_conv_l.l
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
|
||||||
|
%{
|
||||||
|
/*
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* Copyright (c) Andrew G. Morgan 1997 <morgan@parc.power.net>
|
||||||
|
*
|
||||||
|
* This file is covered by the Linux-PAM License (which should be
|
||||||
|
* distributed with this file.)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "pam_conv_y.h"
|
||||||
|
|
||||||
|
extern unsigned long long current_line;
|
||||||
|
%}
|
||||||
|
|
||||||
|
%option noyywrap
|
||||||
|
%%
|
||||||
|
|
||||||
|
"#"[^\n]* ; /* skip comments (sorry) */
|
||||||
|
|
||||||
|
"\\\n" {
|
||||||
|
++current_line;
|
||||||
|
}
|
||||||
|
|
||||||
|
([^\n\t ]|[\\][^\n])+ {
|
||||||
|
return TOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
[ \t]+ ; /* Ignore */
|
||||||
|
|
||||||
|
<<EOF>> {
|
||||||
|
return EOFILE;
|
||||||
|
}
|
||||||
|
|
||||||
|
[\n] {
|
||||||
|
++current_line;
|
||||||
|
return NL;
|
||||||
|
}
|
||||||
|
|
||||||
|
%%
|
217
conf/pam_conv1/pam_conv_y.y
Normal file
217
conf/pam_conv1/pam_conv_y.y
Normal file
|
@ -0,0 +1,217 @@
|
||||||
|
%{
|
||||||
|
|
||||||
|
/*
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* Copyright (c) Andrew G. Morgan 1997 <morgan@parc.power.net>
|
||||||
|
*
|
||||||
|
* This file is covered by the Linux-PAM License (which should be
|
||||||
|
* distributed with this file.)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#include <security/_pam_types.h>
|
||||||
|
|
||||||
|
extern int yylex(void);
|
||||||
|
|
||||||
|
unsigned long long current_line=0;
|
||||||
|
extern char *yytext;
|
||||||
|
|
||||||
|
/* XXX - later we'll change this to be the specific conf file(s) */
|
||||||
|
#define newpamf stderr
|
||||||
|
|
||||||
|
#define PAM_D "./pam.d"
|
||||||
|
#define PAM_D_MODE 0755
|
||||||
|
#define PAM_D_MAGIC_HEADER \
|
||||||
|
"#%%PAM-1.0\n" \
|
||||||
|
"#[For version 1.0 syntax, the above header is optional]\n"
|
||||||
|
|
||||||
|
#define PAM_D_FILE_FMT PAM_D "/%s"
|
||||||
|
|
||||||
|
const char *old_to_new_ctrl_flag(const char *old);
|
||||||
|
void yyerror(const char *format, ...);
|
||||||
|
%}
|
||||||
|
|
||||||
|
%union {
|
||||||
|
int def;
|
||||||
|
char *string;
|
||||||
|
}
|
||||||
|
|
||||||
|
%token NL EOFILE TOK
|
||||||
|
|
||||||
|
%type <string> tok path tokenls
|
||||||
|
|
||||||
|
%start complete
|
||||||
|
|
||||||
|
%%
|
||||||
|
|
||||||
|
complete
|
||||||
|
:
|
||||||
|
| complete NL
|
||||||
|
| complete line
|
||||||
|
| complete EOFILE {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
line
|
||||||
|
: tok tok tok path tokenls NL {
|
||||||
|
char *filename;
|
||||||
|
FILE *conf;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* make sure we have lower case */
|
||||||
|
for (i=0; $1[i]; ++i) {
|
||||||
|
$1[i] = tolower((unsigned char)$1[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* $1 = service-name */
|
||||||
|
yyerror("Appending to " PAM_D "/%s", $1);
|
||||||
|
|
||||||
|
if (asprintf(&filename, PAM_D_FILE_FMT, $1) < 0) {
|
||||||
|
yyerror("unable to create filename - aborting");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
conf = fopen(filename, "r");
|
||||||
|
if (conf == NULL) {
|
||||||
|
/* new file */
|
||||||
|
conf = fopen(filename, "w");
|
||||||
|
if (conf != NULL) {
|
||||||
|
fprintf(conf, PAM_D_MAGIC_HEADER);
|
||||||
|
fprintf(conf,
|
||||||
|
"#\n"
|
||||||
|
"# The PAM configuration file for the `%s' service\n"
|
||||||
|
"#\n", $1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fclose(conf);
|
||||||
|
conf = fopen(filename, "a");
|
||||||
|
}
|
||||||
|
if (conf == NULL) {
|
||||||
|
yyerror("trouble opening %s - aborting", filename);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
free(filename);
|
||||||
|
free($1);
|
||||||
|
|
||||||
|
/* $2 = module-type */
|
||||||
|
fprintf(conf, "%-10s", $2);
|
||||||
|
free($2);
|
||||||
|
|
||||||
|
/* $3 = required etc. */
|
||||||
|
{
|
||||||
|
const char *trans;
|
||||||
|
|
||||||
|
trans = old_to_new_ctrl_flag($3);
|
||||||
|
free($3);
|
||||||
|
fprintf(conf, " %-10s", trans);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* $4 = module-path */
|
||||||
|
fprintf(conf, " %s", $4);
|
||||||
|
free($4);
|
||||||
|
|
||||||
|
/* $5 = arguments */
|
||||||
|
if ($5 != NULL) {
|
||||||
|
fprintf(conf, " \\\n\t\t%s", $5);
|
||||||
|
free($5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* end line */
|
||||||
|
fprintf(conf, "\n");
|
||||||
|
|
||||||
|
fclose(conf);
|
||||||
|
}
|
||||||
|
| error NL {
|
||||||
|
yyerror("malformed line");
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
tokenls
|
||||||
|
: {
|
||||||
|
$$=NULL;
|
||||||
|
}
|
||||||
|
| tokenls tok {
|
||||||
|
if ($1) {
|
||||||
|
if (asprintf(&$$, "%s %s", $1, $2) < 0) {
|
||||||
|
yyerror("failed to assemble tokenls");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
free($1);
|
||||||
|
free($2);
|
||||||
|
} else {
|
||||||
|
$$ = $2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
path
|
||||||
|
: TOK {
|
||||||
|
/* XXX - this could be used to check if file present */
|
||||||
|
$$ = strdup(yytext);
|
||||||
|
if ($$ == NULL) {
|
||||||
|
yyerror("failed to duplicate path");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tok
|
||||||
|
: TOK {
|
||||||
|
$$ = strdup(yytext);
|
||||||
|
if ($$ == NULL) {
|
||||||
|
yyerror("failed to duplicate token");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
%%
|
||||||
|
|
||||||
|
const char *old_to_new_ctrl_flag(const char *old)
|
||||||
|
{
|
||||||
|
static const char *const clist[] = {
|
||||||
|
"requisite",
|
||||||
|
"required",
|
||||||
|
"sufficient",
|
||||||
|
"optional",
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i=0; clist[i]; ++i) {
|
||||||
|
if (strcasecmp(clist[i], old) == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return clist[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
PAM_FORMAT((printf, 1, 2))
|
||||||
|
void yyerror(const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
fprintf(stderr, "line %llu: ", current_line);
|
||||||
|
va_start(args, format);
|
||||||
|
vfprintf(stderr, format, args);
|
||||||
|
va_end(args);
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
if (mkdir(PAM_D, PAM_D_MODE) != 0) {
|
||||||
|
yyerror(PAM_D " already exists.. aborting");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
yyparse();
|
||||||
|
return 0;
|
||||||
|
}
|
749
doc/adg/Linux-PAM_ADG.xml
Normal file
749
doc/adg/Linux-PAM_ADG.xml
Normal file
|
@ -0,0 +1,749 @@
|
||||||
|
<book xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg">
|
||||||
|
<info>
|
||||||
|
<title>The Linux-PAM Application Developers' Guide</title>
|
||||||
|
<authorgroup>
|
||||||
|
<author><personname><firstname>Andrew G.</firstname><surname>Morgan</surname></personname><email>morgan@kernel.org</email></author>
|
||||||
|
<author><personname><firstname>Thorsten</firstname><surname>Kukuk</surname></personname><email>kukuk@thkukuk.de</email></author>
|
||||||
|
</authorgroup>
|
||||||
|
<releaseinfo>Version 1.1.2, 31. August 2010</releaseinfo>
|
||||||
|
<abstract>
|
||||||
|
<para>
|
||||||
|
This manual documents what an application developer needs to know
|
||||||
|
about the <emphasis remap="B">Linux-PAM</emphasis> library. It
|
||||||
|
describes how an application might use the
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> library to authenticate
|
||||||
|
users. In addition it contains a description of the functions
|
||||||
|
to be found in <filename>libpam_misc</filename> library, that can
|
||||||
|
be used in general applications. Finally, it contains some comments
|
||||||
|
on PAM related security issues for the application developer.
|
||||||
|
</para>
|
||||||
|
</abstract>
|
||||||
|
</info>
|
||||||
|
|
||||||
|
<chapter xml:id="adg-introduction">
|
||||||
|
<title>Introduction</title>
|
||||||
|
<section xml:id="adg-introduction-description">
|
||||||
|
<title>Description</title>
|
||||||
|
<para>
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis>
|
||||||
|
(Pluggable Authentication Modules for Linux) is a library that enables
|
||||||
|
the local system administrator to choose how individual applications
|
||||||
|
authenticate users. For an overview of the
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> library see the
|
||||||
|
<emphasis>Linux-PAM System Administrators' Guide</emphasis>.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
It is the purpose of the <emphasis remap="B">Linux-PAM</emphasis>
|
||||||
|
project to liberate the development of privilege granting software
|
||||||
|
from the development of secure and appropriate authentication schemes.
|
||||||
|
This is accomplished by providing a documented library of functions
|
||||||
|
that an application may use for all forms of user authentication
|
||||||
|
management. This library dynamically loads locally configured
|
||||||
|
authentication modules that actually perform the authentication tasks.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
From the perspective of an application developer the information
|
||||||
|
contained in the local configuration of the PAM library should not be
|
||||||
|
important. Indeed it is intended that an application treat the
|
||||||
|
functions documented here as a 'black box' that will deal with all
|
||||||
|
aspects of user authentication. 'All aspects' includes user
|
||||||
|
verification, account management, session initialization/termination
|
||||||
|
and also the resetting of passwords
|
||||||
|
(<emphasis>authentication tokens</emphasis>).
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section xml:id="adg-introduction-synopsis">
|
||||||
|
<title>Synopsis</title>
|
||||||
|
<para>
|
||||||
|
For general applications that wish to use the services provided by
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> the following is a summary
|
||||||
|
of the relevant linking information:
|
||||||
|
<programlisting>
|
||||||
|
#include <security/pam_appl.h>
|
||||||
|
|
||||||
|
cc -o application .... -lpam
|
||||||
|
</programlisting>
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
In addition to <command>libpam</command>, there is a library of
|
||||||
|
miscellaneous functions that make the job of writing
|
||||||
|
<emphasis>PAM-aware</emphasis> applications easier (this library is not
|
||||||
|
covered in the DCE-RFC for PAM and is specific to the Linux-PAM
|
||||||
|
distribution):
|
||||||
|
<programlisting>
|
||||||
|
#include <security/pam_appl.h>
|
||||||
|
#include <security/pam_misc.h>
|
||||||
|
|
||||||
|
cc -o application .... -lpam -lpam_misc
|
||||||
|
</programlisting>
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="adg-overview">
|
||||||
|
<title>Overview</title>
|
||||||
|
<para>
|
||||||
|
Most service-giving applications are restricted. In other words,
|
||||||
|
their service is not available to all and every prospective client.
|
||||||
|
Instead, the applying client must jump through a number of hoops to
|
||||||
|
convince the serving application that they are authorized to obtain
|
||||||
|
service.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The process of <emphasis>authenticating</emphasis> a client is what
|
||||||
|
PAM is designed to manage. In addition to authentication, PAM provides
|
||||||
|
account management, credential management, session management and
|
||||||
|
authentication-token (password changing) management services. It is
|
||||||
|
important to realize when writing a PAM based application that these
|
||||||
|
services are provided in a manner that is
|
||||||
|
<emphasis remap="B">transparent</emphasis> to the application. That is
|
||||||
|
to say, when the application is written, no assumptions can be made
|
||||||
|
about <emphasis>how</emphasis> the client will be authenticated.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The process of authentication is performed by the PAM library via a
|
||||||
|
call to <function>pam_authenticate()</function>. The return value
|
||||||
|
of this function will indicate whether a named client (the
|
||||||
|
<emphasis>user</emphasis>) has been authenticated. If the PAM library
|
||||||
|
needs to prompt the user for any information, such as their
|
||||||
|
<emphasis>name</emphasis> or a <emphasis>password</emphasis>
|
||||||
|
then it will do so. If the PAM library is configured to authenticate
|
||||||
|
the user using some silent protocol, it will do this too. (This
|
||||||
|
latter case might be via some hardware interface for example.)
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
It is important to note that the application must leave all decisions
|
||||||
|
about when to prompt the user at the discretion of the PAM library.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The PAM library, however, must work equally well for different styles
|
||||||
|
of application. Some applications, like the familiar
|
||||||
|
<command>login</command> and <command>passwd</command> are terminal
|
||||||
|
based applications, exchanges of information with the client in
|
||||||
|
these cases is as plain text messages. Graphically based applications,
|
||||||
|
however, have a more sophisticated interface. They generally interact
|
||||||
|
with the user via specially constructed dialogue boxes. Additionally,
|
||||||
|
network based services require that text messages exchanged with the
|
||||||
|
client are specially formatted for automated processing: one such
|
||||||
|
example is <command>ftpd</command> which prefixes each exchanged
|
||||||
|
message with a numeric identifier.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The presentation of simple requests to a client is thus something very
|
||||||
|
dependent on the protocol that the serving application will use. In
|
||||||
|
spite of the fact that PAM demands that it drives the whole
|
||||||
|
authentication process, it is not possible to leave such protocol
|
||||||
|
subtleties up to the PAM library. To overcome this potential problem,
|
||||||
|
the application provides the PAM library with a
|
||||||
|
<emphasis>conversation</emphasis> function. This function is called
|
||||||
|
from <emphasis>within</emphasis> the PAM library and enables the PAM
|
||||||
|
to directly interact with the client. The sorts of things that this
|
||||||
|
conversation function must be able to do are prompt the user with
|
||||||
|
text and/or obtain textual input from the user for processing by the
|
||||||
|
PAM library. The details of this function are provided in a later
|
||||||
|
section.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
For example, the conversation function may be called by the PAM
|
||||||
|
library with a request to prompt the user for a password. Its job is
|
||||||
|
to reformat the prompt request into a form that the client will
|
||||||
|
understand. In the case of <command>ftpd</command>, this might involve
|
||||||
|
prefixing the string with the number <command>331</command> and sending
|
||||||
|
the request over the network to a connected client. The conversation
|
||||||
|
function will then obtain any reply and, after extracting the typed
|
||||||
|
password, will return this string of text to the PAM library. Similar
|
||||||
|
concerns need to be addressed in the case of an X-based graphical
|
||||||
|
server.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
There are a number of issues that need to be addressed when one is
|
||||||
|
porting an existing application to become PAM compliant. A section
|
||||||
|
below has been devoted to this: Porting legacy applications.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Besides authentication, PAM provides other forms of management.
|
||||||
|
Session management is provided with calls to
|
||||||
|
<function>pam_open_session()</function> and
|
||||||
|
<function>pam_close_session()</function>. What these functions
|
||||||
|
actually do is up to the local administrator. But typically, they
|
||||||
|
could be used to log entry and exit from the system or for mounting
|
||||||
|
and unmounting the user's home directory. If an application provides
|
||||||
|
continuous service for a period of time, it should probably call
|
||||||
|
these functions, first open after the user is authenticated and then
|
||||||
|
close when the service is terminated.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Account management is another area that an application developer
|
||||||
|
should include with a call to <function>pam_acct_mgmt()</function>.
|
||||||
|
This call will perform checks on the good health of the user's account
|
||||||
|
(has it expired etc.). One of the things this function may check is
|
||||||
|
whether the user's authentication token has expired - in such a case the
|
||||||
|
application may choose to attempt to update it with a call to
|
||||||
|
<function>pam_chauthtok()</function>, although some applications
|
||||||
|
are not suited to this task (<command>ftp</command> for example)
|
||||||
|
and in this case the application should deny access to the user.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
PAM is also capable of setting and deleting the user's credentials with
|
||||||
|
the call <function>pam_setcred()</function>. This function should
|
||||||
|
always be called after the user is authenticated and before service
|
||||||
|
is offered to the user. By convention, this should be the last call
|
||||||
|
to the PAM library before the PAM session is opened. What exactly a
|
||||||
|
credential is, is not well defined. However, some examples are given
|
||||||
|
in the glossary below.
|
||||||
|
</para>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="adg-interface">
|
||||||
|
<title>
|
||||||
|
The public interface to <emphasis remap="B">Linux-PAM</emphasis>
|
||||||
|
</title>
|
||||||
|
<para>
|
||||||
|
Firstly, the relevant include file for the
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> library is
|
||||||
|
<function><security/pam_appl.h></function>.
|
||||||
|
It contains the definitions for a number of functions. After
|
||||||
|
listing these functions, we collect some guiding remarks for
|
||||||
|
programmers.
|
||||||
|
</para>
|
||||||
|
<section xml:id="adg-interface-by-app-expected">
|
||||||
|
<title>What can be expected by the application</title>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_start.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_end.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_set_item.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_get_item.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_strerror.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_fail_delay.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_authenticate.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_setcred.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_acct_mgmt.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_chauthtok.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_open_session.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_close_session.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_putenv.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_getenv.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_getenvlist.xml"/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-interface-of-app-expected">
|
||||||
|
<title>What is expected of an application</title>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_conv.xml"/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-interface-programming-notes">
|
||||||
|
<title>Programming notes</title>
|
||||||
|
<para>
|
||||||
|
Note, all of the authentication service function calls accept the
|
||||||
|
token <emphasis remap="B">PAM_SILENT</emphasis>, which instructs
|
||||||
|
the modules to not send messages to the application. This token
|
||||||
|
can be logically OR'd with any one of the permitted tokens specific
|
||||||
|
to the individual function calls.
|
||||||
|
<emphasis remap="B">PAM_SILENT</emphasis> does not override the
|
||||||
|
prompting of the user for passwords etc., it only stops informative
|
||||||
|
messages from being generated.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="adg-security">
|
||||||
|
<title>
|
||||||
|
Security issues of <emphasis remap="B">Linux-PAM</emphasis>
|
||||||
|
</title>
|
||||||
|
<para>
|
||||||
|
PAM, from the perspective of an application, is a convenient API for
|
||||||
|
authenticating users. PAM modules generally have no increased
|
||||||
|
privilege over that possessed by the application that is making use of
|
||||||
|
it. For this reason, the application must take ultimate responsibility
|
||||||
|
for protecting the environment in which PAM operates.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
A poorly (or maliciously) written application can defeat any
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> module's authentication
|
||||||
|
mechanisms by simply ignoring it's return values. It is the
|
||||||
|
applications task and responsibility to grant privileges and access
|
||||||
|
to services. The <emphasis remap="B">Linux-PAM</emphasis> library
|
||||||
|
simply assumes the responsibility of <emphasis>authenticating</emphasis>
|
||||||
|
the user; ascertaining that the user <emphasis>is</emphasis> who they
|
||||||
|
say they are. Care should be taken to anticipate all of the documented
|
||||||
|
behavior of the <emphasis remap="B">Linux-PAM</emphasis> library
|
||||||
|
functions. A failure to do this will most certainly lead to a future
|
||||||
|
security breach.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<section xml:id="adg-security-library-calls">
|
||||||
|
<title>Care about standard library calls</title>
|
||||||
|
<para>
|
||||||
|
In general, writers of authorization-granting applications should
|
||||||
|
assume that each module is likely to call any or
|
||||||
|
<emphasis>all</emphasis> 'libc' functions. For 'libc' functions
|
||||||
|
that return pointers to static/dynamically allocated structures
|
||||||
|
(ie. the library allocates the memory and the user is not expected
|
||||||
|
to '<function>free()</function>' it) any module call to this
|
||||||
|
function is likely to corrupt a pointer previously
|
||||||
|
obtained by the application. The application programmer should
|
||||||
|
either re-call such a 'libc' function after a call to the
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> library, or copy the
|
||||||
|
structure contents to some safe area of memory before passing
|
||||||
|
control to the <emphasis remap="B">Linux-PAM</emphasis> library.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Two important function classes that fall into this category are
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>getpwnam</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> and <citerefentry>
|
||||||
|
<refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section xml:id="adg-security-service-name">
|
||||||
|
<title>Choice of a service name</title>
|
||||||
|
<para>
|
||||||
|
When picking the <emphasis>service-name</emphasis> that
|
||||||
|
corresponds to the first entry in the
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> configuration file,
|
||||||
|
the application programmer should <emphasis>avoid</emphasis>
|
||||||
|
the temptation of choosing something related to
|
||||||
|
<varname>argv[0]</varname>. It is a trivial matter for any user
|
||||||
|
to invoke any application on a system under a different name and
|
||||||
|
this should not be permitted to cause a security breach.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
In general, this is always the right advice if the program is
|
||||||
|
setuid, or otherwise more privileged than the user that invokes
|
||||||
|
it. In some cases, avoiding this advice is convenient, but as an
|
||||||
|
author of such an application, you should consider well the ways
|
||||||
|
in which your program will be installed and used. (Its often the
|
||||||
|
case that programs are not intended to be setuid, but end up
|
||||||
|
being installed that way for convenience. If your program falls
|
||||||
|
into this category, don't fall into the trap of making this mistake.)
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
To invoke some <emphasis>target</emphasis> application by
|
||||||
|
another name, the user may symbolically link the target application
|
||||||
|
with the desired name. To be precise all the user need do is,
|
||||||
|
<command>ln -s /target/application ./preferred_name</command>
|
||||||
|
and then run <command>./preferred_name</command>.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
By studying the <emphasis remap="B">Linux-PAM</emphasis>
|
||||||
|
configuration file(s), an attacker can choose the
|
||||||
|
<command>preferred_name</command> to be that of a service enjoying
|
||||||
|
minimal protection; for example a game which uses
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> to restrict access to
|
||||||
|
certain hours of the day. If the service-name were to be linked
|
||||||
|
to the filename under which the service was invoked, it
|
||||||
|
is clear that the user is effectively in the position of
|
||||||
|
dictating which authentication scheme the service uses. Needless
|
||||||
|
to say, this is not a secure situation.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The conclusion is that the application developer should carefully
|
||||||
|
define the service-name of an application. The safest thing is to
|
||||||
|
make it a single hard-wired name.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section xml:id="adg-security-conv-function">
|
||||||
|
<title>The conversation function</title>
|
||||||
|
<para>
|
||||||
|
Care should be taken to ensure that the <function>conv()</function>
|
||||||
|
function is robust. Such a function is provided in the library
|
||||||
|
<command>libpam_misc</command> (see
|
||||||
|
<link linkend="adg-libpam-functions">below</link>).
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section xml:id="adg-security-user-identity">
|
||||||
|
<title>The identity of the user</title>
|
||||||
|
<para>
|
||||||
|
The <emphasis remap="B">Linux-PAM</emphasis> modules will need
|
||||||
|
to determine the identity of the user who requests a service,
|
||||||
|
and the identity of the user who grants the service. These two
|
||||||
|
users will seldom be the same. Indeed there is generally a third
|
||||||
|
user identity to be considered, the new (assumed) identity of
|
||||||
|
the user once the service is granted.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The need for keeping tabs on these identities is clearly an
|
||||||
|
issue of security. One convention that is actively used by
|
||||||
|
some modules is that the identity of the user requesting a
|
||||||
|
service should be the current <emphasis>UID</emphasis>
|
||||||
|
(user ID) of the running process; the identity of the
|
||||||
|
privilege granting user is the <emphasis>EUID</emphasis>
|
||||||
|
(effective user ID) of the running process; the identity of
|
||||||
|
the user, under whose name the service will be executed, is
|
||||||
|
given by the contents of the <emphasis>PAM_USER</emphasis>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>. Note, modules can change the values of
|
||||||
|
<emphasis>PAM_USER</emphasis> and <emphasis>PAM_RUSER</emphasis>
|
||||||
|
during any of the <function>pam_*()</function> library calls.
|
||||||
|
For this reason, the application should take care to use the
|
||||||
|
<function>pam_get_item()</function> every time it wishes to
|
||||||
|
establish who the authenticated user is (or will currently be).
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
For network-serving databases and other applications that provide
|
||||||
|
their own security model (independent of the OS kernel) the above
|
||||||
|
scheme is insufficient to identify the requesting user.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
A more portable solution to storing the identity of the requesting
|
||||||
|
user is to use the <emphasis>PAM_RUSER</emphasis> <citerefentry>
|
||||||
|
<refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>. The application should supply this value before
|
||||||
|
attempting to authenticate the user with
|
||||||
|
<function>pam_authenticate()</function>. How well this name can be
|
||||||
|
trusted will ultimately be at the discretion of the local
|
||||||
|
administrator (who configures PAM for your application) and a
|
||||||
|
selected module may attempt to override the value where it can
|
||||||
|
obtain more reliable data. If an application is unable to determine
|
||||||
|
the identity of the requesting entity/user, it should not call
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_set_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> to set <emphasis>PAM_RUSER</emphasis>.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
In addition to the <emphasis>PAM_RUSER</emphasis> item, the
|
||||||
|
application should supply the <emphasis>PAM_RHOST</emphasis>
|
||||||
|
(<emphasis>requesting host</emphasis>) item. As a general rule,
|
||||||
|
the following convention for its value can be assumed:
|
||||||
|
NULL = unknown; localhost = invoked directly from the local system;
|
||||||
|
<emphasis>other.place.xyz</emphasis> = some component of the
|
||||||
|
user's connection originates from this remote/requesting host. At
|
||||||
|
present, PAM has no established convention for indicating whether
|
||||||
|
the application supports a trusted path to communication from
|
||||||
|
this host.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section xml:id="adg-security-resources">
|
||||||
|
<title>Sufficient resources</title>
|
||||||
|
<para>
|
||||||
|
Care should be taken to ensure that the proper execution of an
|
||||||
|
application is not compromised by a lack of system resources. If an
|
||||||
|
application is unable to open sufficient files to perform its service,
|
||||||
|
it should fail gracefully, or request additional resources.
|
||||||
|
Specifically, the quantities manipulated by the <citerefentry>
|
||||||
|
<refentrytitle>setrlimit</refentrytitle><manvolnum>2</manvolnum>
|
||||||
|
</citerefentry> family of commands should be taken into consideration.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
This is also true of conversation prompts. The application should not
|
||||||
|
accept prompts of arbitrary length with out checking for resource
|
||||||
|
allocation failure and dealing with such extreme conditions gracefully
|
||||||
|
and in a manner that preserves the PAM API. Such tolerance may be
|
||||||
|
especially important when attempting to track a malicious adversary.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="adg-libpam_misc">
|
||||||
|
<title>A library of miscellaneous helper functions</title>
|
||||||
|
<para>
|
||||||
|
To aid the work of the application developer a library of
|
||||||
|
miscellaneous functions is provided. It is called
|
||||||
|
<command>libpam_misc</command>, and contains a text based
|
||||||
|
conversation function, and routines for enhancing the standard
|
||||||
|
PAM-environment variable support.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The functions, structures and macros, made available by this
|
||||||
|
library can be defined by including
|
||||||
|
<function><security/pam_misc.h></function>. It should be
|
||||||
|
noted that this library is specific to
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> and is not referred to in
|
||||||
|
the defining DCE-RFC (see <link linkend="adg-see-also">See also</link>)
|
||||||
|
below.
|
||||||
|
</para>
|
||||||
|
<section xml:id="adg-libpam-functions">
|
||||||
|
<title>Functions supplied</title>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_misc_conv.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_misc_paste_env.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_misc_drop_env.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_misc_setenv.xml"/>
|
||||||
|
</section>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="adg-porting">
|
||||||
|
<title>Porting legacy applications</title>
|
||||||
|
<para>
|
||||||
|
The point of PAM is that the application is not supposed to
|
||||||
|
have any idea how the attached authentication modules will choose
|
||||||
|
to authenticate the user. So all they can do is provide a conversation
|
||||||
|
function that will talk directly to the user(client) on the modules'
|
||||||
|
behalf.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Consider the case that you plug a retinal scanner into the login
|
||||||
|
program. In this situation the user would be prompted: "please look
|
||||||
|
into the scanner". No username or password would be needed - all this
|
||||||
|
information could be deduced from the scan and a database lookup. The
|
||||||
|
point is that the retinal scanner is an ideal task for a "module".
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
While it is true that a pop-daemon program is designed with the POP
|
||||||
|
protocol in mind and no-one ever considered attaching a retinal
|
||||||
|
scanner to it, it is also the case that the "clean" PAM'ification of
|
||||||
|
such a daemon would allow for the possibility of a scanner module
|
||||||
|
being be attached to it. The point being that the "standard"
|
||||||
|
pop-authentication protocol(s) [which will be needed to satisfy
|
||||||
|
inflexible/legacy clients] would be supported by inserting an
|
||||||
|
appropriate pam_qpopper module(s). However, having rewritten
|
||||||
|
<command>popd</command> once in this way any new protocols can be
|
||||||
|
implemented in-situ.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
One simple test of a ported application would be to insert the
|
||||||
|
<command>pam_permit</command> module and see if the application
|
||||||
|
demands you type a password... In such a case, <command>xlock</command>
|
||||||
|
would fail to lock the terminal - or would at best be a screen-saver,
|
||||||
|
ftp would give password free access to all etc.. Neither of
|
||||||
|
these is a very secure thing to do, but they do illustrate how
|
||||||
|
much flexibility PAM puts in the hands of the local admin.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The key issue, in doing things correctly, is identifying what is part
|
||||||
|
of the authentication procedure (how many passwords etc..) the
|
||||||
|
exchange protocol (prefixes to prompts etc., numbers like 331 in the
|
||||||
|
case of ftpd) and what is part of the service that the application
|
||||||
|
delivers. PAM really needs to have total control in the
|
||||||
|
authentication "procedure", the conversation function should only
|
||||||
|
deal with reformatting user prompts and extracting responses from raw
|
||||||
|
input.
|
||||||
|
</para>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="adg-glossary">
|
||||||
|
<title>Glossary of PAM related terms</title>
|
||||||
|
<para>
|
||||||
|
The following are a list of terms used within this document.
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Authentication token</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Generally, this is a password. However, users can authenticate
|
||||||
|
themselves in a variety of ways. Updating the user's
|
||||||
|
authentication token thus corresponds to
|
||||||
|
<emphasis>refreshing</emphasis> the object they use to
|
||||||
|
authenticate themselves with the system. The word password is
|
||||||
|
avoided to keep open the possibility that the authentication
|
||||||
|
involves a retinal scan or other non-textual mode of
|
||||||
|
challenge/response.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Credentials</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Having successfully authenticated the user, PAM is able to
|
||||||
|
establish certain characteristics/attributes of the user.
|
||||||
|
These are termed <emphasis>credentials</emphasis>. Examples
|
||||||
|
of which are group memberships to perform privileged tasks
|
||||||
|
with, and <emphasis>tickets</emphasis> in the form of
|
||||||
|
environment variables etc. . Some user-credentials, such as
|
||||||
|
the user's UID and GID (plus default group memberships) are
|
||||||
|
not deemed to be PAM-credentials. It is the responsibility
|
||||||
|
of the application to grant these directly.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="adg-example">
|
||||||
|
<title>An example application</title>
|
||||||
|
<para>
|
||||||
|
To get a flavor of the way a <emphasis remap="B">Linux-PAM</emphasis>
|
||||||
|
application is written we include the following example. It prompts
|
||||||
|
the user for their password and indicates whether their account
|
||||||
|
is valid on the standard output, its return code also indicates
|
||||||
|
the success (<returnvalue>0</returnvalue> for success;
|
||||||
|
<returnvalue>1</returnvalue> for failure).
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
/*
|
||||||
|
This program was contributed by Shane Watts
|
||||||
|
[modifications by AGM and kukuk]
|
||||||
|
|
||||||
|
You need to add the following (or equivalent) to the
|
||||||
|
/etc/pam.d/check_user file:
|
||||||
|
# check authorization
|
||||||
|
auth required pam_unix.so
|
||||||
|
account required pam_unix.so
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <security/pam_appl.h>
|
||||||
|
#include <security/pam_misc.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
static struct pam_conv conv = {
|
||||||
|
misc_conv,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
pam_handle_t *pamh=NULL;
|
||||||
|
int retval;
|
||||||
|
const char *user="nobody";
|
||||||
|
|
||||||
|
if(argc == 2) {
|
||||||
|
user = argv[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(argc > 2) {
|
||||||
|
fprintf(stderr, "Usage: check_user [username]\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
retval = pam_start("check_user", user, &conv, &pamh);
|
||||||
|
|
||||||
|
if (retval == PAM_SUCCESS)
|
||||||
|
retval = pam_authenticate(pamh, 0); /* is user really user? */
|
||||||
|
|
||||||
|
if (retval == PAM_SUCCESS)
|
||||||
|
retval = pam_acct_mgmt(pamh, 0); /* permitted access? */
|
||||||
|
|
||||||
|
/* This is where we have been authorized or not. */
|
||||||
|
|
||||||
|
if (retval == PAM_SUCCESS) {
|
||||||
|
fprintf(stdout, "Authenticated\n");
|
||||||
|
} else {
|
||||||
|
fprintf(stdout, "Not Authenticated\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pam_end(pamh,retval) != PAM_SUCCESS) { /* close Linux-PAM */
|
||||||
|
pamh = NULL;
|
||||||
|
fprintf(stderr, "check_user: failed to release authenticator\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ( retval == PAM_SUCCESS ? 0:1 ); /* indicate success */
|
||||||
|
}
|
||||||
|
|
||||||
|
</programlisting>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="adg-files">
|
||||||
|
<title>Files</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>/usr/include/security/pam_appl.h</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Header file with interfaces for
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> applications.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>/usr/include/security/pam_misc.h</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Header file for useful library functions for making
|
||||||
|
applications easier to write.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="adg-see-also">
|
||||||
|
<title>See also</title>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The Linux-PAM System Administrators' Guide.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The Linux-PAM Module Writers' Guide.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The V. Samar and R. Schemers (SunSoft), ``UNIFIED LOGIN WITH
|
||||||
|
PLUGGABLE AUTHENTICATION MODULES'', Open Software Foundation
|
||||||
|
Request For Comments 86.0, October 1995.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="adg-author">
|
||||||
|
<title>Author/acknowledgments</title>
|
||||||
|
<para>
|
||||||
|
This document was written by Andrew G. Morgan (morgan@kernel.org)
|
||||||
|
with many contributions from
|
||||||
|
Chris Adams, Peter Allgeyer, Tim Baverstock, Tim Berger, Craig S. Bell,
|
||||||
|
Derrick J. Brashear, Ben Buxton, Seth Chaiklin, Oliver Crow, Chris Dent,
|
||||||
|
Marc Ewing, Cristian Gafton, Emmanuel Galanos, Brad M. Garcia,
|
||||||
|
Eric Hester, Roger Hu, Eric Jacksch, Michael K. Johnson, David Kinchlea,
|
||||||
|
Olaf Kirch, Marcin Korzonek, Thorsten Kukuk, Stephen Langasek,
|
||||||
|
Nicolai Langfeldt, Elliot Lee, Luke Kenneth Casson Leighton,
|
||||||
|
Al Longyear, Ingo Luetkebohle, Marek Michalkiewicz, Robert Milkowski,
|
||||||
|
Aleph One, Martin Pool, Sean Reifschneider, Jan Rekorajski, Erik Troan,
|
||||||
|
Theodore Ts'o, Jeff Uphoff, Myles Uyema, Savochkin Andrey Vladimirovich,
|
||||||
|
Ronald Wahl, David Wood, John Wilmes, Joseph S. D. Yao
|
||||||
|
and Alex O. Yuriev.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Thanks are also due to Sun Microsystems, especially to Vipin Samar and
|
||||||
|
Charlie Lai for their advice. At an early stage in the development of
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis>, Sun graciously made the
|
||||||
|
documentation for their implementation of PAM available. This act
|
||||||
|
greatly accelerated the development of
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis>.
|
||||||
|
</para>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="adg-copyright">
|
||||||
|
<title>Copyright information for this document</title>
|
||||||
|
<programlisting>
|
||||||
|
Copyright (c) 2006 Thorsten Kukuk <kukuk@thkukuk.de>
|
||||||
|
Copyright (c) 1996-2002 Andrew G. Morgan <morgan@kernel.org>
|
||||||
|
</programlisting>
|
||||||
|
<para>
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, and the entire permission notice in its entirety,
|
||||||
|
including the disclaimer of warranties.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. The name of the author may not be used to endorse or promote
|
||||||
|
products derived from this software without specific prior
|
||||||
|
written permission.
|
||||||
|
</programlisting>
|
||||||
|
<para>
|
||||||
|
Alternatively, this product may be distributed under the terms of
|
||||||
|
the GNU General Public License (GPL), in which case the provisions
|
||||||
|
of the GNU GPL are required instead of the above restrictions.
|
||||||
|
(This clause is necessary due to a potential bad interaction between
|
||||||
|
the GNU GPL and the restrictions contained in a BSD-style copyright.)
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||||
|
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||||
|
OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||||
|
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||||
|
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||||
|
</programlisting>
|
||||||
|
</chapter>
|
||||||
|
</book>
|
1
doc/adg/html/meson.build
Symbolic link
1
doc/adg/html/meson.build
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../../guide-html-meson.build
|
1
doc/adg/meson.build
Symbolic link
1
doc/adg/meson.build
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../guide-meson.build
|
12
doc/adg/pam_acct_mgmt.xml
Normal file
12
doc/adg/pam_acct_mgmt.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_acct_mgmt">
|
||||||
|
<title>Account validation management</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_acct_mgmt.3.xml" xpointer='xpointer(id("pam_acct_mgmt-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_acct_mgmt-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_acct_mgmt.3.xml" xpointer='xpointer(id("pam_acct_mgmt-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_acct_mgmt-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_acct_mgmt.3.xml" xpointer='xpointer(id("pam_acct_mgmt-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/adg/pam_authenticate.xml
Normal file
12
doc/adg/pam_authenticate.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_authenticate">
|
||||||
|
<title>Authenticating the user</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_authenticate.3.xml" xpointer='xpointer(id("pam_authenticate-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_authenticate-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_authenticate.3.xml" xpointer='xpointer(id("pam_authenticate-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_authenticate-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_authenticate.3.xml" xpointer='xpointer(id("pam_authenticate-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/adg/pam_chauthtok.xml
Normal file
12
doc/adg/pam_chauthtok.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_chauthtok">
|
||||||
|
<title>Updating authentication tokens</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_chauthtok.3.xml" xpointer='xpointer(id("pam_chauthtok-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_chauthtok-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_chauthtok.3.xml" xpointer='xpointer(id("pam_chauthtok-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_chauthtok-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_chauthtok.3.xml" xpointer='xpointer(id("pam_chauthtok-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/adg/pam_close_session.xml
Normal file
12
doc/adg/pam_close_session.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_close_session">
|
||||||
|
<title>terminating PAM session management</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_close_session.3.xml" xpointer='xpointer(id("pam_close_session-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_close_session-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_close_session.3.xml" xpointer='xpointer(id("pam_close_session-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_close_session-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_close_session.3.xml" xpointer='xpointer(id("pam_close_session-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
29
doc/adg/pam_conv.xml
Normal file
29
doc/adg/pam_conv.xml
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_conv">
|
||||||
|
<title>The conversation function</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_conv.3.xml" xpointer='xpointer(id("pam_conv-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<programlisting>
|
||||||
|
struct pam_message {
|
||||||
|
int msg_style;
|
||||||
|
const char *msg;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct pam_response {
|
||||||
|
char *resp;
|
||||||
|
int resp_retcode;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct pam_conv {
|
||||||
|
int (*conv)(int num_msg, const struct pam_message **msg,
|
||||||
|
struct pam_response **resp, void *appdata_ptr);
|
||||||
|
void *appdata_ptr;
|
||||||
|
};
|
||||||
|
</programlisting>
|
||||||
|
<section xml:id="adg-pam_conv-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_conv.3.xml" xpointer='xpointer(id("pam_conv-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_conv-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_conv.3.xml" xpointer='xpointer(id("pam_conv-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/adg/pam_end.xml
Normal file
12
doc/adg/pam_end.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_end">
|
||||||
|
<title>Termination of PAM transaction</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_end.3.xml" xpointer='xpointer(id("pam_end-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_end-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_end.3.xml" xpointer='xpointer(id("pam_end-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_end-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_end.3.xml" xpointer='xpointer(id("pam_end-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/adg/pam_fail_delay.xml
Normal file
12
doc/adg/pam_fail_delay.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_fail_delay">
|
||||||
|
<title>Request a delay on failure</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_fail_delay.3.xml" xpointer='xpointer(id("pam_fail_delay-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_fail_delay-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_fail_delay.3.xml" xpointer='xpointer(id("pam_fail_delay-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_fail_delay-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_fail_delay.3.xml" xpointer='xpointer(id("pam_fail_delay-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/adg/pam_get_item.xml
Normal file
12
doc/adg/pam_get_item.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_get_item">
|
||||||
|
<title>Getting PAM items</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_item.3.xml" xpointer='xpointer(id("pam_get_item-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_get_item-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_item.3.xml" xpointer='xpointer(id("pam_get_item-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_get_item-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_item.3.xml" xpointer='xpointer(id("pam_get_item-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/adg/pam_getenv.xml
Normal file
12
doc/adg/pam_getenv.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_getenv">
|
||||||
|
<title>Get a PAM environment variable</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenv.3.xml" xpointer='xpointer(id("pam_getenv-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_getenv-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenv.3.xml" xpointer='xpointer(id("pam_getenv-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_getenv-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenv.3.xml" xpointer='xpointer(id("pam_getenv-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/adg/pam_getenvlist.xml
Normal file
12
doc/adg/pam_getenvlist.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_getenvlist">
|
||||||
|
<title>Getting the PAM environment</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenvlist.3.xml" xpointer='xpointer(id("pam_getenvlist-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_getenvlist-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenvlist.3.xml" xpointer='xpointer(id("pam_getenvlist-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_getenvlist-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenvlist.3.xml" xpointer='xpointer(id("pam_getenvlist-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
9
doc/adg/pam_misc_conv.xml
Normal file
9
doc/adg/pam_misc_conv.xml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-misc_conv">
|
||||||
|
<title>Text based conversation function</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/misc_conv.3.xml" xpointer='xpointer(id("misc_conv-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-misc_conv-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/misc_conv.3.xml" xpointer='xpointer(id("misc_conv-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
9
doc/adg/pam_misc_drop_env.xml
Normal file
9
doc/adg/pam_misc_drop_env.xml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_misc_drop_env">
|
||||||
|
<title>Liberating a locally saved environment</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_misc_drop_env.3.xml" xpointer='xpointer(id("pam_misc_drop_env-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_misc_drop_env-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_misc_drop_env.3.xml" xpointer='xpointer(id("pam_misc_drop_env-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
9
doc/adg/pam_misc_paste_env.xml
Normal file
9
doc/adg/pam_misc_paste_env.xml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_misc_paste_env">
|
||||||
|
<title>Transcribing an environment to that of PAM</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_misc_paste_env.3.xml" xpointer='xpointer(id("pam_misc_paste_env-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_misc_paste_env-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_misc_paste_env.3.xml" xpointer='xpointer(id("pam_misc_paste_env-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
9
doc/adg/pam_misc_setenv.xml
Normal file
9
doc/adg/pam_misc_setenv.xml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_misc_setenv">
|
||||||
|
<title>BSD like PAM environment variable setting</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_misc_setenv.3.xml" xpointer='xpointer(id("pam_misc_setenv-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_misc_setenv-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_misc_setenv.3.xml" xpointer='xpointer(id("pam_misc_setenv-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/adg/pam_open_session.xml
Normal file
12
doc/adg/pam_open_session.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_open_session">
|
||||||
|
<title>Start PAM session management</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_open_session.3.xml" xpointer='xpointer(id("pam_open_session-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_open_session-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_open_session.3.xml" xpointer='xpointer(id("pam_open_session-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_open_session-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_open_session.3.xml" xpointer='xpointer(id("pam_open_session-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/adg/pam_putenv.xml
Normal file
12
doc/adg/pam_putenv.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_putenv">
|
||||||
|
<title>Set or change PAM environment variable</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_putenv.3.xml" xpointer='xpointer(id("pam_putenv-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_putenv-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_putenv.3.xml" xpointer='xpointer(id("pam_putenv-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_putenv-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_putenv.3.xml" xpointer='xpointer(id("pam_putenv-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/adg/pam_set_item.xml
Normal file
12
doc/adg/pam_set_item.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_set_item">
|
||||||
|
<title>Setting PAM items</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_set_item.3.xml" xpointer='xpointer(id("pam_set_item-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_set_item-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_set_item.3.xml" xpointer='xpointer(id("pam_set_item-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_set_item-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_set_item.3.xml" xpointer='xpointer(id("pam_set_item-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/adg/pam_setcred.xml
Normal file
12
doc/adg/pam_setcred.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_setcred">
|
||||||
|
<title>Setting user credentials</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_setcred.3.xml" xpointer='xpointer(id("pam_setcred-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_setcred-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_setcred.3.xml" xpointer='xpointer(id("pam_setcred-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_setcred-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_setcred.3.xml" xpointer='xpointer(id("pam_setcred-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/adg/pam_start.xml
Normal file
12
doc/adg/pam_start.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_start">
|
||||||
|
<title>Initialization of PAM transaction</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_start.3.xml" xpointer='xpointer(id("pam_start-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_start-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_start.3.xml" xpointer='xpointer(id("pam_start-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_start-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_start.3.xml" xpointer='xpointer(id("pam_start-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/adg/pam_strerror.xml
Normal file
12
doc/adg/pam_strerror.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_strerror">
|
||||||
|
<title>Strings describing PAM error codes</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_strerror.3.xml" xpointer='xpointer(id("pam_strerror-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_strerror-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_strerror.3.xml" xpointer='xpointer(id("pam_strerror-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_strerror-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_strerror.3.xml" xpointer='xpointer(id("pam_strerror-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
9
doc/custom-man.xsl.in
Normal file
9
doc/custom-man.xsl.in
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version='1.0'?>
|
||||||
|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0" version="1.0">
|
||||||
|
<xsl:import href="MAN_STYLESHEET"/>
|
||||||
|
<xsl:param name="vendordir"/>
|
||||||
|
|
||||||
|
<xsl:param name="man.string.subst.map.local.pre">
|
||||||
|
<ss:substitution oldstring="%vendordir%" newstring="{$vendordir}" />
|
||||||
|
</xsl:param>
|
||||||
|
</xsl:stylesheet>
|
32
doc/guide-html-meson.build
Normal file
32
doc/guide-html-meson.build
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
# -*- mode: meson -*-
|
||||||
|
|
||||||
|
html = custom_target(
|
||||||
|
input: xml,
|
||||||
|
output: name + '.html',
|
||||||
|
command: [
|
||||||
|
prog_xsltproc,
|
||||||
|
'--nonet',
|
||||||
|
'--xinclude',
|
||||||
|
'--stringparam', 'base.dir', meson.current_build_dir(),
|
||||||
|
'--stringparam', 'root.filename', name,
|
||||||
|
'--stringparam', 'use.id.as.filename', '1',
|
||||||
|
'--stringparam', 'chunk.first.sections', '1',
|
||||||
|
'--stringparam', 'section.autolabel', '1',
|
||||||
|
'--stringparam', 'section.label.includes.component.label', '1',
|
||||||
|
'--stringparam', 'toc.max.depth', toc_max_depth,
|
||||||
|
'--stringparam', 'chunker.output.encoding', 'UTF-8',
|
||||||
|
html_stylesheet,
|
||||||
|
'@INPUT@',
|
||||||
|
],
|
||||||
|
install: true,
|
||||||
|
install_dir: htmldir,
|
||||||
|
install_tag: 'doc',
|
||||||
|
)
|
||||||
|
|
||||||
|
meson.add_install_script(
|
||||||
|
install_html,
|
||||||
|
meson.current_build_dir(),
|
||||||
|
htmldir,
|
||||||
|
html,
|
||||||
|
install_tag: 'doc',
|
||||||
|
)
|
90
doc/guide-meson.build
Normal file
90
doc/guide-meson.build
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
# -*- mode: meson -*-
|
||||||
|
|
||||||
|
guide = fs.name(meson.current_source_dir()).to_upper()
|
||||||
|
name = 'Linux-PAM_' + guide
|
||||||
|
|
||||||
|
xml = files(name + '.xml')
|
||||||
|
|
||||||
|
if guide == 'SAG'
|
||||||
|
toc_max_depth = '2'
|
||||||
|
else
|
||||||
|
toc_max_depth = '3'
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
run_command(
|
||||||
|
[prog_xmllint,
|
||||||
|
'--noent',
|
||||||
|
'--nonet',
|
||||||
|
'--noout',
|
||||||
|
'--xinclude',
|
||||||
|
'--relaxng', docbook_rng,
|
||||||
|
xml],
|
||||||
|
check: true,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
html = custom_target(
|
||||||
|
input: xml,
|
||||||
|
output: name + '.html',
|
||||||
|
command: [
|
||||||
|
prog_xsltproc,
|
||||||
|
'-o', '@OUTPUT@',
|
||||||
|
'--nonet',
|
||||||
|
'--xinclude',
|
||||||
|
'--stringparam', 'generate.toc', 'book toc',
|
||||||
|
'--stringparam', 'section.autolabel', '1',
|
||||||
|
'--stringparam', 'section.label.includes.component.label', '1',
|
||||||
|
'--stringparam', 'toc.max.depth', toc_max_depth,
|
||||||
|
txt_stylesheet,
|
||||||
|
'@INPUT@',
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
custom_target(
|
||||||
|
input: html,
|
||||||
|
output: name + '.txt',
|
||||||
|
command: [
|
||||||
|
redir_exe,
|
||||||
|
'@INPUT@',
|
||||||
|
'@OUTPUT@',
|
||||||
|
browser,
|
||||||
|
],
|
||||||
|
install: true,
|
||||||
|
install_dir: docdir,
|
||||||
|
install_tag: 'doc',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
fop = custom_target(
|
||||||
|
input: xml,
|
||||||
|
output: name + '.fop',
|
||||||
|
command: [
|
||||||
|
prog_xsltproc,
|
||||||
|
'-o', '@OUTPUT@',
|
||||||
|
'--nonet',
|
||||||
|
'--xinclude',
|
||||||
|
'--stringparam', 'generate.toc', 'book toc',
|
||||||
|
'--stringparam', 'section.autolabel', '1',
|
||||||
|
'--stringparam', 'section.label.includes.component.label', '1',
|
||||||
|
'--stringparam', 'toc.max.depth', toc_max_depth,
|
||||||
|
pdf_stylesheet,
|
||||||
|
'@INPUT@',
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
custom_target(
|
||||||
|
input: fop,
|
||||||
|
output: name + '.pdf',
|
||||||
|
command: [
|
||||||
|
prog_fop,
|
||||||
|
'@INPUT@',
|
||||||
|
'@OUTPUT@',
|
||||||
|
],
|
||||||
|
install: true,
|
||||||
|
install_dir: pdfdir,
|
||||||
|
install_tag: 'doc',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
subdir('html')
|
21
doc/index.html
Normal file
21
doc/index.html
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>The Linux-PAM Administration and Developer Guides</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<center>
|
||||||
|
<h1>The Linux-PAM Guides</h1>
|
||||||
|
</center>
|
||||||
|
<hr>
|
||||||
|
<p>
|
||||||
|
Here is the documentation for Linux-PAM. As you will see it is
|
||||||
|
currently not complete.
|
||||||
|
<p>
|
||||||
|
<ul>
|
||||||
|
<li> <a href="Linux-PAM_SAG.html">The System Administrators' Guide</a>
|
||||||
|
<li> <a href="Linux-PAM_MWG.html">The Module Writers' Guide</a>
|
||||||
|
<li> <a href="Linux-PAM_ADG.html">The Application Developers' Guide</a>
|
||||||
|
</ul>
|
||||||
|
<hr>
|
||||||
|
</body>
|
||||||
|
</html>
|
7
doc/install-html.sh
Executable file
7
doc/install-html.sh
Executable file
|
@ -0,0 +1,7 @@
|
||||||
|
#!/bin/sh -eu
|
||||||
|
|
||||||
|
cd "$1"; shift
|
||||||
|
MESON_INSTALL_DESTDIR=${MESON_INSTALL_DESTDIR_PREFIX%$MESON_INSTALL_PREFIX}
|
||||||
|
dest="$MESON_INSTALL_DESTDIR$1"; shift
|
||||||
|
|
||||||
|
install -p -m644 -t "$dest" -- *.html
|
67
doc/man/meson.build
Normal file
67
doc/man/meson.build
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
foreach man: [['misc_conv.3', []],
|
||||||
|
['pam.3', []],
|
||||||
|
['pam_acct_mgmt.3', []],
|
||||||
|
['pam_authenticate.3', []],
|
||||||
|
['pam_chauthtok.3', []],
|
||||||
|
['pam_close_session.3', []],
|
||||||
|
['pam_conv.3', []],
|
||||||
|
['pam_end.3', []],
|
||||||
|
['pam_error.3', ['pam_verror.3']],
|
||||||
|
['pam_fail_delay.3', []],
|
||||||
|
['pam_get_authtok.3', ['pam_get_authtok_noverify.3', 'pam_get_authtok_verify.3']],
|
||||||
|
['pam_get_data.3', []],
|
||||||
|
['pam_get_item.3', []],
|
||||||
|
['pam_get_user.3', []],
|
||||||
|
['pam_getenv.3', []],
|
||||||
|
['pam_getenvlist.3', []],
|
||||||
|
['pam_info.3', ['pam_vinfo.3']],
|
||||||
|
['pam_misc_drop_env.3', []],
|
||||||
|
['pam_misc_paste_env.3', []],
|
||||||
|
['pam_misc_setenv.3', []],
|
||||||
|
['pam_open_session.3', []],
|
||||||
|
['pam_prompt.3', ['pam_vprompt.3']],
|
||||||
|
['pam_putenv.3', []],
|
||||||
|
['pam_set_data.3', []],
|
||||||
|
['pam_set_item.3', []],
|
||||||
|
['pam_setcred.3', []],
|
||||||
|
['pam_sm_acct_mgmt.3', []],
|
||||||
|
['pam_sm_authenticate.3', []],
|
||||||
|
['pam_sm_chauthtok.3', []],
|
||||||
|
['pam_sm_close_session.3', []],
|
||||||
|
['pam_sm_open_session.3', []],
|
||||||
|
['pam_sm_setcred.3', []],
|
||||||
|
['pam_start.3', []],
|
||||||
|
['pam_strerror.3', []],
|
||||||
|
['pam_syslog.3', ['pam_vsyslog.3']],
|
||||||
|
['pam_xauth_data.3', []],
|
||||||
|
['pam.conf.5', ['pam.d.5']],
|
||||||
|
['pam.8', ['PAM.8']],
|
||||||
|
]
|
||||||
|
xml = man[0] + '.xml'
|
||||||
|
|
||||||
|
run_command([prog_xmllint,
|
||||||
|
'--nonet',
|
||||||
|
'--noout',
|
||||||
|
'--xinclude',
|
||||||
|
'--relaxng', docbook_rng,
|
||||||
|
xml],
|
||||||
|
check: true)
|
||||||
|
|
||||||
|
custom_target(man[0],
|
||||||
|
input: xml,
|
||||||
|
output: man,
|
||||||
|
depends: custom_man_xsl,
|
||||||
|
command: [prog_xsltproc,
|
||||||
|
'-o', '@OUTPUT0@',
|
||||||
|
'--nonet',
|
||||||
|
'--xinclude',
|
||||||
|
'--path', meson.current_source_dir(),
|
||||||
|
stringparam_vendordir,
|
||||||
|
stringparam_profileconditions,
|
||||||
|
custom_man_xsl,
|
||||||
|
'@INPUT@'],
|
||||||
|
install: true,
|
||||||
|
install_dir: mandir / 'man' + man[0].substring(-1),
|
||||||
|
install_tag: 'man',
|
||||||
|
)
|
||||||
|
endforeach
|
185
doc/man/misc_conv.3.xml
Normal file
185
doc/man/misc_conv.3.xml
Normal file
|
@ -0,0 +1,185 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="misc_conv">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>misc_conv</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="misc_conv-name">
|
||||||
|
<refname>misc_conv</refname>
|
||||||
|
<refpurpose>text based conversation function</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="misc_conv-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_misc.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>misc_conv</function></funcdef>
|
||||||
|
<paramdef>int <parameter>num_msg</parameter></paramdef>
|
||||||
|
<paramdef>const struct pam_message **<parameter>msgm</parameter></paramdef>
|
||||||
|
<paramdef>struct pam_response **<parameter>response</parameter></paramdef>
|
||||||
|
<paramdef>void *<parameter>appdata_ptr</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1 xml:id="misc_conv-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>misc_conv</function> function is part of
|
||||||
|
<command>libpam_misc</command> and not of the standard
|
||||||
|
<command>libpam</command> library. This function will prompt
|
||||||
|
the user with the appropriate comments and obtain the appropriate
|
||||||
|
inputs as directed by authentication modules.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
In addition to simply slotting into the appropriate <citerefentry>
|
||||||
|
<refentrytitle>pam_conv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, this function provides some time-out facilities.
|
||||||
|
The function exports five variables that can be used by an
|
||||||
|
application programmer to limit the amount of time this conversation
|
||||||
|
function will spend waiting for the user to type something. The
|
||||||
|
five variables are as follows:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>time_t pam_misc_conv_warn_time;</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This variable contains the <emphasis>time</emphasis> (as
|
||||||
|
returned by <citerefentry>
|
||||||
|
<refentrytitle>time</refentrytitle><manvolnum>2</manvolnum>
|
||||||
|
</citerefentry>) that the user should be first warned that
|
||||||
|
the clock is ticking. By default it has the value
|
||||||
|
<returnvalue>0</returnvalue>, which indicates that no such
|
||||||
|
warning will be given. The application may set its value to
|
||||||
|
sometime in the future, but this should be done prior to
|
||||||
|
passing control to the <emphasis>Linux-PAM</emphasis> library.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>const char *pam_misc_conv_warn_line;</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Used in conjunction with
|
||||||
|
<varname>pam_misc_conv_warn_time</varname>, this variable is
|
||||||
|
a pointer to the string that will be displayed when it becomes
|
||||||
|
time to warn the user that the timeout is approaching. Its
|
||||||
|
default value is a translated version of
|
||||||
|
<quote>...Time is running out...</quote>, but this can be
|
||||||
|
changed by the application prior to passing control to
|
||||||
|
<emphasis>Linux-PAM</emphasis>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>time_t pam_misc_conv_die_time;</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This variable contains the <emphasis>time</emphasis> (as
|
||||||
|
returned by <citerefentry>
|
||||||
|
<refentrytitle>time</refentrytitle><manvolnum>2</manvolnum>
|
||||||
|
</citerefentry>) that the will time out. By default it has
|
||||||
|
the value <returnvalue>0</returnvalue>, which indicates that
|
||||||
|
the conversation function will not timeout. The application
|
||||||
|
may set its value to sometime in the future, but this should
|
||||||
|
be done prior to passing control to the
|
||||||
|
<emphasis>Linux-PAM</emphasis> library.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>const char *pam_misc_conv_die_line;</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Used in conjunction with
|
||||||
|
<varname>pam_misc_conv_die_time</varname>, this variable is
|
||||||
|
a pointer to the string that will be displayed when the
|
||||||
|
conversation times out. Its default value is a translated
|
||||||
|
version of
|
||||||
|
<quote>...Sorry, your time is up!</quote>, but this can be
|
||||||
|
changed by the application prior to passing control to
|
||||||
|
<emphasis>Linux-PAM</emphasis>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>int pam_misc_conv_died;</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Following a return from the <emphasis>Linux-PAM</emphasis>
|
||||||
|
library, the value of this variable indicates whether the
|
||||||
|
conversation has timed out. A value of
|
||||||
|
<returnvalue>1</returnvalue> indicates the time-out occurred.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
<para>
|
||||||
|
The following two function pointers are available for supporting
|
||||||
|
binary prompts in the conversation function. They are optimized
|
||||||
|
for the current incarnation of the <command>libpamc</command>
|
||||||
|
library and are subject to change.
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
int (*pam_binary_handler_fn)(void *appdata, pamc_bp_t *prompt_p);
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This function pointer is initialized to
|
||||||
|
<returnvalue>NULL</returnvalue> but can be filled with a
|
||||||
|
function that provides machine-machine (hidden) message
|
||||||
|
exchange. It is intended for use with hidden authentication
|
||||||
|
protocols such as RSA or Diffie-Hellman key exchanges.
|
||||||
|
(This is still under development.)
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
int (*pam_binary_handler_free)(void *appdata, pamc_bp_t *delete_me);
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This function pointer is initialized to
|
||||||
|
<function>PAM_BP_RENEW(delete_me, 0, 0)</function>, but can be
|
||||||
|
redefined as desired by the application.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="misc_conv-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_conv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="misc_conv-standards">
|
||||||
|
<title>STANDARDS</title>
|
||||||
|
<para>
|
||||||
|
The <function>misc_conv</function> function is part of the
|
||||||
|
<command>libpam_misc</command> Library and not defined in any
|
||||||
|
standard.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
437
doc/man/pam.3.xml
Normal file
437
doc/man/pam.3.xml
Normal file
|
@ -0,0 +1,437 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam3">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam3-name">
|
||||||
|
<refname>pam</refname>
|
||||||
|
<refpurpose>Pluggable Authentication Modules Library</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv xml:id="pam3-synopsis">
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcsynopsisinfo>#include <security/pam_appl.h></funcsynopsisinfo>
|
||||||
|
<funcsynopsisinfo>#include <security/pam_modules.h></funcsynopsisinfo>
|
||||||
|
<funcsynopsisinfo>#include <security/pam_ext.h></funcsynopsisinfo>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam3-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
<emphasis remap="B">PAM</emphasis> is a system of libraries
|
||||||
|
that handle the authentication tasks of applications (services)
|
||||||
|
on the system. The library provides a stable general interface
|
||||||
|
(Application Programming Interface - API) that privilege granting
|
||||||
|
programs (such as
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
|
||||||
|
</citerefentry> and <citerefentry>
|
||||||
|
<refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
|
||||||
|
</citerefentry>)
|
||||||
|
defer to to perform standard authentication tasks.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<refsect2 xml:id="pam3-initialization_and_cleanup">
|
||||||
|
<title>Initialization and Cleanup</title>
|
||||||
|
<para>
|
||||||
|
The
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> function creates the PAM context and initiates the
|
||||||
|
PAM transaction. It is the first of the PAM functions that needs to
|
||||||
|
be called by an application. The transaction state is contained
|
||||||
|
entirely within the structure identified by this handle, so it is
|
||||||
|
possible to have multiple transactions in parallel. But it is not
|
||||||
|
possible to use the same handle for different transactions, a new
|
||||||
|
one is needed for every new context.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_end</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> function terminates the PAM transaction and is the last
|
||||||
|
function an application should call in the PAM context. Upon return
|
||||||
|
the handle pamh is no longer valid and all memory associated with it
|
||||||
|
will be invalid. It can be called at any time to terminate a PAM
|
||||||
|
transaction.
|
||||||
|
</para>
|
||||||
|
</refsect2>
|
||||||
|
|
||||||
|
<refsect2 xml:id="pam3-authentication">
|
||||||
|
<title>Authentication</title>
|
||||||
|
<para>
|
||||||
|
The
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_authenticate</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
function is used to
|
||||||
|
authenticate the user. The user is required to provide an
|
||||||
|
authentication token depending upon the authentication service,
|
||||||
|
usually this is a password, but could also be a finger print.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_setcred</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
function manages the user's credentials.
|
||||||
|
</para>
|
||||||
|
</refsect2>
|
||||||
|
|
||||||
|
<refsect2 xml:id="pam3-account_management">
|
||||||
|
<title>Account Management</title>
|
||||||
|
<para>
|
||||||
|
The
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_acct_mgmt</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> function is used to determine if the user's account is
|
||||||
|
valid. It checks for authentication token and account expiration and
|
||||||
|
verifies access restrictions. It is typically called after the user
|
||||||
|
has been authenticated.
|
||||||
|
</para>
|
||||||
|
</refsect2>
|
||||||
|
|
||||||
|
<refsect2 xml:id="pam3-password_management">
|
||||||
|
<title>Password Management</title>
|
||||||
|
<para>
|
||||||
|
The
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_chauthtok</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> function is used to change the authentication token
|
||||||
|
for a given user on request or because the token has expired.
|
||||||
|
</para>
|
||||||
|
</refsect2>
|
||||||
|
|
||||||
|
<refsect2 xml:id="pam3-session_management">
|
||||||
|
<title>Session Management</title>
|
||||||
|
<para>
|
||||||
|
The
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_open_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> function sets up a user session for a previously
|
||||||
|
successful authenticated user. The session should later be terminated
|
||||||
|
with a call to
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_close_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
</refsect2>
|
||||||
|
|
||||||
|
<refsect2 xml:id="pam3-conversation">
|
||||||
|
<title>Conversation</title>
|
||||||
|
<para>
|
||||||
|
The PAM library uses an application-defined callback to allow
|
||||||
|
a direct communication between a loaded module and the application.
|
||||||
|
This callback is specified by the
|
||||||
|
<emphasis>struct pam_conv</emphasis> passed to
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> at the start of the transaction. See
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_conv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
for details.
|
||||||
|
</para>
|
||||||
|
</refsect2>
|
||||||
|
|
||||||
|
<refsect2 xml:id="pam3-data">
|
||||||
|
<title>Data Objects</title>
|
||||||
|
<para>
|
||||||
|
The
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_set_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
and
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
functions allow applications and PAM service modules to set and
|
||||||
|
retrieve PAM information.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_user</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
function is the preferred method to obtain the username.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_set_data</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
and
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_data</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
function allows PAM service modules to set and retrieve free-form
|
||||||
|
data from one invocation to another.
|
||||||
|
</para>
|
||||||
|
</refsect2>
|
||||||
|
|
||||||
|
<refsect2 xml:id="pam3-miscellaneous">
|
||||||
|
<title>Environment and Error Management</title>
|
||||||
|
<para>
|
||||||
|
The
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_putenv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_getenv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> and
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_getenvlist</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
functions are for maintaining a set of private environment variables.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> function returns a pointer to a string describing the
|
||||||
|
given PAM error code.
|
||||||
|
</para>
|
||||||
|
</refsect2>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam3-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<para>
|
||||||
|
The following return codes are known by PAM:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_ABORT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Critical error, immediate abort.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_ACCT_EXPIRED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>User account has expired.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHINFO_UNAVAIL</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Authentication service cannot retrieve authentication info.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHTOK_DISABLE_AGING</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Authentication token aging disabled.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHTOK_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Authentication token manipulation error.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHTOK_EXPIRED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Authentication token expired.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHTOK_LOCK_BUSY</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Authentication token lock busy.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHTOK_RECOVERY_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Authentication information cannot be recovered.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTH_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Authentication failure.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_BUF_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Memory buffer error.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CONV_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Conversation failure.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CRED_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Failure setting user credentials.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CRED_EXPIRED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>User credentials expired.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CRED_INSUFFICIENT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Insufficient credentials to access authentication data.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CRED_UNAVAIL</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Authentication service cannot retrieve user credentials.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_IGNORE</term>
|
||||||
|
<listitem>
|
||||||
|
<para>The return value should be ignored by PAM dispatch.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_MAXTRIES</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Have exhausted maximum number of retries for service.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_MODULE_UNKNOWN</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Module is unknown.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_NEW_AUTHTOK_REQD</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Authentication token is no longer valid; new one required.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_NO_MODULE_DATA</term>
|
||||||
|
<listitem>
|
||||||
|
<para>No module specific data is present.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_OPEN_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Failed to load module.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_PERM_DENIED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Permission denied.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SERVICE_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Error in service module.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SESSION_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Cannot make/remove an entry for the specified session.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Success.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SYMBOL_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Symbol not found.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SYSTEM_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>System error.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_TRY_AGAIN</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Failed preliminary check by password service.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_USER_UNKNOWN</term>
|
||||||
|
<listitem>
|
||||||
|
<para>User not known to the underlying authentication module.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="see_also"><title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_acct_mgmt</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, <citerefentry>
|
||||||
|
<refentrytitle>pam_authenticate</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, <citerefentry>
|
||||||
|
<refentrytitle>pam_chauthtok</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, <citerefentry>
|
||||||
|
<refentrytitle>pam_close_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, <citerefentry>
|
||||||
|
<refentrytitle>pam_conv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, <citerefentry>
|
||||||
|
<refentrytitle>pam_end</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, <citerefentry>
|
||||||
|
<refentrytitle>pam_get_data</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, <citerefentry>
|
||||||
|
<refentrytitle>pam_getenv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, <citerefentry>
|
||||||
|
<refentrytitle>pam_getenvlist</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, <citerefentry>
|
||||||
|
<refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, <citerefentry>
|
||||||
|
<refentrytitle>pam_get_user</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, <citerefentry>
|
||||||
|
<refentrytitle>pam_open_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, <citerefentry>
|
||||||
|
<refentrytitle>pam_putenv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, <citerefentry>
|
||||||
|
<refentrytitle>pam_set_data</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, <citerefentry>
|
||||||
|
<refentrytitle>pam_set_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, <citerefentry>
|
||||||
|
<refentrytitle>pam_setcred</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, <citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, <citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
<refsect1 xml:id="pam3-notes"><title>NOTES</title>
|
||||||
|
<para>
|
||||||
|
The <emphasis>libpam</emphasis> interfaces are only thread-safe if each
|
||||||
|
thread within the multithreaded application uses its own PAM handle.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
212
doc/man/pam.8.xml
Normal file
212
doc/man/pam.8.xml
Normal file
|
@ -0,0 +1,212 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam8">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam</refentrytitle>
|
||||||
|
<manvolnum>8</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam8-name">
|
||||||
|
<refname>PAM</refname>
|
||||||
|
<refname>pam</refname>
|
||||||
|
<refpurpose>Pluggable Authentication Modules for Linux</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam8-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
This manual is intended to offer a quick introduction to
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis>. For more information
|
||||||
|
the reader is directed to the
|
||||||
|
<emphasis remap="B">Linux-PAM system administrators' guide</emphasis>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> is a system of libraries
|
||||||
|
that handle the authentication tasks of applications (services) on
|
||||||
|
the system. The library provides a stable general interface
|
||||||
|
(Application Programming Interface - API) that privilege granting
|
||||||
|
programs (such as <citerefentry>
|
||||||
|
<refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
|
||||||
|
</citerefentry> and <citerefentry>
|
||||||
|
<refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
|
||||||
|
</citerefentry>) defer to to perform standard authentication tasks.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The principal feature of the PAM approach is that the nature of the
|
||||||
|
authentication is dynamically configurable. In other words, the
|
||||||
|
system administrator is free to choose how individual
|
||||||
|
service-providing applications will authenticate users. This dynamic
|
||||||
|
configuration is set by the contents of the single
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> configuration file
|
||||||
|
<filename>/etc/pam.conf</filename>. Alternatively and preferably,
|
||||||
|
the configuration can be set by individual configuration files
|
||||||
|
located in a <filename>pam.d</filename> directory. The presence of this
|
||||||
|
directory will cause <emphasis remap="B">Linux-PAM</emphasis> to
|
||||||
|
<emphasis remap="I">ignore</emphasis> <filename>/etc/pam.conf</filename>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Vendor-supplied PAM configuration files might be installed in
|
||||||
|
the system directory <filename>/usr/lib/pam.d/</filename> or
|
||||||
|
a configurable vendor specific directory instead
|
||||||
|
of the machine configuration directory <filename>/etc/pam.d/</filename>.
|
||||||
|
If no machine configuration file is found, the vendor-supplied file
|
||||||
|
is used. All files in <filename>/etc/pam.d/</filename> override
|
||||||
|
files with the same name in other directories.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>From the point of view of the system administrator, for whom this
|
||||||
|
manual is provided, it is not of primary importance to understand the
|
||||||
|
internal behavior of the
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis>
|
||||||
|
library. The important point to recognize is that the configuration
|
||||||
|
file(s)
|
||||||
|
<emphasis remap="I">define</emphasis>
|
||||||
|
the connection between applications
|
||||||
|
<emphasis remap="B"/>(<emphasis remap="B">services</emphasis>)
|
||||||
|
and the pluggable authentication modules
|
||||||
|
<emphasis remap="B"/>(<emphasis remap="B">PAM</emphasis>s)
|
||||||
|
that perform the actual authentication tasks.</para>
|
||||||
|
|
||||||
|
|
||||||
|
<para><emphasis remap="B">Linux-PAM</emphasis>
|
||||||
|
separates the tasks of
|
||||||
|
<emphasis remap="I">authentication</emphasis>
|
||||||
|
into four independent management groups:
|
||||||
|
<emphasis remap="B">account</emphasis> management;
|
||||||
|
<emphasis remap="B">auth</emphasis>entication management;
|
||||||
|
<emphasis remap="B">password</emphasis> management;
|
||||||
|
and
|
||||||
|
<emphasis remap="B">session</emphasis> management.
|
||||||
|
(We highlight the abbreviations used for these groups in the
|
||||||
|
configuration file.)</para>
|
||||||
|
|
||||||
|
|
||||||
|
<para>Simply put, these groups take care of different aspects of a typical
|
||||||
|
user's request for a restricted service:</para>
|
||||||
|
|
||||||
|
|
||||||
|
<para><emphasis remap="B">account</emphasis> -
|
||||||
|
provide account verification types of service: has the user's password
|
||||||
|
expired?; is this user permitted access to the requested service?</para>
|
||||||
|
|
||||||
|
<!-- .br -->
|
||||||
|
<para><emphasis remap="B">auth</emphasis>entication -
|
||||||
|
authenticate a user and set up user credentials. Typically this is via
|
||||||
|
some challenge-response request that the user must satisfy: if you are
|
||||||
|
who you claim to be please enter your password. Not all authentications
|
||||||
|
are of this type, there exist hardware based authentication schemes
|
||||||
|
(such as the use of smart-cards and biometric devices), with suitable
|
||||||
|
modules, these may be substituted seamlessly for more standard
|
||||||
|
approaches to authentication - such is the flexibility of
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis>.</para>
|
||||||
|
|
||||||
|
<!-- .br -->
|
||||||
|
<para><emphasis remap="B">password</emphasis> -
|
||||||
|
this group's responsibility is the task of updating authentication
|
||||||
|
mechanisms. Typically, such services are strongly coupled to those of
|
||||||
|
the
|
||||||
|
<emphasis remap="B">auth</emphasis>
|
||||||
|
group. Some authentication mechanisms lend themselves well to being
|
||||||
|
updated with such a function. Standard UN*X password-based access is
|
||||||
|
the obvious example: please enter a replacement password.</para>
|
||||||
|
|
||||||
|
<!-- .br -->
|
||||||
|
<para><emphasis remap="B">session</emphasis> -
|
||||||
|
this group of tasks cover things that should be done prior to a
|
||||||
|
service being given and after it is withdrawn. Such tasks include the
|
||||||
|
maintenance of audit trails and the mounting of the user's home
|
||||||
|
directory. The
|
||||||
|
<emphasis remap="B">session</emphasis>
|
||||||
|
management group is important as it provides both an opening and
|
||||||
|
closing hook for modules to affect the services available to a user.</para>
|
||||||
|
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam8-files">
|
||||||
|
<title>FILES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>/etc/pam.conf</term>
|
||||||
|
<listitem>
|
||||||
|
<para>the configuration file</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>/etc/pam.d</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
the <emphasis remap="B">Linux-PAM</emphasis> configuration
|
||||||
|
directory. Generally, if this directory is present, the
|
||||||
|
<filename>/etc/pam.conf</filename> file is ignored.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>/usr/lib/pam.d</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
the <emphasis remap="B">Linux-PAM</emphasis> vendor configuration
|
||||||
|
directory. Files in <filename>/etc/pam.d</filename> override
|
||||||
|
files with the same name in this directory.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry condition="with_vendordir">
|
||||||
|
<term>%vendordir%/pam.d</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
additional <emphasis remap="B">Linux-PAM</emphasis> vendor
|
||||||
|
configuration directory. Files in <filename>/etc/pam.d</filename>
|
||||||
|
and <filename>/usr/lib/pam.d</filename> override files with the
|
||||||
|
same name in this directory.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam8-errors">
|
||||||
|
<title>ERRORS</title>
|
||||||
|
<para>
|
||||||
|
Typically errors generated by the
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> system of libraries, will
|
||||||
|
be written to <citerefentry>
|
||||||
|
<refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam8-conforming_to">
|
||||||
|
<title>CONFORMING TO</title>
|
||||||
|
<para>
|
||||||
|
DCE-RFC 86.0, October 1995.
|
||||||
|
Contains additional features, but remains backwardly compatible
|
||||||
|
with this RFC.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam8-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_authenticate</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_sm_setcred</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>PAM</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
19
doc/man/pam.conf-desc.xml
Normal file
19
doc/man/pam.conf-desc.xml
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam.conf-desc">
|
||||||
|
<para>
|
||||||
|
When a <emphasis>PAM</emphasis> aware privilege granting application
|
||||||
|
is started, it activates its attachment to the PAM-API. This
|
||||||
|
activation performs a number of tasks, the most important being the
|
||||||
|
reading of the configuration file(s): <filename>/etc/pam.conf</filename>.
|
||||||
|
Alternatively and preferably, the configuration can be set by individual
|
||||||
|
configuration files located in a <filename>pam.d</filename> directory.
|
||||||
|
The presence of this directory will cause
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> to
|
||||||
|
<emphasis remap="I">ignore</emphasis> <filename>/etc/pam.conf</filename>.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
These files list the <emphasis>PAM</emphasis>s that will do the
|
||||||
|
authentication tasks required by this service, and the appropriate
|
||||||
|
behavior of the PAM-API in the event that individual
|
||||||
|
<emphasis>PAM</emphasis>s fail.
|
||||||
|
</para>
|
||||||
|
</section>
|
37
doc/man/pam.conf-dir.xml
Normal file
37
doc/man/pam.conf-dir.xml
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam.conf-dir">
|
||||||
|
<para>
|
||||||
|
More flexible than the single configuration file is it to
|
||||||
|
configure libpam via the contents of
|
||||||
|
<filename>pam.d</filename> directories. In this case the
|
||||||
|
directories are filled with files each of which has a filename
|
||||||
|
equal to a service-name (in lower-case): it is the personal
|
||||||
|
configuration file for the named service.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Vendor-supplied PAM configuration files might be installed in
|
||||||
|
the system directory <filename>/usr/lib/pam.d/</filename> or
|
||||||
|
a configurable vendor specific directory instead
|
||||||
|
of the machine configuration directory <filename>/etc/pam.d/</filename>.
|
||||||
|
If no machine configuration file is found, the vendor-supplied file
|
||||||
|
is used. All files in <filename>/etc/pam.d/</filename> override
|
||||||
|
files with the same name in other directories.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The syntax of each file in pam.d is similar to that of the
|
||||||
|
<filename>/etc/pam.conf</filename> file and is made up of lines
|
||||||
|
of the following form:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting>
|
||||||
|
type control module-path module-arguments
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The only difference being that the service-name is not present. The
|
||||||
|
service-name is of course the name of the given configuration file.
|
||||||
|
For example, <filename>/etc/pam.d/login</filename> contains the
|
||||||
|
configuration for the <emphasis remap="B">login</emphasis> service.
|
||||||
|
</para>
|
||||||
|
</section>
|
423
doc/man/pam.conf-syntax.xml
Normal file
423
doc/man/pam.conf-syntax.xml
Normal file
|
@ -0,0 +1,423 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam.conf-syntax">
|
||||||
|
<para>
|
||||||
|
The syntax of the <filename>/etc/pam.conf</filename>
|
||||||
|
configuration file is as follows. The file is made up of a list
|
||||||
|
of rules, each rule is typically placed on a single line,
|
||||||
|
but may be extended with an escaped end of line: `\<LF>'.
|
||||||
|
Comments are preceded with `#' marks and extend to the next end of
|
||||||
|
line.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The format of each rule is a space separated collection of tokens,
|
||||||
|
the first three being case-insensitive:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<emphasis remap="B"> service type control module-path module-arguments</emphasis>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The syntax of files contained in the <filename>/etc/pam.d/</filename>
|
||||||
|
directory, are identical except for the absence of any
|
||||||
|
<emphasis>service</emphasis> field. In this case, the
|
||||||
|
<emphasis>service</emphasis> is the name of the file in the
|
||||||
|
<filename>/etc/pam.d/</filename> directory. This filename must be
|
||||||
|
in lower case.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
An important feature of <emphasis>PAM</emphasis>, is that a
|
||||||
|
number of rules may be <emphasis>stacked</emphasis> to combine
|
||||||
|
the services of a number of PAMs for a given authentication task.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <emphasis>service</emphasis> is typically the familiar name of
|
||||||
|
the corresponding application: <emphasis>login</emphasis> and
|
||||||
|
<emphasis>su</emphasis> are good examples. The
|
||||||
|
<emphasis>service</emphasis>-name, <emphasis>other</emphasis>,
|
||||||
|
is reserved for giving <emphasis>default</emphasis> rules.
|
||||||
|
Only lines that mention the current service (or in the absence
|
||||||
|
of such, the <emphasis>other</emphasis> entries) will be associated
|
||||||
|
with the given service-application.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <emphasis>type</emphasis> is the management group that the rule
|
||||||
|
corresponds to. It is used to specify which of the management groups
|
||||||
|
the subsequent module is to be associated with. Valid entries are:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>account</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
this module type performs non-authentication based account
|
||||||
|
management. It is typically used to restrict/permit access
|
||||||
|
to a service based on the time of day, currently available
|
||||||
|
system resources (maximum number of users) or perhaps the
|
||||||
|
location of the applicant user -- 'root' login only on the
|
||||||
|
console.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>auth</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
this module type provides two aspects of authenticating
|
||||||
|
the user. Firstly, it establishes that the user is who they
|
||||||
|
claim to be, by instructing the application to prompt the user
|
||||||
|
for a password or other means of identification. Secondly, the
|
||||||
|
module can grant group membership or other privileges through
|
||||||
|
its credential granting properties.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>password</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
this module type is required for updating the authentication
|
||||||
|
token associated with the user. Typically, there is one module
|
||||||
|
for each 'challenge/response' based authentication (auth) type.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>session</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
this module type is associated with doing things that need to
|
||||||
|
be done for the user before/after they can be given service.
|
||||||
|
Such things include the logging of information concerning the
|
||||||
|
opening/closing of some data exchange with a user, mounting
|
||||||
|
directories, etc.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
<para>
|
||||||
|
If the <emphasis>type</emphasis> value from the list above is prepended
|
||||||
|
with a <emphasis>-</emphasis> character the PAM library will not log to
|
||||||
|
the system log if it is not possible to load the module because it is
|
||||||
|
missing in the system. This can be useful especially for modules which
|
||||||
|
are not always installed on the system and are not required for correct
|
||||||
|
authentication and authorization of the login session.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The third field, <emphasis>control</emphasis>, indicates the
|
||||||
|
behavior of the PAM-API should the module fail to succeed in its
|
||||||
|
authentication task. There are two types of syntax for this control
|
||||||
|
field: the simple one has a single simple keyword; the more
|
||||||
|
complicated one involves a square-bracketed selection of
|
||||||
|
<emphasis>value=action</emphasis> pairs.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
For the simple (historical) syntax valid <emphasis>control</emphasis>
|
||||||
|
values are:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>required</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
failure of such a PAM will ultimately lead to the PAM-API
|
||||||
|
returning failure but only after the remaining
|
||||||
|
<emphasis>stacked</emphasis> modules (for this
|
||||||
|
<emphasis>service</emphasis> and <emphasis>type</emphasis>)
|
||||||
|
have been invoked.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>requisite</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
like <emphasis>required</emphasis>, however, in the case that
|
||||||
|
such a module returns a failure, control is directly returned
|
||||||
|
to the application or to the superior PAM stack.
|
||||||
|
The return value is that associated with
|
||||||
|
the first required or requisite module to fail. Note, this flag
|
||||||
|
can be used to protect against the possibility of a user getting
|
||||||
|
the opportunity to enter a password over an unsafe medium. It is
|
||||||
|
conceivable that such behavior might inform an attacker of valid
|
||||||
|
accounts on a system. This possibility should be weighed against
|
||||||
|
the not insignificant concerns of exposing a sensitive password
|
||||||
|
in a hostile environment.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>sufficient</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
if such a module succeeds and no prior <emphasis>required</emphasis>
|
||||||
|
module has failed the PAM framework returns success to
|
||||||
|
the application or to the superior PAM stack immediately without
|
||||||
|
calling any further modules in the stack. A failure of a
|
||||||
|
<emphasis>sufficient</emphasis> module is ignored and processing
|
||||||
|
of the PAM module stack continues unaffected.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>optional</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
the success or failure of this module is only important if
|
||||||
|
it is the only module in the stack associated with this
|
||||||
|
<emphasis>service</emphasis>+<emphasis>type</emphasis>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>include</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
include all lines of given type from the configuration
|
||||||
|
file specified as an argument to this control.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>substack</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
include all lines of given type from the configuration
|
||||||
|
file specified as an argument to this control. This differs from
|
||||||
|
<emphasis>include</emphasis> in that evaluation of the
|
||||||
|
<emphasis>done</emphasis> and <emphasis>die</emphasis> actions
|
||||||
|
in a substack does not cause skipping the rest of the complete
|
||||||
|
module stack, but only of the substack. Jumps in a substack
|
||||||
|
also can not make evaluation jump out of it, and the whole substack
|
||||||
|
is counted as one module when the jump is done in a parent stack.
|
||||||
|
The <emphasis>reset</emphasis> action will reset the state of a
|
||||||
|
module stack to the state it was in as of beginning of the substack
|
||||||
|
evaluation.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
For the more complicated syntax valid <emphasis>control</emphasis>
|
||||||
|
values have the following form:
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
[value1=action1 value2=action2 ...]
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Where <emphasis>valueN</emphasis> corresponds to the return code
|
||||||
|
from the function invoked in the module for which the line is
|
||||||
|
defined. It is selected from one of these:
|
||||||
|
<emphasis>success</emphasis>, <emphasis>open_err</emphasis>,
|
||||||
|
<emphasis>symbol_err</emphasis>, <emphasis>service_err</emphasis>,
|
||||||
|
<emphasis>system_err</emphasis>, <emphasis>buf_err</emphasis>,
|
||||||
|
<emphasis>perm_denied</emphasis>, <emphasis>auth_err</emphasis>,
|
||||||
|
<emphasis>cred_insufficient</emphasis>,
|
||||||
|
<emphasis>authinfo_unavail</emphasis>,
|
||||||
|
<emphasis>user_unknown</emphasis>, <emphasis>maxtries</emphasis>,
|
||||||
|
<emphasis>new_authtok_reqd</emphasis>,
|
||||||
|
<emphasis>acct_expired</emphasis>, <emphasis>session_err</emphasis>,
|
||||||
|
<emphasis>cred_unavail</emphasis>, <emphasis>cred_expired</emphasis>,
|
||||||
|
<emphasis>cred_err</emphasis>, <emphasis>no_module_data</emphasis>,
|
||||||
|
<emphasis>conv_err</emphasis>, <emphasis>authtok_err</emphasis>,
|
||||||
|
<emphasis>authtok_recover_err</emphasis>,
|
||||||
|
<emphasis>authtok_lock_busy</emphasis>,
|
||||||
|
<emphasis>authtok_disable_aging</emphasis>,
|
||||||
|
<emphasis>try_again</emphasis>, <emphasis>ignore</emphasis>,
|
||||||
|
<emphasis>abort</emphasis>, <emphasis>authtok_expired</emphasis>,
|
||||||
|
<emphasis>module_unknown</emphasis>, <emphasis>bad_item</emphasis>,
|
||||||
|
<emphasis>conv_again</emphasis>, <emphasis>incomplete</emphasis>,
|
||||||
|
and <emphasis>default</emphasis>.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The last of these, <emphasis>default</emphasis>, implies 'all
|
||||||
|
<emphasis>valueN</emphasis>'s not mentioned explicitly. Note, the
|
||||||
|
full list of PAM errors is available in
|
||||||
|
<filename>/usr/include/security/_pam_types.h</filename>. The
|
||||||
|
<emphasis>actionN</emphasis> can take one of the following forms:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>ignore</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
when used with a stack of modules, the module's return
|
||||||
|
status will not contribute to the return code the application
|
||||||
|
obtains.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>bad</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
this action indicates that the return code should be thought
|
||||||
|
of as indicative of the module failing. If this module is the
|
||||||
|
first in the stack to fail, its status value will be used for
|
||||||
|
that of the whole stack. This is the default action for
|
||||||
|
all return codes.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>die</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
equivalent to <emphasis>bad</emphasis> with the side effect of
|
||||||
|
terminating the module stack and PAM immediately returning to
|
||||||
|
the application.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>ok</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
this tells PAM that the administrator thinks this return code
|
||||||
|
should contribute directly to the return code of the full
|
||||||
|
stack of modules. In other words, if the former state of the
|
||||||
|
stack would lead to a return of <emphasis>PAM_SUCCESS</emphasis>,
|
||||||
|
the module's return code will override this value. Note, if
|
||||||
|
the former state of the stack holds some value that is
|
||||||
|
indicative of a modules failure, this 'ok' value will not be
|
||||||
|
used to override that value.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>done</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
equivalent to <emphasis>ok</emphasis> with the side effect of
|
||||||
|
terminating the module stack and PAM immediately returning to the
|
||||||
|
application unless there was a non-ignored module failure before.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>N (an unsigned integer)</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
jump over the next N modules in the stack.
|
||||||
|
Note that N equal to 0 is not allowed,
|
||||||
|
it would be treated as <emphasis>ignore</emphasis> in such case.
|
||||||
|
The side effect depends on the PAM function call:
|
||||||
|
for <emphasis>pam_authenticate</emphasis>,
|
||||||
|
<emphasis>pam_acct_mgmt</emphasis>,
|
||||||
|
<emphasis>pam_chauthtok</emphasis>, and
|
||||||
|
<emphasis>pam_open_session</emphasis>
|
||||||
|
it is <emphasis>ignore</emphasis>;
|
||||||
|
for <emphasis>pam_setcred</emphasis> and
|
||||||
|
<emphasis>pam_close_session</emphasis> it is
|
||||||
|
one of <emphasis>ignore</emphasis>, <emphasis>ok</emphasis>,
|
||||||
|
or <emphasis>bad</emphasis> depending on the module's return value.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>reset</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
clear all memory of the state of the module stack and
|
||||||
|
start again with the next stacked module.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If a return code's action is not specifically defined via a
|
||||||
|
<emphasis>valueN</emphasis> token, and the
|
||||||
|
<emphasis>default</emphasis> value is not specified, that return
|
||||||
|
code's action defaults to <emphasis>bad</emphasis>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Each of the four keywords: required; requisite; sufficient; and
|
||||||
|
optional, have an equivalent expression in terms of the [...]
|
||||||
|
syntax. They are as follows:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>required</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
[success=ok new_authtok_reqd=ok ignore=ignore default=bad]
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>requisite</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
[success=ok new_authtok_reqd=ok ignore=ignore default=die]
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>sufficient</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
[success=done new_authtok_reqd=done default=ignore]
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>optional</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
[success=ok new_authtok_reqd=ok default=ignore]
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<emphasis>module-path</emphasis> is either the full filename
|
||||||
|
of the PAM to be used by the application (it begins with a '/'),
|
||||||
|
or a relative pathname from the default module location:
|
||||||
|
<filename>/lib/security/</filename> or
|
||||||
|
<filename>/lib64/security/</filename>, depending on the architecture.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<emphasis>module-arguments</emphasis> are a space separated list
|
||||||
|
of tokens that can be used to modify the specific behavior of the
|
||||||
|
given PAM. Such arguments will be documented for each individual
|
||||||
|
module. Note, if you wish to include spaces in an argument, you
|
||||||
|
should surround that argument with square brackets.
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
squid auth required pam_mysql.so user=passwd_query passwd=mada \
|
||||||
|
db=eminence [query=select user_name from internet_service \
|
||||||
|
where user_name='%u' and password=PASSWORD('%p') and \
|
||||||
|
service='web_proxy']
|
||||||
|
</programlisting>
|
||||||
|
<para>
|
||||||
|
When using this convention, you can include `[' characters
|
||||||
|
inside the string, and if you wish to include a `]' character
|
||||||
|
inside the string that will survive the argument parsing, you
|
||||||
|
should use `\]'. In other words:
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
[..[..\]..] --> ..[..]..
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Any line in (one of) the configuration file(s), that is not formatted
|
||||||
|
correctly, will generally tend (erring on the side of caution) to make
|
||||||
|
the authentication process fail. A corresponding error is written to
|
||||||
|
the system log files with a call to
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</section>
|
85
doc/man/pam.conf.5.xml
Normal file
85
doc/man/pam.conf.5.xml
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam.conf">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam.conf</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam.conf-name">
|
||||||
|
<refname>pam.conf</refname>
|
||||||
|
<refname>pam.d</refname>
|
||||||
|
<refpurpose>PAM configuration files</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam.conf-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam.conf-desc.xml" xpointer='xpointer(id("pam.conf-desc")/*)' />
|
||||||
|
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam.conf-syntax.xml" xpointer='xpointer(id("pam.conf-syntax")/*)' />
|
||||||
|
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam.conf-dir.xml" xpointer='xpointer(id("pam.conf-dir")/*)' />
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam8-files">
|
||||||
|
<title>FILES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>/etc/pam.conf</term>
|
||||||
|
<listitem>
|
||||||
|
<para>the configuration file</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>/etc/pam.d</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
the <emphasis remap="B">Linux-PAM</emphasis> configuration
|
||||||
|
directory. Generally, if this directory is present, the
|
||||||
|
<filename>/etc/pam.conf</filename> file is ignored.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>/usr/lib/pam.d</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
the <emphasis remap="B">Linux-PAM</emphasis> vendor configuration
|
||||||
|
directory. Files in <filename>/etc/pam.d</filename> override
|
||||||
|
files with the same name in this directory.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry condition="with_vendordir">
|
||||||
|
<term>%vendordir%/pam.d</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
additional <emphasis remap="B">Linux-PAM</emphasis> vendor
|
||||||
|
configuration directory. Files in <filename>/etc/pam.d</filename>
|
||||||
|
and <filename>/usr/lib/pam.d</filename> override files with the
|
||||||
|
same name in this directory.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam.conf-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>PAM</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
143
doc/man/pam_acct_mgmt.3.xml
Normal file
143
doc/man/pam_acct_mgmt.3.xml
Normal file
|
@ -0,0 +1,143 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_acct_mgmt">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_acct_mgmt</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_acct_mgmt-name">
|
||||||
|
<refname>pam_acct_mgmt</refname>
|
||||||
|
<refpurpose>PAM account validation management</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_acct_mgmt-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_appl.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_acct_mgmt</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_acct_mgmt-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_acct_mgmt</function> function is used to determine
|
||||||
|
if the user's account is valid. It checks for authentication token
|
||||||
|
and account expiration and verifies access restrictions. It is
|
||||||
|
typically called after the user has been authenticated.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <emphasis>pamh</emphasis> argument is an authentication
|
||||||
|
handle obtained by a prior call to pam_start().
|
||||||
|
The flags argument is the binary or of zero or more of the
|
||||||
|
following values:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SILENT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Do not emit any messages.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_DISALLOW_NULL_AUTHTOK</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The PAM module service should return PAM_NEW_AUTHTOK_REQD
|
||||||
|
if the user has a null authentication token.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_acct_mgmt-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_ACCT_EXPIRED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
User account has expired.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTH_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Authentication failure.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_NEW_AUTHTOK_REQD</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The user account is valid but their authentication token
|
||||||
|
is <emphasis>expired</emphasis>. The correct response to
|
||||||
|
this return-value is to require that the user satisfies
|
||||||
|
the <function>pam_chauthtok()</function> function before
|
||||||
|
obtaining service. It may not be possible for some
|
||||||
|
applications to do this. In such cases, the user should be
|
||||||
|
denied access until such time as they can update their password.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_PERM_DENIED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Permission denied.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The authentication token was successfully updated.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_USER_UNKNOWN</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
User unknown to password service.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_acct_mgmt-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_authenticate</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_chauthtok</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
167
doc/man/pam_authenticate.3.xml
Normal file
167
doc/man/pam_authenticate.3.xml
Normal file
|
@ -0,0 +1,167 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_authenticate">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_authenticate</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_authenticate-name">
|
||||||
|
<refname>pam_authenticate</refname>
|
||||||
|
<refpurpose>account authentication</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_authenticate-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_appl.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_authenticate</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_authenticate-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_authenticate</function> function is used to
|
||||||
|
authenticate the user. The user is required to provide an
|
||||||
|
authentication token depending upon the authentication service,
|
||||||
|
usually this is a password, but could also be a finger print.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The PAM service module may request that the user enter their
|
||||||
|
username via the conversation mechanism (see
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> and
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_conv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>). The name of the authenticated user
|
||||||
|
will be present in the PAM item PAM_USER. This item may be
|
||||||
|
recovered with a call to
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <emphasis>pamh</emphasis> argument is an authentication
|
||||||
|
handle obtained by a prior call to pam_start().
|
||||||
|
The flags argument is the binary or of zero or more of the
|
||||||
|
following values:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SILENT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Do not emit any messages.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_DISALLOW_NULL_AUTHTOK</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The PAM module service should return PAM_AUTH_ERR
|
||||||
|
if the user does not have a registered authentication token.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_authenticate-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_ABORT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The application should exit immediately after calling
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_end</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> first.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTH_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The user was not authenticated.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CRED_INSUFFICIENT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
For some reason the application does not have sufficient
|
||||||
|
credentials to authenticate the user.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHINFO_UNAVAIL</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The modules were not able to access the authentication
|
||||||
|
information. This might be due to a network or hardware
|
||||||
|
failure etc.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_MAXTRIES</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
One or more of the authentication modules has reached its
|
||||||
|
limit of tries authenticating the user. Do not try again.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The user was successfully authenticated.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_USER_UNKNOWN</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
User unknown to authentication service.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_authenticate-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_setcred</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_chauthtok</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
162
doc/man/pam_chauthtok.3.xml
Normal file
162
doc/man/pam_chauthtok.3.xml
Normal file
|
@ -0,0 +1,162 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_chauthtok">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_chauthtok</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_chauthtok-name">
|
||||||
|
<refname>pam_chauthtok</refname>
|
||||||
|
<refpurpose>updating authentication tokens</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_chauthtok-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_appl.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_chauthtok</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_chauthtok-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_chauthtok</function> function is used to change the
|
||||||
|
authentication token for a given user (as indicated by the state
|
||||||
|
associated with the handle <emphasis>pamh</emphasis>).
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <emphasis>pamh</emphasis> argument is an authentication
|
||||||
|
handle obtained by a prior call to pam_start().
|
||||||
|
The flags argument is the binary or of zero or more of the
|
||||||
|
following values:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SILENT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Do not emit any messages.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CHANGE_EXPIRED_AUTHTOK</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This argument indicates to the modules that the user's
|
||||||
|
authentication token (password) should only be changed
|
||||||
|
if it has expired.
|
||||||
|
If this argument is not passed, the application requires
|
||||||
|
that all authentication tokens are to be changed.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_chauthtok-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHTOK_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
A module was unable to obtain the new authentication token.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHTOK_RECOVERY_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
A module was unable to obtain the old authentication token.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHTOK_LOCK_BUSY</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
One or more of the modules was unable to change the
|
||||||
|
authentication token since it is currently locked.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHTOK_DISABLE_AGING</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Authentication token aging has been disabled for at least
|
||||||
|
one of the modules.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_PERM_DENIED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Permission denied.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The authentication token was successfully updated.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_TRY_AGAIN</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Not all of the modules were in a position to update the
|
||||||
|
authentication token(s). In such a case none of the user's
|
||||||
|
authentication tokens are updated.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_USER_UNKNOWN</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
User unknown to password service.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_chauthtok-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_authenticate</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_setcred</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
112
doc/man/pam_close_session.3.xml
Normal file
112
doc/man/pam_close_session.3.xml
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_send">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_close_session</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_close_session-name">
|
||||||
|
<refname>pam_close_session</refname>
|
||||||
|
<refpurpose>terminate PAM session management</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_close_session-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_appl.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_close_session</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_close_session-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_close_session</function> function is used
|
||||||
|
to indicate that an authenticated session has ended.
|
||||||
|
The session should have been created with a call to
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_open_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
It should be noted that the effective uid,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>geteuid</refentrytitle><manvolnum>2</manvolnum>
|
||||||
|
</citerefentry>. of the application should be of sufficient
|
||||||
|
privilege to perform such tasks as unmounting the
|
||||||
|
user's home directory for example.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The flags argument is the binary or of zero or more of the
|
||||||
|
following values:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SILENT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Do not emit any messages.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_close_session-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_ABORT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
General failure.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_BUF_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Memory buffer error.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SESSION_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Session failure.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Session was successful terminated.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_close_session-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_open_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
226
doc/man/pam_conv.3.xml
Normal file
226
doc/man/pam_conv.3.xml
Normal file
|
@ -0,0 +1,226 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_conv">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_conv</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_conv-name">
|
||||||
|
<refname>pam_conv</refname>
|
||||||
|
<refpurpose>PAM conversation function</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_conv-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_appl.h></funcsynopsisinfo>
|
||||||
|
</funcsynopsis>
|
||||||
|
<programlisting>
|
||||||
|
struct pam_message {
|
||||||
|
int msg_style;
|
||||||
|
const char *msg;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct pam_response {
|
||||||
|
char *resp;
|
||||||
|
int resp_retcode;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct pam_conv {
|
||||||
|
int (*conv)(int num_msg, const struct pam_message **msg,
|
||||||
|
struct pam_response **resp, void *appdata_ptr);
|
||||||
|
void *appdata_ptr;
|
||||||
|
};
|
||||||
|
</programlisting>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_conv-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The PAM library uses an application-defined callback to allow
|
||||||
|
a direct communication between a loaded module and the application.
|
||||||
|
This callback is specified by the
|
||||||
|
<emphasis>struct pam_conv</emphasis> passed to
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
at the start of the transaction.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
When a module calls the referenced conv() function, the argument
|
||||||
|
<emphasis>appdata_ptr</emphasis> is set to the second element of
|
||||||
|
this structure.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The other arguments of a call to conv() concern the information
|
||||||
|
exchanged by module and application. That is to say,
|
||||||
|
<emphasis>num_msg</emphasis> holds the length of the array of
|
||||||
|
pointers, <emphasis>msg</emphasis>. After a successful return, the
|
||||||
|
pointer <emphasis>resp</emphasis> points to an array of pam_response
|
||||||
|
structures, holding the application supplied text. The
|
||||||
|
<emphasis>resp_retcode</emphasis> member of this struct is unused and
|
||||||
|
should be set to zero. It is the caller's responsibility to release
|
||||||
|
both, this array and the responses themselves, using
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>free</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>. Note, <emphasis>*resp</emphasis> is a
|
||||||
|
<emphasis>struct pam_response</emphasis> array and not an array of
|
||||||
|
pointers.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The number of responses is always equal to the
|
||||||
|
<emphasis>num_msg</emphasis> conversation function argument.
|
||||||
|
This does require that the response array is
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>free</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>'d after
|
||||||
|
every call to the conversation function. The index of the
|
||||||
|
responses corresponds directly to the prompt index in the
|
||||||
|
pam_message array.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
On failure, the conversation function should release any resources
|
||||||
|
it has allocated, and return one of the predefined PAM error codes.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Each message can have one of four types, specified by the
|
||||||
|
<emphasis>msg_style</emphasis> member of
|
||||||
|
<emphasis>struct pam_message</emphasis>:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_PROMPT_ECHO_OFF</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Obtain a string without echoing any text.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_PROMPT_ECHO_ON</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Obtain a string whilst echoing text.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_ERROR_MSG</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Display an error message.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_TEXT_INFO</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Display some text.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
<para>
|
||||||
|
The point of having an array of messages is that it becomes possible
|
||||||
|
to pass a number of things to the application in a single call from
|
||||||
|
the module. It can also be convenient for the application that related
|
||||||
|
things come at once: a windows based application can then present a
|
||||||
|
single form with many messages/prompts on at once.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
In passing, it is worth noting that there is a discrepancy between
|
||||||
|
the way Linux-PAM handles the const struct pam_message **msg
|
||||||
|
conversation function argument and the way that Solaris' PAM
|
||||||
|
(and derivatives, known to include HP/UX, are there others?) does.
|
||||||
|
Linux-PAM interprets the msg argument as entirely equivalent to the
|
||||||
|
following prototype
|
||||||
|
const struct pam_message *msg[] (which, in spirit, is consistent with
|
||||||
|
the commonly used prototypes for argv argument to the familiar main()
|
||||||
|
function: char **argv; and char *argv[]). Said another way Linux-PAM
|
||||||
|
interprets the msg argument as a pointer to an array of num_msg read
|
||||||
|
only 'struct pam_message' pointers. Solaris' PAM implementation
|
||||||
|
interprets this argument as a pointer to a pointer to an array of
|
||||||
|
num_msg pam_message structures. Fortunately, perhaps, for most
|
||||||
|
module/application developers when num_msg has a value of one these
|
||||||
|
two definitions are entirely equivalent. Unfortunately, casually
|
||||||
|
raising this number to two has led to unanticipated compatibility
|
||||||
|
problems.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
For what its worth the two known module writer work-arounds for trying
|
||||||
|
to maintain source level compatibility with both PAM implementations
|
||||||
|
are:
|
||||||
|
</para>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
never call the conversation function with num_msg greater than one.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
set up msg as doubly referenced so both types of conversation
|
||||||
|
function can find the messages. That is, make
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
msg[n] = & (( *msg )[n])
|
||||||
|
</programlisting>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_conv-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_BUF_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Memory buffer error.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CONV_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Conversation failure. The application should not set
|
||||||
|
<emphasis>*resp</emphasis>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Success.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_conv-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_set_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
119
doc/man/pam_end.3.xml
Normal file
119
doc/man/pam_end.3.xml
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_end">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_end</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_end-name">
|
||||||
|
<refname>pam_end</refname>
|
||||||
|
<refpurpose>termination of PAM transaction</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_end-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_appl.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_end</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>pam_status</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_end-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_end</function> function terminates the PAM
|
||||||
|
transaction and is the last function an application should call
|
||||||
|
in the PAM context. Upon return the handle <emphasis>pamh</emphasis>
|
||||||
|
is no longer valid and all memory associated with it will be
|
||||||
|
invalid.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <emphasis>pam_status</emphasis> argument should be set to
|
||||||
|
the value returned to the application by the last PAM
|
||||||
|
library call.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The value taken by <emphasis>pam_status</emphasis> is used as
|
||||||
|
an argument to the module specific callback function,
|
||||||
|
<function>cleanup()</function>
|
||||||
|
(See <citerefentry>
|
||||||
|
<refentrytitle>pam_set_data</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> and
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_data</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>). In this way the module can be given notification
|
||||||
|
of the pass/fail nature of the tear-down process, and perform any
|
||||||
|
last minute tasks that are appropriate to the module before it is
|
||||||
|
unlinked. This argument can be logically OR'd with
|
||||||
|
<emphasis>PAM_DATA_SILENT</emphasis> to indicate that
|
||||||
|
the module should not treat the call too seriously. It is generally
|
||||||
|
used to indicate that the current closing of the library is in a
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>fork</refentrytitle><manvolnum>2</manvolnum>
|
||||||
|
</citerefentry>ed
|
||||||
|
process, and that the parent will take care of cleaning up things
|
||||||
|
that exist outside of the current process space (files etc.).
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This function <emphasis>free</emphasis>'s all memory for items
|
||||||
|
associated with the
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_set_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> and
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> functions. Pointers associated with such objects
|
||||||
|
are not valid anymore after <function>pam_end</function> was called.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</refsect1>
|
||||||
|
<refsect1 xml:id="pam_end-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Transaction was successful terminated.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SYSTEM_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
System error, for example a NULL pointer was submitted
|
||||||
|
as PAM handle or the function was called by a module.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_end-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_data</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_set_data</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
118
doc/man/pam_error.3.xml
Normal file
118
doc/man/pam_error.3.xml
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_error">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_error</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_error-name">
|
||||||
|
<refname>pam_error</refname>
|
||||||
|
<refname>pam_verror</refname>
|
||||||
|
<refpurpose>display error messages to the user</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv xml:id="pam_error-synopsis">
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcsynopsisinfo>#include <security/pam_ext.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_error</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>fmt</parameter></paramdef>
|
||||||
|
<paramdef><parameter>...</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_verror</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>fmt</parameter></paramdef>
|
||||||
|
<paramdef>va_list <parameter>args</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_error-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_error</function> function prints error messages
|
||||||
|
through the conversation function to the user.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <function>pam_verror</function> function performs the same
|
||||||
|
task as <function>pam_error()</function> with the difference
|
||||||
|
that it takes a set of arguments which have been obtained using
|
||||||
|
the <citerefentry>
|
||||||
|
<refentrytitle>stdarg</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> variable argument list macros.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
<refsect1 xml:id="pam_error-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_BUF_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Memory buffer error.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CONV_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Conversation failure.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Error message was displayed.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SYSTEM_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
System error.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_error-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_info</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_vinfo</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_prompt</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_vprompt</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_error-standards">
|
||||||
|
<title>STANDARDS</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_error</function> and <function>pam_verror</function>
|
||||||
|
functions are Linux-PAM extensions.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
206
doc/man/pam_fail_delay.3.xml
Normal file
206
doc/man/pam_fail_delay.3.xml
Normal file
|
@ -0,0 +1,206 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_fail_delay">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_fail_delay</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_fail_delay-name">
|
||||||
|
<refname>pam_fail_delay</refname>
|
||||||
|
<refpurpose>request a delay on failure</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_fail_delay-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_appl.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_fail_delay</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>unsigned int <parameter>usec</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_fail_delay-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_fail_delay</function> function provides a
|
||||||
|
mechanism by which an application or module can suggest a minimum
|
||||||
|
delay of <emphasis>usec</emphasis> micro-seconds. The
|
||||||
|
function keeps a record of the longest time requested with this
|
||||||
|
function. Should
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_authenticate</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> fail, the failing return to the application is
|
||||||
|
delayed by an amount of time randomly distributed (by up to 50%)
|
||||||
|
about this longest value.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Independent of success, the delay time is reset to its zero
|
||||||
|
default value when the PAM service module returns control to
|
||||||
|
the application. The delay occurs <emphasis>after</emphasis> all
|
||||||
|
authentication modules have been called, but <emphasis>before</emphasis>
|
||||||
|
control is returned to the service application.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
When using this function the programmer should check if it is
|
||||||
|
available with:
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
#ifdef HAVE_PAM_FAIL_DELAY
|
||||||
|
....
|
||||||
|
#endif /* HAVE_PAM_FAIL_DELAY */
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
For applications written with a single thread that are event
|
||||||
|
driven in nature, generating this delay may be undesirable.
|
||||||
|
Instead, the application may want to register the delay in some
|
||||||
|
other way. For example, in a single threaded server that serves
|
||||||
|
multiple authentication requests from a single event loop, the
|
||||||
|
application might want to simply mark a given connection as
|
||||||
|
blocked until an application timer expires. For this reason
|
||||||
|
the delay function can be changed with the
|
||||||
|
<emphasis>PAM_FAIL_DELAY</emphasis> item. It can be queried and
|
||||||
|
set with
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
and
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_set_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> respectively. The value used to set it should be
|
||||||
|
a function pointer of the following prototype:
|
||||||
|
<programlisting>
|
||||||
|
void (*delay_fn)(int retval, unsigned usec_delay, void *appdata_ptr);
|
||||||
|
</programlisting>
|
||||||
|
The arguments being the <emphasis>retval</emphasis> return code
|
||||||
|
of the module stack, the <emphasis>usec_delay</emphasis>
|
||||||
|
micro-second delay that libpam is requesting and the
|
||||||
|
<emphasis>appdata_ptr</emphasis> that the application has associated
|
||||||
|
with the current <emphasis>pamh</emphasis>. This last value was set
|
||||||
|
by the application when it called
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> or explicitly with
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_set_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Note that the PAM_FAIL_DELAY item is set to NULL by default. This
|
||||||
|
indicates that PAM should perform a random delay as described
|
||||||
|
above when authentication fails and a delay has been suggested.
|
||||||
|
If an application does not want the PAM library to perform any
|
||||||
|
delay on authentication failure, then the application must define
|
||||||
|
a custom delay function that executes no statements and set
|
||||||
|
the PAM_FAIL_DELAY item to point to this function.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_fail_delay-rationale">
|
||||||
|
<title>RATIONALE</title>
|
||||||
|
<para>
|
||||||
|
It is often possible to attack an authentication scheme by exploiting
|
||||||
|
the time it takes the scheme to deny access to an applicant user. In
|
||||||
|
cases of <emphasis>short</emphasis> timeouts, it may prove possible
|
||||||
|
to attempt a <emphasis>brute force</emphasis> dictionary attack --
|
||||||
|
with an automated process, the attacker tries all possible passwords
|
||||||
|
to gain access to the system. In other cases, where individual
|
||||||
|
failures can take measurable amounts of time (indicating the nature
|
||||||
|
of the failure), an attacker can obtain useful information about the
|
||||||
|
authentication process. These latter attacks make use of procedural
|
||||||
|
delays that constitute a <emphasis>covert channel</emphasis>
|
||||||
|
of useful information.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
To minimize the effectiveness of such attacks, it is desirable to
|
||||||
|
introduce a random delay in a failed authentication process.
|
||||||
|
Preferable this value should be set by the application or a special
|
||||||
|
PAM module. Standard PAM modules should not modify the delay
|
||||||
|
unconditional.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_fail_delay-example">
|
||||||
|
<title>EXAMPLE</title>
|
||||||
|
<para>
|
||||||
|
For example, a login application may require a failure delay of
|
||||||
|
roughly 3 seconds. It will contain the following code:
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
pam_fail_delay (pamh, 3000000 /* micro-seconds */ );
|
||||||
|
pam_authenticate (pamh, 0);
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
if the modules do not request a delay, the failure delay will be
|
||||||
|
between 1.5 and 4.5 seconds.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
However, the modules, invoked in the authentication process, may
|
||||||
|
also request delays:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting>
|
||||||
|
module #1: pam_fail_delay (pamh, 2000000);
|
||||||
|
module #2: pam_fail_delay (pamh, 4000000);
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
in this case, it is the largest requested value that is used to
|
||||||
|
compute the actual failed delay: here between 2 and 6 seconds.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_fail_delay-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Delay was successful adjusted.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SYSTEM_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
A NULL pointer was submitted as PAM handle.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_fail_delay-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_fail_delay-standards">
|
||||||
|
<title>STANDARDS</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_fail_delay</function> function is an
|
||||||
|
Linux-PAM extension.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
246
doc/man/pam_get_authtok.3.xml
Normal file
246
doc/man/pam_get_authtok.3.xml
Normal file
|
@ -0,0 +1,246 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_get_authtok">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_get_authtok</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_get_authtok-name">
|
||||||
|
<refname>pam_get_authtok</refname>
|
||||||
|
<refname>pam_get_authtok_verify</refname>
|
||||||
|
<refname>pam_get_authtok_noverify</refname>
|
||||||
|
<refpurpose>get authentication token</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv xml:id="pam_get_authtok-synopsis">
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcsynopsisinfo>#include <security/pam_ext.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_get_authtok</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>item</parameter></paramdef>
|
||||||
|
<paramdef>const char **<parameter>authtok</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>prompt</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_get_authtok_noverify</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>const char **<parameter>authtok</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>prompt</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_get_authtok_verify</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>const char **<parameter>authtok</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>prompt</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_get_authtok-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_get_authtok</function> function returns the
|
||||||
|
cached authentication token, or prompts the user if no token is
|
||||||
|
currently cached. It is intended for internal use by Linux-PAM and
|
||||||
|
PAM service modules. Upon successful return,
|
||||||
|
<emphasis>authtok</emphasis> contains a pointer to the value of the
|
||||||
|
authentication token. Note, this is a pointer to the
|
||||||
|
<emphasis>actual</emphasis> data and should
|
||||||
|
<emphasis remap="B">not</emphasis> be <emphasis>free()</emphasis>'ed or
|
||||||
|
over-written!
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <emphasis>prompt</emphasis> argument specifies a prompt to use
|
||||||
|
if no token is cached. If a NULL pointer
|
||||||
|
is given, <function>pam_get_authtok</function> uses pre-defined prompts.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The following values are supported for <emphasis>item</emphasis>:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHTOK</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Returns the current authentication token. Called from
|
||||||
|
<citerefentry><refentrytitle>pam_sm_chauthtok</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> <function>pam_get_authtok</function> will
|
||||||
|
ask the user to confirm the new token by retyping it. If
|
||||||
|
a prompt was specified, "Retype" will be used as prefix.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_OLDAUTHTOK</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Returns the previous authentication token when changing
|
||||||
|
authentication tokens.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
<para>
|
||||||
|
The <function>pam_get_authtok_noverify</function> function can
|
||||||
|
only be used for changing the password
|
||||||
|
(from <citerefentry>
|
||||||
|
<refentrytitle>pam_sm_chauthtok</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>). It returns the cached
|
||||||
|
authentication token, or prompts the user if no token is
|
||||||
|
currently cached. The difference to <function>pam_get_authtok</function>
|
||||||
|
is, that this function does not ask a second time for the password
|
||||||
|
to verify it. Upon successful return, <emphasis>authtok</emphasis>
|
||||||
|
contains a pointer to the value of the authentication token. Note,
|
||||||
|
this is a pointer to the
|
||||||
|
<emphasis>actual</emphasis> data and should
|
||||||
|
<emphasis remap="B">not</emphasis> be <emphasis>free()</emphasis>'ed or
|
||||||
|
over-written!
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <function>pam_get_authtok_verify</function> function can
|
||||||
|
only be used to verify a password for mistypes gotten by
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_authtok_noverify</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>. This function asks a second time for the password
|
||||||
|
and verify it with the password provided by <emphasis>authtok</emphasis>
|
||||||
|
argument. In case of an error, the value of <emphasis>authtok</emphasis>
|
||||||
|
is undefined. Else this argument will point to the
|
||||||
|
<emphasis>actual</emphasis> data and should
|
||||||
|
<emphasis remap="B">not</emphasis> be <emphasis>free()</emphasis>'ed or
|
||||||
|
over-written!
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_get_authtok-options">
|
||||||
|
<title>OPTIONS</title>
|
||||||
|
<para>
|
||||||
|
<function>pam_get_authtok</function> honours the following module
|
||||||
|
options:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
try_first_pass
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Before prompting the user for their password, the module first
|
||||||
|
tries the previous stacked module's password in case that
|
||||||
|
satisfies this module as well.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
use_first_pass
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The argument <option>use_first_pass</option> forces the module
|
||||||
|
to use a previous stacked modules password and will never prompt
|
||||||
|
the user - if no password is available or the password is not
|
||||||
|
appropriate, the user will be denied access.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
use_authtok
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
When password changing enforce the module to set the new
|
||||||
|
token to the one provided by a previously stacked
|
||||||
|
<option>password</option> module. If no token is available
|
||||||
|
token changing will fail.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
authtok_type=XXX
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The default action is for the module to use the
|
||||||
|
following prompts when requesting passwords:
|
||||||
|
"New UNIX password: " and "Retype UNIX password: ".
|
||||||
|
The example word <emphasis>UNIX</emphasis> can
|
||||||
|
be replaced with this option, by default it is empty.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_get_authtok-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTH_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Authentication token could not be retrieved.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHTOK_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
New authentication could not be retrieved.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Authentication token was successfully retrieved.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SYSTEM_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
A NULL pointer was specified as the PAM handle, or
|
||||||
|
no space for an authentication token was provided.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_TRY_AGAIN</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
New authentication tokens mismatch.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_get_authtok-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_get_authtok-standards">
|
||||||
|
<title>STANDARDS</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_get_authtok</function> function is a Linux-PAM
|
||||||
|
extensions.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
104
doc/man/pam_get_data.3.xml
Normal file
104
doc/man/pam_get_data.3.xml
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_get_data">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_get_data</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_get_data-name">
|
||||||
|
<refname>pam_get_data</refname>
|
||||||
|
<refpurpose>
|
||||||
|
get module internal data
|
||||||
|
</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
|
||||||
|
<funcsynopsis xml:id="pam_get_data-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_modules.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_get_data</function></funcdef>
|
||||||
|
<paramdef>const pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>module_data_name</parameter></paramdef>
|
||||||
|
<paramdef>const void **<parameter>data</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_get_data-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
This function together with the
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_set_data</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> function
|
||||||
|
is useful to manage module-specific data meaningful only to
|
||||||
|
the calling PAM module.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <function>pam_get_data</function> function looks up the
|
||||||
|
object associated with the (hopefully) unique string
|
||||||
|
<emphasis>module_data_name</emphasis> in the PAM context
|
||||||
|
specified by the <emphasis>pamh</emphasis> argument.
|
||||||
|
A successful call to
|
||||||
|
<function>pam_get_data</function> will result in
|
||||||
|
<emphasis>data</emphasis> pointing to the object. Note,
|
||||||
|
this data is <emphasis>not</emphasis> a copy and should be
|
||||||
|
treated as <emphasis>constant</emphasis> by the module.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_get_data-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Data was successful retrieved.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SYSTEM_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
A NULL pointer was submitted as PAM handle or the
|
||||||
|
function was called by an application.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_NO_MODULE_DATA</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
No module specific data is present.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_get_data-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_end</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_set_data</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
132
doc/man/pam_get_item.3.xml
Normal file
132
doc/man/pam_get_item.3.xml
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_get_item">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_get_item</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_get_item-name">
|
||||||
|
<refname>pam_get_item</refname>
|
||||||
|
<refpurpose>
|
||||||
|
getting PAM information
|
||||||
|
</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
|
||||||
|
<funcsynopsis xml:id="pam_get_item-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_modules.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_get_item</function></funcdef>
|
||||||
|
<paramdef>const pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>item_type</parameter></paramdef>
|
||||||
|
<paramdef>const void **<parameter>item</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_get_item-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_get_item</function> function allows applications
|
||||||
|
and PAM service modules to access and retrieve PAM information
|
||||||
|
of <emphasis>item_type</emphasis>. Upon successful return,
|
||||||
|
<emphasis>item</emphasis> contains a pointer to the value of the
|
||||||
|
corresponding item. Note, this is a pointer to the
|
||||||
|
<emphasis>actual</emphasis> data and should
|
||||||
|
<emphasis remap="B">not</emphasis> be <emphasis>free()</emphasis>'ed or
|
||||||
|
over-written! The following values are supported for
|
||||||
|
<emphasis>item_type</emphasis>:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_item_types_std.inc.xml"/>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The following additional items are specific to Linux-PAM and should not be used in
|
||||||
|
portable applications:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_item_types_ext.inc.xml"/>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If a service module wishes to obtain the name of the user,
|
||||||
|
it should not use this function, but instead perform a call to
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_user</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Only a service module is privileged to read the
|
||||||
|
authentication tokens, PAM_AUTHTOK and PAM_OLDAUTHTOK.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_get_item-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_BAD_ITEM</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The application attempted to set an undefined or inaccessible
|
||||||
|
item.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_BUF_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Memory buffer error.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_PERM_DENIED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The value of <emphasis>item</emphasis> was NULL.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Data was successful updated.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SYSTEM_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The <emphasis>pam_handle_t</emphasis> passed as first
|
||||||
|
argument was invalid.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_get_item-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_set_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
161
doc/man/pam_get_user.3.xml
Normal file
161
doc/man/pam_get_user.3.xml
Normal file
|
@ -0,0 +1,161 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_get_user">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_get_user</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_get_user-name">
|
||||||
|
<refname>pam_get_user</refname>
|
||||||
|
<refpurpose>
|
||||||
|
get user name
|
||||||
|
</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
|
||||||
|
<funcsynopsis xml:id="pam_get_user-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_modules.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_get_user</function></funcdef>
|
||||||
|
<paramdef>const pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>const char **<parameter>user</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>prompt</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_get_user-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_get_user</function> function returns the
|
||||||
|
name of the user specified by
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>. If no user was specified it returns what
|
||||||
|
<function>pam_get_item (pamh, PAM_USER, ... );</function> would
|
||||||
|
have returned. If this is NULL it obtains the username via the
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_conv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> mechanism, it prompts the user with the first
|
||||||
|
non-NULL string in the following list:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The <emphasis>prompt</emphasis> argument passed to the function.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
What is returned by pam_get_item (pamh, PAM_USER_PROMPT, ... );
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The default prompt: "login: "
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
<para>
|
||||||
|
By whatever means the username is obtained, a pointer to it is
|
||||||
|
returned as the contents of <emphasis>*user</emphasis>. Note,
|
||||||
|
this memory should <emphasis remap="B">not</emphasis> be
|
||||||
|
<emphasis>free()</emphasis>'d or <emphasis>modified</emphasis>
|
||||||
|
by the module.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
This function sets the <emphasis>PAM_USER</emphasis> item
|
||||||
|
associated with the
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_set_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> and
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> functions.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_get_user-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
User name was successful retrieved.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SYSTEM_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
A NULL pointer was submitted.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CONV_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The conversation method supplied by the
|
||||||
|
application failed to obtain the username.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_BUF_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Memory buffer error.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_ABORT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Error resuming an old conversation.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CONV_AGAIN</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The conversation method supplied by the application
|
||||||
|
is waiting for an event.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_get_user-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_end</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_set_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
65
doc/man/pam_getenv.3.xml
Normal file
65
doc/man/pam_getenv.3.xml
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_getenv">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_getenv</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_getenv-name">
|
||||||
|
<refname>pam_getenv</refname>
|
||||||
|
<refpurpose>get a PAM environment variable</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_getenv-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_appl.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>const char *<function>pam_getenv</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>name</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_getenv-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_getenv</function> function searches the
|
||||||
|
PAM environment list as associated with the handle
|
||||||
|
<emphasis>pamh</emphasis> for an item that matches the string
|
||||||
|
pointed to by <emphasis>name</emphasis> and returns a pointer
|
||||||
|
to the value of the environment variable. The application is
|
||||||
|
not allowed to free the data.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_getenv-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_getenv</function> function returns NULL
|
||||||
|
on failure.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_getenv-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_getenvlist</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_putenv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
83
doc/man/pam_getenvlist.3.xml
Normal file
83
doc/man/pam_getenvlist.3.xml
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_getenvlist">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_getenvlist</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_getenvlist-name">
|
||||||
|
<refname>pam_getenvlist</refname>
|
||||||
|
<refpurpose>getting the PAM environment</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_getenvlist-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_appl.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>char **<function>pam_getenvlist</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_getenvlist-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_getenvlist</function> function returns a complete
|
||||||
|
copy of the PAM environment as associated with the handle
|
||||||
|
<emphasis>pamh</emphasis>. The PAM environment variables
|
||||||
|
represent the contents of the regular environment variables of the
|
||||||
|
authenticated user when service is granted.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The format of the memory is a malloc()'d array of char pointers,
|
||||||
|
the last element of which is set to NULL. Each of the non-NULL
|
||||||
|
entries in this array point to a NUL terminated and malloc()'d
|
||||||
|
char string of the form: "<emphasis>name=value</emphasis>".
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
It should be noted that this memory will never be free()'d by
|
||||||
|
libpam. Once obtained by a call to
|
||||||
|
<function>pam_getenvlist</function>, it is the responsibility of
|
||||||
|
the calling application to free() this memory.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
It is by design, and not a coincidence, that the format and contents
|
||||||
|
of the returned array matches that required for the third argument of
|
||||||
|
the
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>execle</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> function call.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_getenvlist-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_getenvlist</function> function returns NULL
|
||||||
|
on failure.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_getenvlist-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_getenv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_putenv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
106
doc/man/pam_info.3.xml
Normal file
106
doc/man/pam_info.3.xml
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_info">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_info</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_info-name">
|
||||||
|
<refname>pam_info</refname>
|
||||||
|
<refname>pam_vinfo</refname>
|
||||||
|
<refpurpose>display messages to the user</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv xml:id="pam_info-synopsis">
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcsynopsisinfo>#include <security/pam_ext.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_info</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>fmt</parameter></paramdef>
|
||||||
|
<paramdef><parameter>...</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_vinfo</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>fmt</parameter></paramdef>
|
||||||
|
<paramdef>va_list <parameter>args</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_info-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_info</function> function prints messages
|
||||||
|
through the conversation function to the user.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <function>pam_vinfo</function> function performs the same
|
||||||
|
task as <function>pam_info()</function> with the difference
|
||||||
|
that it takes a set of arguments which have been obtained using
|
||||||
|
the <citerefentry>
|
||||||
|
<refentrytitle>stdarg</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> variable argument list macros.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
<refsect1 xml:id="pam_info-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_BUF_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Memory buffer error.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CONV_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Conversation failure.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Transaction was successful created.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SYSTEM_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
System error.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_info-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_info-standards">
|
||||||
|
<title>STANDARDS</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_info</function> and <function>pam_vinfo</function>
|
||||||
|
functions are Linux-PAM extensions.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
60
doc/man/pam_item_types_ext.inc.xml
Normal file
60
doc/man/pam_item_types_ext.inc.xml
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
<!-- this file is included by pam_set_item and pam_get_item -->
|
||||||
|
<variablelist xmlns="http://docbook.org/ns/docbook" version="5.0">
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_FAIL_DELAY</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
A function pointer to redirect centrally managed
|
||||||
|
failure delays. See
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_fail_delay</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_XDISPLAY</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The name of the X display. For graphical, X-based applications the
|
||||||
|
value for this item should be the <emphasis>$DISPLAY</emphasis>
|
||||||
|
variable. This value may be used independently of
|
||||||
|
<emphasis>PAM_TTY</emphasis> for passing the
|
||||||
|
name of the display.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_XAUTHDATA</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
A pointer to a structure containing the X authentication data
|
||||||
|
required to make a connection to the display specified by
|
||||||
|
<emphasis>PAM_XDISPLAY</emphasis>, if such information is
|
||||||
|
necessary. See
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_xauth_data</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHTOK_TYPE</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The default action is for the module to use the
|
||||||
|
following prompts when requesting passwords:
|
||||||
|
"New UNIX password: " and "Retype UNIX password: ".
|
||||||
|
The example word <emphasis>UNIX</emphasis> can
|
||||||
|
be replaced with this item, by default it is empty.
|
||||||
|
This item is used by <citerefentry>
|
||||||
|
<refentrytitle>pam_get_authtok</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
</variablelist>
|
139
doc/man/pam_item_types_std.inc.xml
Normal file
139
doc/man/pam_item_types_std.inc.xml
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
<!-- this file is included by pam_set_item and pam_get_item -->
|
||||||
|
<variablelist xmlns="http://docbook.org/ns/docbook" version="5.0">
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SERVICE</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The service name (which identifies that PAM stack that
|
||||||
|
the PAM functions will use to authenticate the program).
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_USER</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The username of the entity under whose identity service
|
||||||
|
will be given. That is, following authentication,
|
||||||
|
<emphasis>PAM_USER</emphasis> identifies the local entity
|
||||||
|
that gets to use the service. Note, this value can be mapped
|
||||||
|
from something (eg., "anonymous") to something else (eg.
|
||||||
|
"guest119") by any module in the PAM stack. As such an
|
||||||
|
application should consult the value of
|
||||||
|
<emphasis>PAM_USER</emphasis> after each call to a PAM function.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_USER_PROMPT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The string used when prompting for a user's name. The default
|
||||||
|
value for this string is a localized version of "login: ".
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_TTY</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The terminal name prefixed by <filename>/dev/</filename> for
|
||||||
|
device files.
|
||||||
|
In the past, graphical X-based applications used to store the
|
||||||
|
<emphasis>$DISPLAY</emphasis> variable here, but with the
|
||||||
|
introduction of <emphasis>PAM_XDISPLAY</emphasis> this usage
|
||||||
|
is deprecated.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_RUSER</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The requesting user name: local name for a locally
|
||||||
|
requesting user or a remote user name for a remote
|
||||||
|
requesting user.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Generally an application or module will attempt to supply
|
||||||
|
the value that is most strongly authenticated (a local account
|
||||||
|
before a remote one. The level of trust in this value is
|
||||||
|
embodied in the actual authentication stack associated with
|
||||||
|
the application, so it is ultimately at the discretion of the
|
||||||
|
system administrator.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
<emphasis>PAM_RUSER@PAM_RHOST</emphasis> should always identify
|
||||||
|
the requesting user. In some cases,
|
||||||
|
<emphasis>PAM_RUSER</emphasis> may be NULL. In such situations,
|
||||||
|
it is unclear who the requesting entity is.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_RHOST</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The requesting hostname (the hostname of the machine from
|
||||||
|
which the <emphasis>PAM_RUSER</emphasis> entity is requesting
|
||||||
|
service). That is <emphasis>PAM_RUSER@PAM_RHOST</emphasis>
|
||||||
|
does identify the requesting user. In some applications,
|
||||||
|
<emphasis>PAM_RHOST</emphasis> may be NULL. In such situations,
|
||||||
|
it is unclear where the authentication request is originating
|
||||||
|
from.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHTOK</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The authentication token (often a password). This token
|
||||||
|
should be ignored by all module functions besides
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_sm_authenticate</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> and
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_sm_chauthtok</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
In the former function it is used to pass the most recent
|
||||||
|
authentication token from one stacked module to another. In
|
||||||
|
the latter function the token is used for another purpose.
|
||||||
|
It contains the currently active authentication token.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_OLDAUTHTOK</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The old authentication token. This token should be ignored
|
||||||
|
by all module functions except
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_sm_chauthtok</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CONV</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The pam_conv structure. See
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_conv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
</variablelist>
|
60
doc/man/pam_misc_drop_env.3.xml
Normal file
60
doc/man/pam_misc_drop_env.3.xml
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_misc_drop_env">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_misc_drop_env</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_misc_drop_env-name">
|
||||||
|
<refname>pam_misc_drop_env</refname>
|
||||||
|
<refpurpose>liberating a locally saved environment</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_misc_drop_env-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_misc.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_misc_drop_env</function></funcdef>
|
||||||
|
<paramdef>char **<parameter>env</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_misc_drop_env-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
This function is defined to complement the <citerefentry>
|
||||||
|
<refentrytitle>pam_getenvlist</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> function. It liberates the memory associated
|
||||||
|
with <parameter>env</parameter>, <emphasis>overwriting</emphasis>
|
||||||
|
with <emphasis>0</emphasis> all memory before
|
||||||
|
<function>free()</function>ing it.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_misc_drop_env-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_getenvlist</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_misc_drop_env-standards">
|
||||||
|
<title>STANDARDS</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_misc_drop_env</function> function is part of the
|
||||||
|
<command>libpam_misc</command> Library and not defined in any
|
||||||
|
standard.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
58
doc/man/pam_misc_paste_env.3.xml
Normal file
58
doc/man/pam_misc_paste_env.3.xml
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_misc_paste_env">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_misc_paste_env</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_misc_paste_env-name">
|
||||||
|
<refname>pam_misc_paste_env</refname>
|
||||||
|
<refpurpose>transcribing an environment to that of PAM</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_misc_paste_env-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_misc.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_misc_paste_env</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>const char * const *<parameter>user</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_misc_paste_env-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
This function takes the supplied list of environment pointers and
|
||||||
|
<emphasis>uploads</emphasis> its contents to the PAM environment.
|
||||||
|
Success is indicated by <errorname>PAM_SUCCESS</errorname>.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_misc_paste_env-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_putenv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_misc_paste_env-standards">
|
||||||
|
<title>STANDARDS</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_misc_paste_env</function> function is part of the
|
||||||
|
<command>libpam_misc</command> Library and not defined in any
|
||||||
|
standard.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
65
doc/man/pam_misc_setenv.3.xml
Normal file
65
doc/man/pam_misc_setenv.3.xml
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_misc_setenv">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_misc_setenv</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
<refnamediv xml:id="pam_misc_setenv-name">
|
||||||
|
<refname>pam_misc_setenv</refname>
|
||||||
|
<refpurpose>BSD like PAM environment variable setting</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_misc_setenv-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_misc.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_misc_setenv</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>name</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>value</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>readonly</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_misc_setenv-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
This function performs a task equivalent to <citerefentry>
|
||||||
|
<refentrytitle>pam_putenv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, its syntax is, however, more like the BSD style
|
||||||
|
function; <function>setenv()</function>. The <parameter>name</parameter>
|
||||||
|
and <parameter>value</parameter> are concatenated with an '=' to
|
||||||
|
form a name=value and passed to <function>pam_putenv()</function>.
|
||||||
|
If, however, the PAM variable is already set, the replacement will
|
||||||
|
only be applied if the last argument, <parameter>readonly</parameter>,
|
||||||
|
is zero.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_misc_setenv-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_putenv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_misc_setenv-standards">
|
||||||
|
<title>STANDARDS</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_misc_setenv</function> function is part of the
|
||||||
|
<command>libpam_misc</command> Library and not defined in any
|
||||||
|
standard.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
112
doc/man/pam_open_session.3.xml
Normal file
112
doc/man/pam_open_session.3.xml
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_send">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_open_session</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_open_session-name">
|
||||||
|
<refname>pam_open_session</refname>
|
||||||
|
<refpurpose>start PAM session management</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_open_session-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_appl.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_open_session</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_open_session-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_open_session</function> function sets up a
|
||||||
|
user session for a previously successful authenticated user.
|
||||||
|
The session should later be terminated with a call to
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_close_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
It should be noted that the effective uid,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>geteuid</refentrytitle><manvolnum>2</manvolnum>
|
||||||
|
</citerefentry>, of the application should be of sufficient
|
||||||
|
privilege to perform such tasks as creating or mounting the
|
||||||
|
user's home directory for example.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The flags argument is the binary or of zero or more of the
|
||||||
|
following values:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SILENT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Do not emit any messages.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_open_session-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_ABORT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
General failure.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_BUF_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Memory buffer error.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SESSION_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Session failure.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Session was successful created.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_open_session-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_close_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
111
doc/man/pam_prompt.3.xml
Normal file
111
doc/man/pam_prompt.3.xml
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_prompt">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_prompt</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_prompt-name">
|
||||||
|
<refname>pam_prompt</refname>
|
||||||
|
<refname>pam_vprompt</refname>
|
||||||
|
<refpurpose>interface to conversation function</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv xml:id="pam_prompt-synopsis">
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcsynopsisinfo>#include <security/pam_ext.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_prompt</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>style</parameter></paramdef>
|
||||||
|
<paramdef>char **<parameter>response</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>fmt</parameter></paramdef>
|
||||||
|
<paramdef><parameter>...</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_vprompt</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>style</parameter></paramdef>
|
||||||
|
<paramdef>char **<parameter>response</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>fmt</parameter></paramdef>
|
||||||
|
<paramdef>va_list <parameter>args</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_prompt-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_prompt</function> function constructs a message
|
||||||
|
from the specified format string and arguments and passes it to the
|
||||||
|
conversation function as set by the service. Upon successful return,
|
||||||
|
<emphasis>response</emphasis> is set to point to a string
|
||||||
|
returned from the conversation function. This string is allocated
|
||||||
|
on heap and should be freed.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_prompt-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_BUF_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Memory buffer error.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CONV_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Conversation failure.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Conversation succeeded, response is set.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SYSTEM_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
System error.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_prompt-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_conv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_prompt-standards">
|
||||||
|
<title>STANDARDS</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_prompt</function> and <function>pam_vprompt</function>
|
||||||
|
functions are Linux-PAM extensions.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
150
doc/man/pam_putenv.3.xml
Normal file
150
doc/man/pam_putenv.3.xml
Normal file
|
@ -0,0 +1,150 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_putenv">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_putenv</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_putenv-name">
|
||||||
|
<refname>pam_putenv</refname>
|
||||||
|
<refpurpose>set or change PAM environment variable</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_putenv-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_appl.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_putenv</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>name_value</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_putenv-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_putenv</function> function is used to
|
||||||
|
add or change the value of PAM environment variables as
|
||||||
|
associated with the <emphasis>pamh</emphasis> handle.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <emphasis>pamh</emphasis> argument is an authentication
|
||||||
|
handle obtained by a prior call to pam_start().
|
||||||
|
The <emphasis>name_value</emphasis> argument is a single NUL
|
||||||
|
terminated string of one of the following forms:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>NAME=value of variable</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
In this case the environment variable of the given NAME
|
||||||
|
is set to the indicated value:
|
||||||
|
<emphasis>value of variable</emphasis>. If this variable
|
||||||
|
is already known, it is overwritten. Otherwise it is added
|
||||||
|
to the PAM environment.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>NAME=</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This function sets the variable to an empty value. It is
|
||||||
|
listed separately to indicate that this is the correct way
|
||||||
|
to achieve such a setting.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>NAME</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Without an '=' the <function>pam_putenv</function>() function
|
||||||
|
will delete the
|
||||||
|
corresponding variable from the PAM environment.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
<para>
|
||||||
|
<function>pam_putenv</function>() operates on a copy of
|
||||||
|
<emphasis>name_value</emphasis>, which means in contrast to
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>putenv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>, the application is responsible for freeing the data.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_putenv-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_PERM_DENIED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Argument <emphasis>name_value</emphasis> given is a NULL pointer.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_BAD_ITEM</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Variable requested (for deletion) is not currently set.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_ABORT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The <emphasis>pamh</emphasis> handle is corrupt.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_BUF_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Memory buffer error.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The environment variable was successfully updated.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_putenv-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_getenv</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_getenvlist</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
175
doc/man/pam_set_data.3.xml
Normal file
175
doc/man/pam_set_data.3.xml
Normal file
|
@ -0,0 +1,175 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_set_data">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_set_data</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_set_data-name">
|
||||||
|
<refname>pam_set_data</refname>
|
||||||
|
<refpurpose>
|
||||||
|
set module internal data
|
||||||
|
</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
|
||||||
|
<funcsynopsis xml:id="pam_set_data-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_modules.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_set_data</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>module_data_name</parameter></paramdef>
|
||||||
|
<paramdef>void *<parameter>data</parameter></paramdef>
|
||||||
|
<paramdef>void <parameter>(*cleanup)(pam_handle_t *pamh, void *data, int error_status)</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_set_data-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_set_data</function> function associates a pointer
|
||||||
|
to an object with the (hopefully) unique string
|
||||||
|
<emphasis>module_data_name</emphasis> in the PAM context specified
|
||||||
|
by the <emphasis>pamh</emphasis> argument.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
PAM modules may be dynamically loadable objects. In general such files
|
||||||
|
should not contain <emphasis>static</emphasis> variables. This function
|
||||||
|
and its counterpart
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_data</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
provide a mechanism for a module to associate some data with
|
||||||
|
the handle <emphasis>pamh</emphasis>. Typically a module will call the
|
||||||
|
<function>pam_set_data</function> function to register some data
|
||||||
|
under a (hopefully) unique <emphasis>module_data_name</emphasis>.
|
||||||
|
The data is available for use by other modules too but
|
||||||
|
<emphasis>not</emphasis> by an application. Since this functions
|
||||||
|
stores only a pointer to the <emphasis>data</emphasis>, the module
|
||||||
|
should not modify or free the content of it.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The function <function>cleanup()</function> is associated with the
|
||||||
|
<emphasis>data</emphasis> and, if non-NULL, it is called when this
|
||||||
|
data is over-written or following a call to
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_end</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <emphasis>error_status</emphasis> argument is used to indicate
|
||||||
|
to the module the sort of action it is to take in cleaning this data
|
||||||
|
item. As an example, Kerberos creates a ticket file during the
|
||||||
|
authentication phase, this file might be associated with a data item.
|
||||||
|
When
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_end</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
is called by the module, the <emphasis>error_status</emphasis>
|
||||||
|
carries the return value of the
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_authenticate</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
or other <emphasis>libpam</emphasis> function as appropriate. Based
|
||||||
|
on this value the Kerberos module may choose to delete the ticket file
|
||||||
|
(<emphasis>authentication failure</emphasis>) or leave it in place.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <emphasis>error_status</emphasis> may have been logically
|
||||||
|
OR'd with either of the following two values:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_DATA_REPLACE</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
When a data item is being replaced (through a second call to
|
||||||
|
<function>pam_set_data</function>) this mask is used.
|
||||||
|
Otherwise, the call is assumed to be from
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_end</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_DATA_SILENT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Which indicates that the process would prefer to perform the
|
||||||
|
<function>cleanup()</function> quietly. That is, discourages
|
||||||
|
logging/messages to the user. It is generally used to indicate that
|
||||||
|
the current closing of the library is in a
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>fork</refentrytitle><manvolnum>2</manvolnum>
|
||||||
|
</citerefentry>ed
|
||||||
|
process, and that the parent will take care of cleaning up things
|
||||||
|
that exist outside of the current process space (files etc.).
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_set_data-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_BUF_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Memory buffer error.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Data was successful stored.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SYSTEM_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
A NULL pointer was submitted as PAM handle or the
|
||||||
|
function was called by an application.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_set_data-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_end</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_data</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
125
doc/man/pam_set_item.3.xml
Normal file
125
doc/man/pam_set_item.3.xml
Normal file
|
@ -0,0 +1,125 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_set_item">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_set_item</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_set_item-name">
|
||||||
|
<refname>pam_set_item</refname>
|
||||||
|
<refpurpose>
|
||||||
|
set and update PAM information
|
||||||
|
</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
|
||||||
|
<funcsynopsis xml:id="pam_set_item-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_modules.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_set_item</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>item_type</parameter></paramdef>
|
||||||
|
<paramdef>const void *<parameter>item</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_set_item-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_set_item</function> function allows applications
|
||||||
|
and PAM service modules to access and to update PAM information
|
||||||
|
of <emphasis>item_type</emphasis>. For this a copy
|
||||||
|
of the object pointed to by the <emphasis>item</emphasis> argument
|
||||||
|
is created. The following <emphasis>item_type</emphasis>s are
|
||||||
|
supported:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_item_types_std.inc.xml"/>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The following additional items are specific to Linux-PAM and should not be used in
|
||||||
|
portable applications:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_item_types_ext.inc.xml"/>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
For all <emphasis>item_type</emphasis>s, other than PAM_CONV and
|
||||||
|
PAM_FAIL_DELAY, <emphasis>item</emphasis> is a pointer to a <NUL>
|
||||||
|
terminated character string. In the case of PAM_CONV,
|
||||||
|
<emphasis>item</emphasis> points to an initialized
|
||||||
|
<emphasis>pam_conv</emphasis> structure. In the case of
|
||||||
|
PAM_FAIL_DELAY, <emphasis>item</emphasis> is a function pointer:
|
||||||
|
<function>void (*delay_fn)(int retval, unsigned usec_delay, void *appdata_ptr)</function>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Both, PAM_AUTHTOK and PAM_OLDAUTHTOK, will be reset before
|
||||||
|
returning to the application. Which means an application is not
|
||||||
|
able to access the authentication tokens.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_set_item-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_BAD_ITEM</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The application attempted to set an undefined or inaccessible
|
||||||
|
item.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_BUF_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Memory buffer error.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Data was successful updated.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SYSTEM_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The <emphasis>pam_handle_t</emphasis> passed as first
|
||||||
|
argument was invalid.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_set_item-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
177
doc/man/pam_setcred.3.xml
Normal file
177
doc/man/pam_setcred.3.xml
Normal file
|
@ -0,0 +1,177 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_setcred">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_setcred</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_setcred-name">
|
||||||
|
<refname>pam_setcred</refname>
|
||||||
|
<refpurpose>
|
||||||
|
establish / delete user credentials
|
||||||
|
</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_setcred-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_appl.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_setcred</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_setcred-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_setcred</function> function is used to establish,
|
||||||
|
maintain and delete the credentials of a user. It should be called
|
||||||
|
to set the credentials after a user has been authenticated and before
|
||||||
|
a session is opened for the user (with
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_open_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>). The credentials should be deleted after the session
|
||||||
|
has been closed (with
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_close_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>).
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A credential is something that the user possesses. It is some
|
||||||
|
property, such as a <emphasis>Kerberos</emphasis> ticket, or a
|
||||||
|
supplementary group membership that make up the uniqueness of a
|
||||||
|
given user. On a Linux system the user's <emphasis>UID</emphasis>
|
||||||
|
and <emphasis>GID</emphasis>'s are credentials too. However, it
|
||||||
|
has been decided that these properties (along with the default
|
||||||
|
supplementary groups of which the user is a member) are credentials
|
||||||
|
that should be set directly by the application and not by PAM.
|
||||||
|
Such credentials should be established, by the application, prior
|
||||||
|
to a call to this function. For example,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>initgroups</refentrytitle><manvolnum>2</manvolnum>
|
||||||
|
</citerefentry> (or equivalent) should have been performed.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Valid <emphasis>flags</emphasis>, any one of which, may be
|
||||||
|
logically OR'd with <option>PAM_SILENT</option>, are:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_ESTABLISH_CRED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Initialize the credentials for the user.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_DELETE_CRED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Delete the user's credentials.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_REINITIALIZE_CRED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Fully reinitialize the user's credentials.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_REFRESH_CRED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Extend the lifetime of the existing credentials.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_setcred-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_BUF_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Memory buffer error.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CRED_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Failed to set user credentials.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CRED_EXPIRED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
User credentials are expired.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CRED_UNAVAIL</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Failed to retrieve user credentials.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Data was successful stored.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SYSTEM_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
A NULL pointer was submitted as PAM handle, the
|
||||||
|
function was called by a module or another system
|
||||||
|
error occurred.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_USER_UNKNOWN</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
User is not known to an authentication module.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_set_data-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_authenticate</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_open_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_close_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
152
doc/man/pam_sm_acct_mgmt.3.xml
Normal file
152
doc/man/pam_sm_acct_mgmt.3.xml
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_sm_acct_mgmt">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_sm_acct_mgmt</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_sm_acct_mgmt-name">
|
||||||
|
<refname>pam_sm_acct_mgmt</refname>
|
||||||
|
<refpurpose>PAM service function for account management</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_sm_acct_mgmt-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_modules.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_sm_acct_mgmt</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>argc</parameter></paramdef>
|
||||||
|
<paramdef>const char **<parameter>argv</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_acct_mgmt-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_sm_acct_mgmt</function> function is the service
|
||||||
|
module's implementation of the
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_acct_mgmt</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> interface.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
This function performs the task of establishing whether the user is
|
||||||
|
permitted to gain access at this time. It should be understood that
|
||||||
|
the user has previously been validated by an authentication
|
||||||
|
module. This function checks for other things. Such things might be:
|
||||||
|
the time of day or the date, the terminal line, remote hostname, etc.
|
||||||
|
This function may also determine things like the expiration on
|
||||||
|
passwords, and respond that the user change it before continuing.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Valid flags, which may be logically OR'd with
|
||||||
|
<emphasis>PAM_SILENT</emphasis>, are:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SILENT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Do not emit any messages.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_DISALLOW_NULL_AUTHTOK</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Return <emphasis remap="B">PAM_AUTH_ERR</emphasis> if the
|
||||||
|
database of authentication tokens for this authentication
|
||||||
|
mechanism has a <emphasis>NULL</emphasis> entry for the user.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_acct_mgmt-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_ACCT_EXPIRED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
User account has expired.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTH_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Authentication failure.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_NEW_AUTHTOK_REQD</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The user's authentication token has expired. Before calling
|
||||||
|
this function again the application will arrange for a new
|
||||||
|
one to be given. This will likely result in a call to
|
||||||
|
<function>pam_sm_chauthtok()</function>.
|
||||||
|
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_PERM_DENIED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Permission denied.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The authentication token was successfully updated.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_USER_UNKNOWN</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
User unknown to password service.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_acct_mgmt-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_acct_mgmt</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_sm_chauthtok</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>PAM</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
149
doc/man/pam_sm_authenticate.3.xml
Normal file
149
doc/man/pam_sm_authenticate.3.xml
Normal file
|
@ -0,0 +1,149 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_sm_authenticate">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_sm_authenticate</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_sm_authenticate-name">
|
||||||
|
<refname>pam_sm_authenticate</refname>
|
||||||
|
<refpurpose>PAM service function for user authentication</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_sm_authenticate-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_modules.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_sm_authenticate</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>argc</parameter></paramdef>
|
||||||
|
<paramdef>const char **<parameter>argv</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_authenticate-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_sm_authenticate</function> function is the service
|
||||||
|
module's implementation of the
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_authenticate</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> interface.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
This function performs the task of authenticating the user.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Valid flags, which may be logically OR'd with
|
||||||
|
<emphasis>PAM_SILENT</emphasis>, are:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SILENT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Do not emit any messages.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_DISALLOW_NULL_AUTHTOK</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Return <emphasis remap="B">PAM_AUTH_ERR</emphasis> if the
|
||||||
|
database of authentication tokens for this authentication
|
||||||
|
mechanism has a <emphasis>NULL</emphasis> entry for the user.
|
||||||
|
Without this flag, such a <emphasis>NULL</emphasis> token
|
||||||
|
will lead to a success without the user being prompted.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_authenticate-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTH_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Authentication failure.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CRED_INSUFFICIENT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
For some reason the application does not have sufficient
|
||||||
|
credentials to authenticate the user.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHINFO_UNAVAIL</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The modules were not able to access the authentication
|
||||||
|
information. This might be due to a network or hardware
|
||||||
|
failure etc.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The authentication token was successfully updated.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_USER_UNKNOWN</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The supplied username is not known to the authentication
|
||||||
|
service.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_MAXTRIES</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
One or more of the authentication modules has reached its
|
||||||
|
limit of tries authenticating the user. Do not try again.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_authenticate-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_authenticate</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_sm_setcred</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>PAM</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
202
doc/man/pam_sm_chauthtok.3.xml
Normal file
202
doc/man/pam_sm_chauthtok.3.xml
Normal file
|
@ -0,0 +1,202 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_sm_chauthtok">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_sm_chauthtok</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_sm_chauthtok-name">
|
||||||
|
<refname>pam_sm_chauthtok</refname>
|
||||||
|
<refpurpose>PAM service function for authentication token management</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_sm_chauthtok-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_modules.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_sm_chauthtok</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>argc</parameter></paramdef>
|
||||||
|
<paramdef>const char **<parameter>argv</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_chauthtok-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_sm_chauthtok</function> function is the service
|
||||||
|
module's implementation of the
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_chauthtok</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> interface.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
This function is used to (re-)set the authentication token of the user.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Valid flags, which may be logically OR'd with
|
||||||
|
<emphasis>PAM_SILENT</emphasis>, are:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SILENT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Do not emit any messages.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CHANGE_EXPIRED_AUTHTOK</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This argument indicates to the module that the user's
|
||||||
|
authentication token (password) should only be changed if
|
||||||
|
it has expired. This flag is optional and
|
||||||
|
<emphasis>must</emphasis> be combined with one of the
|
||||||
|
following two flags. Note, however, the following two options
|
||||||
|
are <emphasis>mutually exclusive</emphasis>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_PRELIM_CHECK</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This indicates that the modules are being probed as to
|
||||||
|
their ready status for altering the user's authentication
|
||||||
|
token. If the module requires access to another system over
|
||||||
|
some network it should attempt to verify it can connect to
|
||||||
|
this system on receiving this flag. If a module cannot establish
|
||||||
|
it is ready to update the user's authentication token it should
|
||||||
|
return <emphasis remap="B">PAM_TRY_AGAIN</emphasis>, this
|
||||||
|
information will be passed back to the application.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
If the control value <emphasis>sufficient</emphasis> is used in
|
||||||
|
the password stack, the <emphasis>PAM_PRELIM_CHECK</emphasis> section
|
||||||
|
of the modules following that control value is not always executed.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_UPDATE_AUTHTOK</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This informs the module that this is the call it should change
|
||||||
|
the authorization tokens. If the flag is logically OR'd with
|
||||||
|
<emphasis remap="B">PAM_CHANGE_EXPIRED_AUTHTOK</emphasis>, the
|
||||||
|
token is only changed if it has actually expired.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
<para>
|
||||||
|
The PAM library calls this function twice in succession. The first
|
||||||
|
time with <emphasis remap="B">PAM_PRELIM_CHECK</emphasis> and then,
|
||||||
|
if the module does not return
|
||||||
|
<emphasis remap="B">PAM_TRY_AGAIN</emphasis>, subsequently with
|
||||||
|
<emphasis remap="B">PAM_UPDATE_AUTHTOK</emphasis>. It is only on
|
||||||
|
the second call that the authorization token is (possibly) changed.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_chauthtok-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHTOK_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The module was unable to obtain the new authentication token.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHTOK_RECOVERY_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The module was unable to obtain the old authentication token.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHTOK_LOCK_BUSY</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Cannot change the authentication token since it is currently
|
||||||
|
locked.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_AUTHTOK_DISABLE_AGING</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Authentication token aging has been disabled.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_PERM_DENIED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Permission denied.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_TRY_AGAIN</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Preliminary check was unsuccessful. Signals an immediate
|
||||||
|
return to the application is desired.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The authentication token was successfully updated.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_USER_UNKNOWN</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
User unknown to password service.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_chauthtok-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_chauthtok</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_sm_chauthtok</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>PAM</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
97
doc/man/pam_sm_close_session.3.xml
Normal file
97
doc/man/pam_sm_close_session.3.xml
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_sm_close_session">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_sm_close_session</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_sm_close_session-name">
|
||||||
|
<refname>pam_sm_close_session</refname>
|
||||||
|
<refpurpose>PAM service function to terminate session management</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_sm_close_session-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_modules.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_sm_close_session</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>argc</parameter></paramdef>
|
||||||
|
<paramdef>const char **<parameter>argv</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_close_session-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_sm_close_session</function> function is the service
|
||||||
|
module's implementation of the
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_close_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> interface.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
This function is called to terminate a session. The only valid
|
||||||
|
value for <varname role="parameter">flags</varname> is zero or:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SILENT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Do not emit any messages.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_close_session-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SESSION_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Cannot make/remove an entry for the specified session.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The session was successfully terminated.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_close_session-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_close_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_sm_close_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>PAM</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
97
doc/man/pam_sm_open_session.3.xml
Normal file
97
doc/man/pam_sm_open_session.3.xml
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_sm_open_session">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_sm_open_session</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_sm_open_session-name">
|
||||||
|
<refname>pam_sm_open_session</refname>
|
||||||
|
<refpurpose>PAM service function to start session management</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_sm_open_session-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_modules.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_sm_open_session</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>argc</parameter></paramdef>
|
||||||
|
<paramdef>const char **<parameter>argv</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_open_session-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_sm_open_session</function> function is the service
|
||||||
|
module's implementation of the
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_open_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> interface.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
This function is called to commence a session. The only valid
|
||||||
|
value for <varname role="parameter">flags</varname> is zero or:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SILENT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Do not emit any messages.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_open_session-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SESSION_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Cannot make/remove an entry for the specified session.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The session was successfully started.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_open_session-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_open_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_sm_close_session</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>PAM</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
182
doc/man/pam_sm_setcred.3.xml
Normal file
182
doc/man/pam_sm_setcred.3.xml
Normal file
|
@ -0,0 +1,182 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_sm_setcred">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_sm_setcred</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_sm_setcred-name">
|
||||||
|
<refname>pam_sm_setcred</refname>
|
||||||
|
<refpurpose>PAM service function to alter credentials</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_sm_setcred-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_modules.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_sm_setcred</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>argc</parameter></paramdef>
|
||||||
|
<paramdef>const char **<parameter>argv</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_setcred-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_sm_setcred</function> function is the service
|
||||||
|
module's implementation of the
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_setcred</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> interface.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
This function performs the task of altering the credentials of the
|
||||||
|
user with respect to the corresponding authorization
|
||||||
|
scheme. Generally, an authentication module may have access to more
|
||||||
|
information about a user than their authentication token. This
|
||||||
|
function is used to make such information available to the
|
||||||
|
application. It should only be called <emphasis>after</emphasis> the
|
||||||
|
user has been authenticated but before a session has been established.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Valid flags, which may be logically OR'd with
|
||||||
|
<emphasis>PAM_SILENT</emphasis>, are:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SILENT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Do not emit any messages.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_ESTABLISH_CRED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Initialize the credentials for the user.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_DELETE_CRED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Delete the credentials associated with the authentication service.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_REINITIALIZE_CRED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Reinitialize the user credentials.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_REFRESH_CRED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Extend the lifetime of the user credentials.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
<para>
|
||||||
|
The way the <emphasis remap="B">auth</emphasis> stack is
|
||||||
|
navigated in order to evaluate the <function>pam_setcred</function>()
|
||||||
|
function call, independent of the <function>pam_sm_setcred</function>()
|
||||||
|
return codes, is exactly the same way that it was navigated when
|
||||||
|
evaluating the <function>pam_authenticate</function>() library
|
||||||
|
call. Typically, if a stack entry was ignored in evaluating
|
||||||
|
<function>pam_authenticate</function>(), it will be ignored when
|
||||||
|
libpam evaluates the <function>pam_setcred</function>() function
|
||||||
|
call. Otherwise, the return codes from each module specific
|
||||||
|
<function>pam_sm_setcred</function>() call are treated as
|
||||||
|
<emphasis remap="B">required</emphasis>.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_setcred-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CRED_UNAVAIL</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This module cannot retrieve the user's credentials.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CRED_EXPIRED</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The user's credentials have expired.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_CRED_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This module was unable to set the credentials of the user.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The user credential was successfully set.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_USER_UNKNOWN</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The user is not known to this authentication module.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
<para>
|
||||||
|
These, non-<emphasis>PAM_SUCCESS</emphasis>, return values will
|
||||||
|
typically lead to the credential stack <emphasis>failing</emphasis>.
|
||||||
|
The first such error will dominate in the return value of
|
||||||
|
<function>pam_setcred</function>().
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_sm_setcred-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_authenticate</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_setcred</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_sm_authenticate</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>PAM</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
164
doc/man/pam_start.3.xml
Normal file
164
doc/man/pam_start.3.xml
Normal file
|
@ -0,0 +1,164 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_start">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_start</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_start-name">
|
||||||
|
<refname>pam_start</refname>
|
||||||
|
<refname>pam_start_confdir</refname>
|
||||||
|
<refpurpose>initialization of PAM transaction</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_start-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_appl.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_start</function></funcdef>
|
||||||
|
<paramdef>const char *<parameter>service_name</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>user</parameter></paramdef>
|
||||||
|
<paramdef>const struct pam_conv *<parameter>pam_conversation</parameter></paramdef>
|
||||||
|
<paramdef>pam_handle_t **<parameter>pamh</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>pam_start_confdir</function></funcdef>
|
||||||
|
<paramdef>const char *<parameter>service_name</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>user</parameter></paramdef>
|
||||||
|
<paramdef>const struct pam_conv *<parameter>pam_conversation</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>confdir</parameter></paramdef>
|
||||||
|
<paramdef>pam_handle_t **<parameter>pamh</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_start-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_start</function> function creates the PAM context
|
||||||
|
and initiates the PAM transaction. It is the first of the PAM
|
||||||
|
functions that needs to be called by an application. The transaction
|
||||||
|
state is contained entirely within the structure identified by this
|
||||||
|
handle, so it is possible to have multiple transactions in parallel.
|
||||||
|
But it is not possible to use the same handle for different
|
||||||
|
transactions, a new one is needed for every new context.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <emphasis>service_name</emphasis> 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 <filename>/etc/pam.d/service_name</filename> or, if that file
|
||||||
|
does not exist, from <filename>/etc/pam.conf</filename>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <emphasis>user</emphasis> 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.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <emphasis>pam_conversation</emphasis> argument points to
|
||||||
|
a <emphasis>struct pam_conv</emphasis> describing the
|
||||||
|
conversation function to use. An application must provide this
|
||||||
|
for direct communication between a loaded module and the
|
||||||
|
application.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Following a successful return (PAM_SUCCESS) the contents of
|
||||||
|
<emphasis>pamh</emphasis> is a handle that contains the PAM
|
||||||
|
context for successive calls to the PAM functions. In an error
|
||||||
|
case is the content of <emphasis>pamh</emphasis> undefined.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <emphasis>pam_handle_t</emphasis> is a blind structure and
|
||||||
|
the application should not attempt to probe it directly for
|
||||||
|
information. Instead the PAM library provides the functions
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_set_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> and
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
The PAM handle cannot be used for multiple authentications at the
|
||||||
|
same time as long as <function>pam_end</function> was not called on
|
||||||
|
it before.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <function>pam_start_confdir</function> function behaves
|
||||||
|
like the <function>pam_start</function> function but it also
|
||||||
|
allows setting <emphasis>confdir</emphasis> argument with
|
||||||
|
a path to a directory to override the default
|
||||||
|
(<filename>/etc/pam.d</filename>) path for service policy
|
||||||
|
files. If the <emphasis>confdir</emphasis> is NULL, the function
|
||||||
|
works exactly the same as <function>pam_start</function>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</refsect1>
|
||||||
|
<refsect1 xml:id="pam_start-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_ABORT</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
General failure.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_BUF_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Memory buffer error.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SUCCESS</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Transaction was successfully started.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>PAM_SYSTEM_ERR</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
System error, for example a NULL pointer was submitted
|
||||||
|
instead of a pointer to data.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_start-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_data</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_set_data</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_end</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
55
doc/man/pam_strerror.3.xml
Normal file
55
doc/man/pam_strerror.3.xml
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_strerror">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_strerror</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_strerror-name">
|
||||||
|
<refname>pam_strerror</refname>
|
||||||
|
<refpurpose>return string describing PAM error code</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_strerror-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_appl.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>const char *<function>pam_strerror</function></funcdef>
|
||||||
|
<paramdef>pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>errnum</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_strerror-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_strerror</function> function returns a pointer to
|
||||||
|
a string describing the error code passed in the argument
|
||||||
|
<emphasis>errnum</emphasis>, possibly using the LC_MESSAGES part of
|
||||||
|
the current locale to select the appropriate language. This string
|
||||||
|
must not be modified by the application. No library function will
|
||||||
|
modify this string.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
<refsect1 xml:id="pam_strerror-return_values">
|
||||||
|
<title>RETURN VALUES</title>
|
||||||
|
<para>
|
||||||
|
This function returns always a pointer to a string.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_strerror-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
79
doc/man/pam_syslog.3.xml
Normal file
79
doc/man/pam_syslog.3.xml
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_syslog">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_syslog</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_syslog-name">
|
||||||
|
<refname>pam_syslog</refname>
|
||||||
|
<refname>pam_vsyslog</refname>
|
||||||
|
<refpurpose>send messages to the system logger</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv xml:id="pam_syslog-synopsis">
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcsynopsisinfo>#include <syslog.h></funcsynopsisinfo>
|
||||||
|
<funcsynopsisinfo>#include <security/pam_ext.h></funcsynopsisinfo>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>void <function>pam_syslog</function></funcdef>
|
||||||
|
<paramdef>const pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>priority</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>fmt</parameter></paramdef>
|
||||||
|
<paramdef><parameter>...</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>void <function>pam_vsyslog</function></funcdef>
|
||||||
|
<paramdef>const pam_handle_t *<parameter>pamh</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>priority</parameter></paramdef>
|
||||||
|
<paramdef>const char *<parameter>fmt</parameter></paramdef>
|
||||||
|
<paramdef>va_list <parameter>args</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_syslog-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_syslog</function> function logs messages using
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> and is intended for internal use by Linux-PAM and
|
||||||
|
PAM service modules. The <emphasis>priority</emphasis> argument is
|
||||||
|
formed by ORing the facility and the level values as documented
|
||||||
|
in the <citerefentry>
|
||||||
|
<refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> manual page.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <function>pam_vsyslog</function> function performs the same
|
||||||
|
task as <function>pam_syslog()</function> with the difference
|
||||||
|
that it takes a set of arguments which have been obtained using
|
||||||
|
the <citerefentry>
|
||||||
|
<refentrytitle>stdarg</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> variable argument list macros.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_syslog-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_syslog-standards">
|
||||||
|
<title>STANDARDS</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_syslog</function> and <function>pam_vsyslog</function>
|
||||||
|
functions are Linux-PAM extensions.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
91
doc/man/pam_xauth_data.3.xml
Normal file
91
doc/man/pam_xauth_data.3.xml
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="pam_xauth_data">
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>pam_xauth_data</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo class="source">Linux-PAM</refmiscinfo>
|
||||||
|
<refmiscinfo class="manual">Linux-PAM Manual</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv xml:id="pam_xauth_data-name">
|
||||||
|
<refname>pam_xauth_data</refname>
|
||||||
|
<refpurpose>structure containing X authentication data</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<!-- body begins here -->
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis xml:id="pam_xauth_data-synopsis">
|
||||||
|
<funcsynopsisinfo>#include <security/pam_appl.h></funcsynopsisinfo>
|
||||||
|
</funcsynopsis>
|
||||||
|
<programlisting>
|
||||||
|
struct pam_xauth_data {
|
||||||
|
int namelen;
|
||||||
|
char *name;
|
||||||
|
int datalen;
|
||||||
|
char *data;
|
||||||
|
};
|
||||||
|
</programlisting>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_xauth_data-description">
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_xauth_data</function> structure contains X
|
||||||
|
authentication data used to make a connection to an X display.
|
||||||
|
Using this mechanism, an application can communicate X
|
||||||
|
authentication data to PAM service modules. This allows modules to
|
||||||
|
make a connection to the user's X display in order to label the
|
||||||
|
user's session on login, display visual feedback or for other
|
||||||
|
purposes.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <emphasis>name</emphasis> field contains the name of the
|
||||||
|
authentication method, such as "MIT-MAGIC-COOKIE-1". The
|
||||||
|
<emphasis>namelen</emphasis> field contains the length of this string,
|
||||||
|
not including the trailing NUL character.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <emphasis>data</emphasis> field contains the authentication
|
||||||
|
method-specific data corresponding to the specified name. The
|
||||||
|
<emphasis>datalen</emphasis> field contains its length in bytes.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The X authentication data can be changed with the
|
||||||
|
<emphasis>PAM_XAUTH_DATA</emphasis> item. It can be queried and
|
||||||
|
set with
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>
|
||||||
|
and
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_set_item </refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> respectively. The value used to set it should be
|
||||||
|
a pointer to a pam_xauth_data structure. An internal copy of both
|
||||||
|
the structure itself and its fields is made by PAM when setting the
|
||||||
|
item.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_xauth_data-see_also">
|
||||||
|
<title>SEE ALSO</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_start</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>pam_get_item</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>,
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 xml:id="pam_xauth_data-standards">
|
||||||
|
<title>STANDARDS</title>
|
||||||
|
<para>
|
||||||
|
The <function>pam_xauth_data</function> structure and
|
||||||
|
<emphasis>PAM_XAUTH_DATA</emphasis> item are
|
||||||
|
Linux-PAM extensions.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
26
doc/meson.build
Normal file
26
doc/meson.build
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
custom_man_xsl = custom_target(
|
||||||
|
'custom-man.xsl',
|
||||||
|
input: 'custom-man.xsl.in',
|
||||||
|
output: ['custom-man.xsl'],
|
||||||
|
command: [
|
||||||
|
redir_exe,
|
||||||
|
'@INPUT@',
|
||||||
|
'@OUTPUT@',
|
||||||
|
'sed',
|
||||||
|
's+MAN_STYLESHEET+' + man_stylesheet + '+g'
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
install_data(
|
||||||
|
'index.html',
|
||||||
|
install_dir: htmldir,
|
||||||
|
install_tag: 'doc',
|
||||||
|
)
|
||||||
|
|
||||||
|
install_html = files('install-html.sh')
|
||||||
|
|
||||||
|
subdir('man')
|
||||||
|
subdir('specs')
|
||||||
|
subdir('sag')
|
||||||
|
subdir('adg')
|
||||||
|
subdir('mwg')
|
604
doc/mwg/Linux-PAM_MWG.xml
Normal file
604
doc/mwg/Linux-PAM_MWG.xml
Normal file
|
@ -0,0 +1,604 @@
|
||||||
|
<book xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg">
|
||||||
|
<info>
|
||||||
|
<title>The Linux-PAM Module Writers' Guide</title>
|
||||||
|
<authorgroup>
|
||||||
|
<author><personname><firstname>Andrew G.</firstname><surname>Morgan</surname></personname><email>morgan@kernel.org</email></author>
|
||||||
|
<author><personname><firstname>Thorsten</firstname><surname>Kukuk</surname></personname><email>kukuk@thkukuk.de</email></author>
|
||||||
|
</authorgroup>
|
||||||
|
<releaseinfo>Version 1.1.2, 31. August 2010</releaseinfo>
|
||||||
|
<abstract>
|
||||||
|
<para>
|
||||||
|
This manual documents what a programmer needs to know in order
|
||||||
|
to write a module that conforms to the
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> standard.It also
|
||||||
|
discusses some security issues from the point of view of the
|
||||||
|
module programmer.
|
||||||
|
</para>
|
||||||
|
</abstract>
|
||||||
|
</info>
|
||||||
|
|
||||||
|
<chapter xml:id="mwg-introduction">
|
||||||
|
<title>Introduction</title>
|
||||||
|
<section xml:id="mwg-introduction-description">
|
||||||
|
<title>Description</title>
|
||||||
|
<para>
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> (Pluggable Authentication
|
||||||
|
Modules for Linux) is a library that enables the local system
|
||||||
|
administrator to choose how individual applications authenticate
|
||||||
|
users. For an overview of the
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> library see the
|
||||||
|
<emphasis>Linux-PAM System Administrators' Guide</emphasis>.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
A <emphasis remap="B">Linux-PAM</emphasis> module is a single
|
||||||
|
executable binary file that can be loaded by the
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> interface library.
|
||||||
|
This PAM library is configured locally with a system file,
|
||||||
|
<filename>/etc/pam.conf</filename>, to authenticate a user
|
||||||
|
request via the locally available authentication modules. The
|
||||||
|
modules themselves will usually be located in the directory
|
||||||
|
<filename>/lib/security</filename> (or
|
||||||
|
<filename>/lib64/security</filename>, depending on the architecture)
|
||||||
|
and take the form of dynamically loadable object files (see
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>dlopen</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry>. Alternatively, the modules can be statically
|
||||||
|
linked into the <emphasis remap="B">Linux-PAM</emphasis> library;
|
||||||
|
this is mostly to allow <emphasis remap="B">Linux-PAM</emphasis> to
|
||||||
|
be used on platforms without dynamic linking available, but this is
|
||||||
|
a <emphasis>deprecated</emphasis> functionality. It is the
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> interface that is called
|
||||||
|
by an application and it is the responsibility of the library to
|
||||||
|
locate, load and call the appropriate functions in a
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis>-module.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Except for the immediate purpose of interacting with the user
|
||||||
|
(entering a password etc..) the module should never call the
|
||||||
|
application directly. This exception requires a "conversation
|
||||||
|
mechanism" which is documented below.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section xml:id="mwg-introduction-synopsis">
|
||||||
|
<title>Synopsis</title>
|
||||||
|
<programlisting>
|
||||||
|
#include <security/pam_modules.h>
|
||||||
|
|
||||||
|
gcc -fPIC -c pam_module.c
|
||||||
|
gcc -shared -o pam_module.so pam_module.o -lpam
|
||||||
|
</programlisting>
|
||||||
|
</section>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="mwg-expected-by-module">
|
||||||
|
<title>What can be expected by the module</title>
|
||||||
|
<para>
|
||||||
|
Here we list the interface that the conventions that all
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> modules must adhere to.
|
||||||
|
</para>
|
||||||
|
<section xml:id="mwg-expected-by-module-item">
|
||||||
|
<title>
|
||||||
|
Getting and setting <emphasis>PAM_ITEM</emphasis>s and
|
||||||
|
<emphasis>data</emphasis>
|
||||||
|
</title>
|
||||||
|
<para>
|
||||||
|
First, we cover what the module should expect from the
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> library and a
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> aware application.
|
||||||
|
Essentially this is the <filename>libpam.*</filename> library.
|
||||||
|
</para>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_set_data.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_get_data.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_set_item.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_get_item.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_get_user.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_conv.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_putenv.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_getenv.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_getenvlist.xml"/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="mwg-expected-by-module-other">
|
||||||
|
<title>
|
||||||
|
Other functions provided by <filename>libpam</filename>
|
||||||
|
</title>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_strerror.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_fail_delay.xml"/>
|
||||||
|
</section>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="mwg-expected-of-module">
|
||||||
|
<title>What is expected of a module</title>
|
||||||
|
<para>
|
||||||
|
The module must supply a sub-set of the six functions listed
|
||||||
|
below. Together they define the function of a
|
||||||
|
<emphasis remap="B">Linux-PAM module</emphasis>. Module developers
|
||||||
|
are strongly urged to read the comments on security that follow
|
||||||
|
this list.
|
||||||
|
</para>
|
||||||
|
<section xml:id="mwg-expected-of-module-overview">
|
||||||
|
<title>Overview</title>
|
||||||
|
<para>
|
||||||
|
The six module functions are grouped into four independent
|
||||||
|
management groups. These groups are as follows:
|
||||||
|
<emphasis>authentication</emphasis>, <emphasis>account</emphasis>,
|
||||||
|
<emphasis>session</emphasis> and <emphasis>password</emphasis>.
|
||||||
|
To be properly defined, a module must define all functions within
|
||||||
|
at least one of these groups. A single module may contain the
|
||||||
|
necessary functions for <emphasis>all</emphasis> four groups.
|
||||||
|
</para>
|
||||||
|
<section xml:id="mwg-expected-of-module-overview-1">
|
||||||
|
<title>Functional independence</title>
|
||||||
|
<para>
|
||||||
|
The independence of the four groups of service a module can
|
||||||
|
offer means that the module should allow for the possibility
|
||||||
|
that any one of these four services may legitimately be called
|
||||||
|
in any order. Thus, the module writer should consider the
|
||||||
|
appropriateness of performing a service without the prior
|
||||||
|
success of some other part of the module.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
As an informative example, consider the possibility that an
|
||||||
|
application applies to change a user's authentication token,
|
||||||
|
without having first requested that
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> authenticate the
|
||||||
|
user. In some cases this may be deemed appropriate: when
|
||||||
|
<command>root</command> wants to change the authentication
|
||||||
|
token of some lesser user. In other cases it may not be
|
||||||
|
appropriate: when <command>joe</command> maliciously wants
|
||||||
|
to reset <command>alice</command>'s password; or when anyone
|
||||||
|
other than the user themself wishes to reset their
|
||||||
|
<emphasis>KERBEROS</emphasis> authentication token. A policy
|
||||||
|
for this action should be defined by any reasonable
|
||||||
|
authentication scheme, the module writer should consider
|
||||||
|
this when implementing a given module.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
<section xml:id="mwg-expected-of-module-overview-2">
|
||||||
|
<title>Minimizing administration problems</title>
|
||||||
|
<para>
|
||||||
|
To avoid system administration problems and the poor
|
||||||
|
construction of a <filename>/etc/pam.conf</filename> file,
|
||||||
|
the module developer may define all six of the following
|
||||||
|
functions. For those functions that would not be called,
|
||||||
|
the module should return <errorname>PAM_SERVICE_ERR</errorname>
|
||||||
|
and write an appropriate message to the system log. When
|
||||||
|
this action is deemed inappropriate, the function would
|
||||||
|
simply return <errorname>PAM_IGNORE</errorname>.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
<section xml:id="mwg-expected-of-module-overview-3">
|
||||||
|
<title>Arguments supplied to the module</title>
|
||||||
|
<para>
|
||||||
|
The <parameter>flags</parameter> argument of each of
|
||||||
|
the following functions can be logically OR'd with
|
||||||
|
<parameter>PAM_SILENT</parameter>, which is used to inform the
|
||||||
|
module to not pass any <emphasis>text</emphasis> (errors or
|
||||||
|
warnings) application.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <parameter>argc</parameter> and <parameter>argv</parameter>
|
||||||
|
arguments are taken from the line appropriate to this
|
||||||
|
module---that is, with the <emphasis>service_name</emphasis>
|
||||||
|
matching that of the application---in the configuration file
|
||||||
|
(see the <emphasis remap="B">Linux-PAM</emphasis>
|
||||||
|
System Administrators' Guide). Together these two parameters
|
||||||
|
provide the number of arguments and an array of pointers to
|
||||||
|
the individual argument tokens. This will be familiar to C
|
||||||
|
programmers as the ubiquitous method of passing command arguments
|
||||||
|
to the function <function>main()</function>. Note, however, that
|
||||||
|
the first argument (<parameter>argv[0]</parameter>) is a true
|
||||||
|
argument and <emphasis>not</emphasis> the name of the module.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section xml:id="mwg-expected-of-module-auth">
|
||||||
|
<title>Authentication management</title>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sm_authenticate.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sm_setcred.xml"/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="mwg-expected-of-module-acct">
|
||||||
|
<title>Account management</title>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sm_acct_mgmt.xml"/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="mwg-expected-of-module-session">
|
||||||
|
<title>Session management</title>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sm_open_session.xml"/>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sm_close_session.xml"/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="mwg-expected-of-module-chauthtok">
|
||||||
|
<title>Authentication token management</title>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_sm_chauthtok.xml"/>
|
||||||
|
</section>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="mwg-see-options">
|
||||||
|
<title>Generic optional arguments</title>
|
||||||
|
<para>
|
||||||
|
Here we list the generic arguments that all modules can expect to
|
||||||
|
be passed. They are not mandatory, and their absence should be
|
||||||
|
accepted without comment by the module.
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>debug</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Use the <citerefentry>
|
||||||
|
<refentrytitle>pam_syslog</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> call to log debugging information to the system
|
||||||
|
log files.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>use_first_pass</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The module should not prompt the user for a password.
|
||||||
|
Instead, it should obtain the previously typed password
|
||||||
|
(by a call to <function>pam_get_item()</function> for the
|
||||||
|
<parameter>PAM_AUTHTOK</parameter> item), and use that. If
|
||||||
|
that doesn't work, then the user will not be authenticated.
|
||||||
|
(This option is intended for <command>auth</command> and
|
||||||
|
<command>passwd</command> modules only).
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="mwg-see-programming">
|
||||||
|
<title>Programming notes</title>
|
||||||
|
<para>
|
||||||
|
Here we collect some pointers for the module writer to bear in mind
|
||||||
|
when writing/developing a <emphasis remap="B">Linux-PAM</emphasis>
|
||||||
|
compatible module.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<section xml:id="mwg-see-programming-sec">
|
||||||
|
<title>Security issues for module creation</title>
|
||||||
|
<section xml:id="mwg-see-programming-sec-res">
|
||||||
|
<title>Sufficient resources</title>
|
||||||
|
<para>
|
||||||
|
Care should be taken to ensure that the proper execution
|
||||||
|
of a module is not compromised by a lack of system resources.
|
||||||
|
If a module is unable to open sufficient files to perform its
|
||||||
|
task, it should fail gracefully, or request additional resources.
|
||||||
|
Specifically, the quantities manipulated by the <citerefentry>
|
||||||
|
<refentrytitle>setrlimit</refentrytitle><manvolnum>2</manvolnum>
|
||||||
|
</citerefentry> family of commands should be taken into
|
||||||
|
consideration.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
<section xml:id="mwg-see-programming-sec-who">
|
||||||
|
<title>Who´s who?</title>
|
||||||
|
<para>
|
||||||
|
Generally, the module may wish to establish the identity of
|
||||||
|
the user requesting a service. This may not be the same as
|
||||||
|
the username returned by <function>pam_get_user()</function>.
|
||||||
|
Indeed, that is only going to be the name of the user under
|
||||||
|
whose identity the service will be given. This is not
|
||||||
|
necessarily the user that requests the service.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
In other words, user X runs a program that is setuid-Y, it
|
||||||
|
grants the user to have the permissions of Z. A specific example
|
||||||
|
of this sort of service request is the <command>su</command>
|
||||||
|
program: user <command>joe</command> executes
|
||||||
|
<command>su</command> to become the user <command>jane</command>.
|
||||||
|
In this situation X=<command>joe</command>, Y=<command>root</command>
|
||||||
|
and Z=<command>jane</command>. Clearly, it is important that
|
||||||
|
the module does not confuse these different users and grant an
|
||||||
|
inappropriate level of privilege.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The following is the convention to be adhered to when juggling
|
||||||
|
user-identities.
|
||||||
|
</para>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
X, the identity of the user invoking the service request.
|
||||||
|
This is the user identifier; returned by the function
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>getuid</refentrytitle><manvolnum>2</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Y, the privileged identity of the application used to
|
||||||
|
grant the requested service. This is the
|
||||||
|
<emphasis>effective</emphasis> user identifier;
|
||||||
|
returned by the function <citerefentry>
|
||||||
|
<refentrytitle>geteuid</refentrytitle><manvolnum>2</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Z, the user under whose identity the service will be granted.
|
||||||
|
This is the username returned by
|
||||||
|
<function>pam_get_user()</function> and also stored in the
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> item,
|
||||||
|
<emphasis>PAM_USER</emphasis>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> has a place for
|
||||||
|
an additional user identity that a module may care to make
|
||||||
|
use of. This is the <emphasis>PAM_RUSER</emphasis> item.
|
||||||
|
Generally, network sensitive modules/applications may wish
|
||||||
|
to set/read this item to establish the identity of the user
|
||||||
|
requesting a service from a remote location.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
<para>
|
||||||
|
Note, if a module wishes to modify the identity of either the
|
||||||
|
<emphasis>uid</emphasis> or <emphasis>euid</emphasis> of the
|
||||||
|
running process, it should take care to restore the original
|
||||||
|
values prior to returning control to the
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> library.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
<section xml:id="mwg-see-programming-sec-conv">
|
||||||
|
<title>Using the conversation function</title>
|
||||||
|
<para>
|
||||||
|
Prior to calling the conversation function, the module should
|
||||||
|
reset the contents of the pointer that will return the applications
|
||||||
|
response. This is a good idea since the application may fail
|
||||||
|
to fill the pointer and the module should be in a position to
|
||||||
|
notice!
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The module should be prepared for a failure from the
|
||||||
|
conversation. The generic error would be
|
||||||
|
<emphasis>PAM_CONV_ERR</emphasis>, but anything other than
|
||||||
|
<emphasis>PAM_SUCCESS</emphasis> should be treated as
|
||||||
|
indicating failure.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
<section xml:id="mwg-see-programming-sec-token">
|
||||||
|
<title>Authentication tokens</title>
|
||||||
|
<para>
|
||||||
|
To ensure that the authentication tokens are not left lying
|
||||||
|
around the items, <emphasis>PAM_AUTHTOK</emphasis> and
|
||||||
|
<emphasis>PAM_OLDAUTHTOK</emphasis>, are not available to
|
||||||
|
the application: they are defined in
|
||||||
|
<filename><security/pam_modules.h></filename>. This
|
||||||
|
is ostensibly for security reasons, but a maliciously
|
||||||
|
programmed application will always have access to all memory
|
||||||
|
of the process, so it is only superficially enforced. As a
|
||||||
|
general rule the module should overwrite authentication tokens
|
||||||
|
as soon as they are no longer needed. Especially before
|
||||||
|
<function>free()</function>'ing them. The
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> library is
|
||||||
|
required to do this when either of these authentication
|
||||||
|
token items are (re)set.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Not to dwell too little on this concern; should the module
|
||||||
|
store the authentication tokens either as (automatic) function
|
||||||
|
variables or using <function>pam_[gs]et_data()</function> the
|
||||||
|
associated memory should be over-written explicitly before it
|
||||||
|
is released. In the case of the latter storage mechanism, the
|
||||||
|
associated <function>cleanup()</function> function should
|
||||||
|
explicitly overwrite the <varname>*data</varname> before
|
||||||
|
<function>free()</function>'ing it: for example,
|
||||||
|
<programlisting>
|
||||||
|
/*
|
||||||
|
* An example cleanup() function for releasing memory that was used to
|
||||||
|
* store a password.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int cleanup(pam_handle_t *pamh, void *data, int error_status)
|
||||||
|
{
|
||||||
|
char *xx;
|
||||||
|
|
||||||
|
if ((xx = data)) {
|
||||||
|
while (*xx)
|
||||||
|
*xx++ = '\0';
|
||||||
|
free(data);
|
||||||
|
}
|
||||||
|
return PAM_SUCCESS;
|
||||||
|
}
|
||||||
|
</programlisting>
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section xml:id="mwg-see-programming-syslog">
|
||||||
|
<title>Use of <citerefentry>
|
||||||
|
<refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry></title>
|
||||||
|
<para>
|
||||||
|
Only rarely should error information be directed to the user.
|
||||||
|
Usually, this is to be limited to
|
||||||
|
<quote><emphasis>sorry you cannot login now</emphasis></quote>
|
||||||
|
type messages. Information concerning errors in the configuration
|
||||||
|
file, <filename>/etc/pam.conf</filename>, or due to some system
|
||||||
|
failure encountered by the module, should be written to
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum>
|
||||||
|
</citerefentry> with <emphasis>facility-type</emphasis>
|
||||||
|
<emphasis remap="B">LOG_AUTHPRIV</emphasis>.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
With a few exceptions, the level of logging is, at the discretion
|
||||||
|
of the module developer. Here is the recommended usage of different
|
||||||
|
logging levels:
|
||||||
|
</para>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
As a general rule, errors encountered by a module should be
|
||||||
|
logged at the <emphasis>LOG_ERR</emphasis> level. However,
|
||||||
|
information regarding an unrecognized argument, passed to a
|
||||||
|
module from an entry in the <filename>/etc/pam.conf</filename>
|
||||||
|
file, is <emphasis>required</emphasis> to be logged at the
|
||||||
|
<emphasis>LOG_ERR</emphasis> level.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Debugging information, as activated by the
|
||||||
|
<command>debug</command> argument to the module in
|
||||||
|
<filename>/etc/pam.conf</filename>, should be logged
|
||||||
|
at the <emphasis>LOG_DEBUG</emphasis> level.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
If a module discovers that its personal configuration
|
||||||
|
file or some system file it uses for information is
|
||||||
|
corrupted or somehow unusable, it should indicate this
|
||||||
|
by logging messages at level, <emphasis>LOG_ALERT</emphasis>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Shortages of system resources, such as a failure to
|
||||||
|
manipulate a file or <function>malloc()</function> failures
|
||||||
|
should be logged at level <emphasis>LOG_CRIT</emphasis>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Authentication failures, associated with an incorrectly
|
||||||
|
typed password should be logged at level,
|
||||||
|
<emphasis>LOG_NOTICE</emphasis>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</section>
|
||||||
|
<section xml:id="mwg-see-programming-libs">
|
||||||
|
<title>Modules that require system libraries</title>
|
||||||
|
<para>
|
||||||
|
Writing a module is much like writing an application. You
|
||||||
|
have to provide the "conventional hooks" for it to work
|
||||||
|
correctly, like <function>pam_sm_authenticate()</function>
|
||||||
|
etc., which would correspond to the <function>main()</function>
|
||||||
|
function in a normal function.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Typically, the author may want to link against some standard system
|
||||||
|
libraries. As when one compiles a normal program, this can be
|
||||||
|
done for modules too: you simply append the
|
||||||
|
<parameter>-l</parameter><emphasis>XXX</emphasis> arguments
|
||||||
|
for the desired libraries when you create the shared module object.
|
||||||
|
To make sure a module is linked to the
|
||||||
|
<command>libwhatever.so</command> library
|
||||||
|
when it is <function>dlopen()</function>ed, try:
|
||||||
|
<programlisting>
|
||||||
|
% gcc -shared -o pam_module.so pam_module.o -lwhatever
|
||||||
|
</programlisting>
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="mwg-example">
|
||||||
|
<title>An example module</title>
|
||||||
|
<para>
|
||||||
|
At some point, we may include a fully commented example of a module in
|
||||||
|
this document. For now, please look at the modules directory of the
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis> sources.
|
||||||
|
</para>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="mwg-see-also">
|
||||||
|
<title>See also</title>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The Linux-PAM System Administrators' Guide.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The Linux-PAM Application Developers' Guide.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The V. Samar and R. Schemers (SunSoft), ``UNIFIED LOGIN WITH
|
||||||
|
PLUGGABLE AUTHENTICATION MODULES'', Open Software Foundation
|
||||||
|
Request For Comments 86.0, October 1995.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="mwg-author">
|
||||||
|
<title>Author/acknowledgments</title>
|
||||||
|
<para>
|
||||||
|
This document was written by Andrew G. Morgan (morgan@kernel.org)
|
||||||
|
with many contributions from
|
||||||
|
Chris Adams, Peter Allgeyer, Tim Baverstock, Tim Berger, Craig S. Bell,
|
||||||
|
Derrick J. Brashear, Ben Buxton, Seth Chaiklin, Oliver Crow, Chris Dent,
|
||||||
|
Marc Ewing, Cristian Gafton, Emmanuel Galanos, Brad M. Garcia,
|
||||||
|
Eric Hester, Roger Hu, Eric Jacksch, Michael K. Johnson, David Kinchlea,
|
||||||
|
Olaf Kirch, Marcin Korzonek, Thorsten Kukuk, Stephen Langasek,
|
||||||
|
Nicolai Langfeldt, Elliot Lee, Luke Kenneth Casson Leighton,
|
||||||
|
Al Longyear, Ingo Luetkebohle, Marek Michalkiewicz, Robert Milkowski,
|
||||||
|
Aleph One, Martin Pool, Sean Reifschneider, Jan Rekorajski, Erik Troan,
|
||||||
|
Theodore Ts'o, Jeff Uphoff, Myles Uyema, Savochkin Andrey Vladimirovich,
|
||||||
|
Ronald Wahl, David Wood, John Wilmes, Joseph S. D. Yao
|
||||||
|
and Alex O. Yuriev.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Thanks are also due to Sun Microsystems, especially to Vipin Samar and
|
||||||
|
Charlie Lai for their advice. At an early stage in the development of
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis>, Sun graciously made the
|
||||||
|
documentation for their implementation of PAM available. This act
|
||||||
|
greatly accelerated the development of
|
||||||
|
<emphasis remap="B">Linux-PAM</emphasis>.
|
||||||
|
</para>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter xml:id="mwg-copyright">
|
||||||
|
<title>Copyright information for this document</title>
|
||||||
|
<programlisting>
|
||||||
|
Copyright (c) 2006 Thorsten Kukuk <kukuk@thkukuk.de>
|
||||||
|
Copyright (c) 1996-2002 Andrew G. Morgan <morgan@kernel.org>
|
||||||
|
</programlisting>
|
||||||
|
<para>
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, and the entire permission notice in its entirety,
|
||||||
|
including the disclaimer of warranties.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. The name of the author may not be used to endorse or promote
|
||||||
|
products derived from this software without specific prior
|
||||||
|
written permission.
|
||||||
|
</programlisting>
|
||||||
|
<para>
|
||||||
|
Alternatively, this product may be distributed under the terms of
|
||||||
|
the GNU General Public License (GPL), in which case the provisions
|
||||||
|
of the GNU GPL are required instead of the above restrictions.
|
||||||
|
(This clause is necessary due to a potential bad interaction between
|
||||||
|
the GNU GPL and the restrictions contained in a BSD-style copyright.)
|
||||||
|
</para>
|
||||||
|
<programlisting>
|
||||||
|
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||||
|
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||||
|
OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||||
|
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||||
|
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||||
|
</programlisting>
|
||||||
|
</chapter>
|
||||||
|
</book>
|
1
doc/mwg/html/meson.build
Symbolic link
1
doc/mwg/html/meson.build
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../../guide-html-meson.build
|
1
doc/mwg/meson.build
Symbolic link
1
doc/mwg/meson.build
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../guide-meson.build
|
29
doc/mwg/pam_conv.xml
Normal file
29
doc/mwg/pam_conv.xml
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg-pam_conv">
|
||||||
|
<title>The conversation function</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_conv.3.xml" xpointer='xpointer(id("pam_conv-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<programlisting>
|
||||||
|
struct pam_message {
|
||||||
|
int msg_style;
|
||||||
|
const char *msg;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct pam_response {
|
||||||
|
char *resp;
|
||||||
|
int resp_retcode;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct pam_conv {
|
||||||
|
int (*conv)(int num_msg, const struct pam_message **msg,
|
||||||
|
struct pam_response **resp, void *appdata_ptr);
|
||||||
|
void *appdata_ptr;
|
||||||
|
};
|
||||||
|
</programlisting>
|
||||||
|
<section xml:id="mwg-pam_conv-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_conv.3.xml" xpointer='xpointer(id("pam_conv-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="mwg-pam_conv-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_conv.3.xml" xpointer='xpointer(id("pam_conv-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/mwg/pam_fail_delay.xml
Normal file
12
doc/mwg/pam_fail_delay.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_fail_delay">
|
||||||
|
<title>Request a delay on failure</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_fail_delay.3.xml" xpointer='xpointer(id("pam_fail_delay-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_fail_delay-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_fail_delay.3.xml" xpointer='xpointer(id("pam_fail_delay-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_fail_delay-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_fail_delay.3.xml" xpointer='xpointer(id("pam_fail_delay-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/mwg/pam_get_data.xml
Normal file
12
doc/mwg/pam_get_data.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg-pam_get_data">
|
||||||
|
<title>Get module internal data</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_data.3.xml" xpointer='xpointer(id("pam_get_data-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="mwg-pam_get_data-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_data.3.xml" xpointer='xpointer(id("pam_get_data-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="mwg-pam_get_data-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_data.3.xml" xpointer='xpointer(id("pam_get_data-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/mwg/pam_get_item.xml
Normal file
12
doc/mwg/pam_get_item.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg-pam_get_item">
|
||||||
|
<title>Getting PAM items</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_item.3.xml" xpointer='xpointer(id("pam_get_item-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="mwg-pam_get_item-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_item.3.xml" xpointer='xpointer(id("pam_get_item-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="mwg-pam_get_item-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_item.3.xml" xpointer='xpointer(id("pam_get_item-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/mwg/pam_get_user.xml
Normal file
12
doc/mwg/pam_get_user.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="mwg-pam_get_user">
|
||||||
|
<title>Get user name</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_user.3.xml" xpointer='xpointer(id("pam_get_user-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="mwg-pam_get_user-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_user.3.xml" xpointer='xpointer(id("pam_get_user-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="mwg-pam_get_user-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_get_user.3.xml" xpointer='xpointer(id("pam_get_user-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/mwg/pam_getenv.xml
Normal file
12
doc/mwg/pam_getenv.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_getenv">
|
||||||
|
<title>Get a PAM environment variable</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenv.3.xml" xpointer='xpointer(id("pam_getenv-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_getenv-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenv.3.xml" xpointer='xpointer(id("pam_getenv-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_getenv-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenv.3.xml" xpointer='xpointer(id("pam_getenv-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/mwg/pam_getenvlist.xml
Normal file
12
doc/mwg/pam_getenvlist.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_getenvlist">
|
||||||
|
<title>Getting the PAM environment</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenvlist.3.xml" xpointer='xpointer(id("pam_getenvlist-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_getenvlist-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenvlist.3.xml" xpointer='xpointer(id("pam_getenvlist-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_getenvlist-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_getenvlist.3.xml" xpointer='xpointer(id("pam_getenvlist-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
12
doc/mwg/pam_putenv.xml
Normal file
12
doc/mwg/pam_putenv.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="adg-pam_putenv">
|
||||||
|
<title>Set or change PAM environment variable</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_putenv.3.xml" xpointer='xpointer(id("pam_putenv-synopsis")/*)'/>
|
||||||
|
</funcsynopsis>
|
||||||
|
<section xml:id="adg-pam_putenv-description">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_putenv.3.xml" xpointer='xpointer(id("pam_putenv-description")/*)'/>
|
||||||
|
</section>
|
||||||
|
<section xml:id="adg-pam_putenv-return_values">
|
||||||
|
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../man/pam_putenv.3.xml" xpointer='xpointer(id("pam_putenv-return_values")/*)'/>
|
||||||
|
</section>
|
||||||
|
</section>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue