Merge branch 'master' of /home/www-data/gitweb/dragonfly
authorPeter Avalos <pavalos@dragonflybsd.org>
Sat, 24 Dec 2011 21:17:59 +0000 (13:17 -0800)
committerPeter Avalos <pavalos@dragonflybsd.org>
Sat, 24 Dec 2011 21:17:59 +0000 (13:17 -0800)
143 files changed:
contrib/openpam/CREDITS
contrib/openpam/HISTORY
contrib/openpam/LICENSE
contrib/openpam/README
contrib/openpam/README.DELETED
contrib/openpam/README.DRAGONFLY [deleted file]
contrib/openpam/RELNOTES
contrib/openpam/doc/man/openpam.3
contrib/openpam/doc/man/openpam_borrow_cred.3
contrib/openpam/doc/man/openpam_free_data.3
contrib/openpam/doc/man/openpam_free_envlist.3
contrib/openpam/doc/man/openpam_get_option.3
contrib/openpam/doc/man/openpam_log.3
contrib/openpam/doc/man/openpam_nullconv.3
contrib/openpam/doc/man/openpam_readline.3
contrib/openpam/doc/man/openpam_restore_cred.3
contrib/openpam/doc/man/openpam_set_option.3
contrib/openpam/doc/man/openpam_subst.3 [copied from contrib/openpam/doc/man/pam_get_authtok.3 with 60% similarity]
contrib/openpam/doc/man/openpam_ttyconv.3
contrib/openpam/doc/man/pam.3
contrib/openpam/doc/man/pam.conf.5
contrib/openpam/doc/man/pam_acct_mgmt.3
contrib/openpam/doc/man/pam_authenticate.3
contrib/openpam/doc/man/pam_chauthtok.3
contrib/openpam/doc/man/pam_close_session.3
contrib/openpam/doc/man/pam_conv.3
contrib/openpam/doc/man/pam_end.3
contrib/openpam/doc/man/pam_error.3
contrib/openpam/doc/man/pam_get_authtok.3
contrib/openpam/doc/man/pam_get_data.3
contrib/openpam/doc/man/pam_get_item.3
contrib/openpam/doc/man/pam_get_user.3
contrib/openpam/doc/man/pam_getenv.3
contrib/openpam/doc/man/pam_getenvlist.3
contrib/openpam/doc/man/pam_info.3
contrib/openpam/doc/man/pam_open_session.3
contrib/openpam/doc/man/pam_prompt.3
contrib/openpam/doc/man/pam_putenv.3
contrib/openpam/doc/man/pam_set_data.3
contrib/openpam/doc/man/pam_set_item.3
contrib/openpam/doc/man/pam_setcred.3
contrib/openpam/doc/man/pam_setenv.3
contrib/openpam/doc/man/pam_sm_acct_mgmt.3
contrib/openpam/doc/man/pam_sm_authenticate.3
contrib/openpam/doc/man/pam_sm_chauthtok.3
contrib/openpam/doc/man/pam_sm_close_session.3
contrib/openpam/doc/man/pam_sm_open_session.3
contrib/openpam/doc/man/pam_sm_setcred.3
contrib/openpam/doc/man/pam_start.3
contrib/openpam/doc/man/pam_strerror.3
contrib/openpam/doc/man/pam_verror.3
contrib/openpam/doc/man/pam_vinfo.3
contrib/openpam/doc/man/pam_vprompt.3
contrib/openpam/include/security/openpam.h
contrib/openpam/include/security/openpam_version.h
contrib/openpam/include/security/pam_appl.h
contrib/openpam/include/security/pam_constants.h
contrib/openpam/include/security/pam_modules.h
contrib/openpam/include/security/pam_types.h
contrib/openpam/lib/openpam_borrow_cred.c
contrib/openpam/lib/openpam_check_owner_perms.c [new file with mode: 0644]
contrib/openpam/lib/openpam_configure.c
contrib/openpam/lib/openpam_constants.c [copied from contrib/openpam/lib/openpam_load.c with 52% similarity]
contrib/openpam/lib/openpam_constants.h [copied from contrib/openpam/include/security/openpam_version.h with 61% similarity]
contrib/openpam/lib/openpam_debug.h [new file with mode: 0644]
contrib/openpam/lib/openpam_dispatch.c
contrib/openpam/lib/openpam_dynamic.c
contrib/openpam/lib/openpam_findenv.c
contrib/openpam/lib/openpam_free_data.c
contrib/openpam/lib/openpam_free_envlist.c
contrib/openpam/lib/openpam_get_option.c
contrib/openpam/lib/openpam_impl.h
contrib/openpam/lib/openpam_load.c
contrib/openpam/lib/openpam_log.c
contrib/openpam/lib/openpam_nullconv.c
contrib/openpam/lib/openpam_readline.c
contrib/openpam/lib/openpam_restore_cred.c
contrib/openpam/lib/openpam_set_option.c
contrib/openpam/lib/openpam_static.c
contrib/openpam/lib/openpam_strlcmp.h [copied from contrib/openpam/include/security/openpam_version.h with 61% similarity]
contrib/openpam/lib/openpam_strlcpy.h [copied from contrib/openpam/include/security/openpam_version.h with 61% similarity]
contrib/openpam/lib/openpam_subst.c [new file with mode: 0644]
contrib/openpam/lib/openpam_ttyconv.c
contrib/openpam/lib/pam_acct_mgmt.c
contrib/openpam/lib/pam_authenticate.c
contrib/openpam/lib/pam_authenticate_secondary.c
contrib/openpam/lib/pam_chauthtok.c
contrib/openpam/lib/pam_close_session.c
contrib/openpam/lib/pam_end.c
contrib/openpam/lib/pam_error.c
contrib/openpam/lib/pam_get_authtok.c
contrib/openpam/lib/pam_get_data.c
contrib/openpam/lib/pam_get_item.c
contrib/openpam/lib/pam_get_mapped_authtok.c
contrib/openpam/lib/pam_get_mapped_username.c
contrib/openpam/lib/pam_get_user.c
contrib/openpam/lib/pam_getenv.c
contrib/openpam/lib/pam_getenvlist.c
contrib/openpam/lib/pam_info.c
contrib/openpam/lib/pam_open_session.c
contrib/openpam/lib/pam_prompt.c
contrib/openpam/lib/pam_putenv.c
contrib/openpam/lib/pam_set_data.c
contrib/openpam/lib/pam_set_item.c
contrib/openpam/lib/pam_set_mapped_authtok.c
contrib/openpam/lib/pam_set_mapped_username.c
contrib/openpam/lib/pam_setcred.c
contrib/openpam/lib/pam_setenv.c
contrib/openpam/lib/pam_sm_acct_mgmt.c
contrib/openpam/lib/pam_sm_authenticate.c
contrib/openpam/lib/pam_sm_authenticate_secondary.c
contrib/openpam/lib/pam_sm_chauthtok.c
contrib/openpam/lib/pam_sm_close_session.c
contrib/openpam/lib/pam_sm_get_mapped_authtok.c
contrib/openpam/lib/pam_sm_get_mapped_username.c
contrib/openpam/lib/pam_sm_open_session.c
contrib/openpam/lib/pam_sm_set_mapped_authtok.c
contrib/openpam/lib/pam_sm_set_mapped_username.c
contrib/openpam/lib/pam_sm_setcred.c
contrib/openpam/lib/pam_start.c
contrib/openpam/lib/pam_strerror.c
contrib/openpam/lib/pam_verror.c
contrib/openpam/lib/pam_vinfo.c
contrib/openpam/lib/pam_vprompt.c
lib/libpam/Makefile
lib/libpam/config.h [new file with mode: 0644]
lib/libpam/patches/openpam_configure.c.patch [deleted file]
lib/libpam/patches/openpam_ttyconv.c.patch [deleted file]
lib/pam_module/Makefile.inc
lib/pam_module/Makefile.shlib [deleted file]
lib/pam_module/pam_exec/pam_exec.c
lib/pam_module/pam_group/pam_group.8
lib/pam_module/pam_group/pam_group.c
lib/pam_module/pam_krb5/Makefile [deleted file]
lib/pam_module/pam_krb5/pam_krb5.8 [deleted file]
lib/pam_module/pam_krb5/pam_krb5.c [deleted file]
lib/pam_module/pam_ksu/Makefile [deleted file]
lib/pam_module/pam_ksu/pam_ksu.8 [deleted file]
lib/pam_module/pam_ksu/pam_ksu.c [deleted file]
lib/pam_module/pam_ssh/pam_ssh.8
lib/pam_module/pam_ssh/pam_ssh.c
lib/pam_module/pam_unix/pam_unix.8
lib/pam_module/pam_unix/pam_unix.c

index c8da3ff..665885c 100644 (file)
@@ -6,10 +6,11 @@ Network Associates, Inc.  under DARPA/SPAWAR contract N66001-01-C-8035
 
 Principal design and development by:
 
-        Dag-Erling Smørgrav <des@freebsd.org>
+        Dag-Erling Smørgrav <des@des.no>
 
-The following persons (in no particular order) have contributed, directly
-or indirectly, with patches, criticism, suggestions, or ideas:
+The following persons (in alphabetical order) have contributed,
+directly or indirectly, with patches, criticism, suggestions, or
+ideas:
 
        Andrew Morgan <morgan@transmeta.com>
        Brian Fundakowski Feldman <green@freebsd.org>
@@ -20,18 +21,22 @@ or indirectly, with patches, criticism, suggestions, or ideas:
        Emmanuel Dreyfus <manu@netbsd.org>
        Eric Melville <eric@freebsd.org>
        Gary Winiger <Gary.Winiger@sun.com>
+       Hubert Feyrer <hubert@feyrer.de>
        Joe Marcus Clarke <marcus@freebsd.org>
        Juli Mallett <jmallett@freebsd.org>
-       Hubert Feyrer <hubert@feyrer.de>
+       Jörg Sonnenberger <joerg@britannica.bec.de>
        Mark Murray <markm@freebsd.org>
+       Matthias Drochner <drochner@netbsd.org>
        Mike Petullo <mike@flyn.org>
        Mikhail Teterin <mi@aldan.algebra.com>
-       Mikko Työläjärvi <mbsd@pacbell.net>
+       Mikko Työläjärvi <mbsd@pacbell.net>
+       Nick Hibma <nick@van-laarhoven.org>
        Robert Watson <rwatson@freebsd.org>
        Ruslan Ermilov <ru@freebsd.org>
+       Sebastian Krahmer <sebastian.krahmer@gmail.com>
        Solar Designer <solar@openwall.com>
        Takanori Saneto <sanewo@ba2.so-net.ne.jp>
        Wojciech A. Koszek <wkoszek@freebsd.org>
        Yar Tikhiy <yar@freebsd.org>
 
-$Id: CREDITS 400 2007-10-24 15:04:23Z des $
+$Id: CREDITS 498 2011-11-21 16:27:04Z des $
index 9c1c26e..81af9ea 100644 (file)
@@ -1,3 +1,29 @@
+OpenPAM Lycopsida                                              2011-12-18
+
+ - ENHANCE: removed static build autodetection, which didn't work
+   anyway.  Use an explicit, user-specified preprocessor variable
+   instead.
+
+ - ENHANCE: cleaned up the documentation a bit.
+
+ - ENHANCE: added openpam_subst(3), allowing certain PAM items to be
+   embedded in strings such as prompts.  Apply it to the prompts used
+   by pam_get_user(3) and pam_get_authtok(3).
+
+ - ENHANCE: added support for the user_prompt, authtok_prompt and
+   oldauthtok_prompt module options, which override the prompts passed
+   by the module to pam_set_user(3) and pam_get_authtok(3).
+
+ - ENHANCE: rewrote the policy parser to support quoted option values.
+
+ - ENHANCE: added pamtest(1), a tool for testing modules and policies.
+
+ - ENHANCE: added code to check the ownership and permissions of a
+   module before loading it.
+
+ - ENHANCE: added / improved input validation in many cases, including
+   the policy file and some function arguments.
+============================================================================
 OpenPAM Hydrangea                                              2007-12-21
 
  - ENHANCE: when compiling with GCC, mark up API functions with GCC
@@ -21,7 +47,7 @@ OpenPAM Hydrangea                                             2007-12-21
    contexts), since the module cache was the only part of OpenPAM that
    was not thread-safe.
 ============================================================================
-OpenPAM Figwort 2005-06-16
+OpenPAM Figwort                                                        2005-06-16
 
  - BUGFIX: Correct several small signedness and initialization bugs
    discovered during review by the NetBSD team.
@@ -327,4 +353,4 @@ OpenPAM     Calamite                                                2002-02-09
 
 First (beta) release.
 ============================================================================
-$Id: HISTORY 409 2007-12-21 11:38:50Z des $
+$Id: HISTORY 504 2011-12-18 14:11:12Z des $
index 0260cca..e6d4325 100644 (file)
@@ -1,6 +1,6 @@
 
 Copyright (c) 2002-2003 Networks Associates Technology, Inc.
-Copyright (c) 2004-2007 Dag-Erling Smørgrav
+Copyright (c) 2004-2011 Dag-Erling Smørgrav
 All rights reserved.
 
 This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,4 +32,4 @@ 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.
 
-$Id: LICENSE 408 2007-12-21 11:36:24Z des $
+$Id: LICENSE 437 2011-09-13 12:00:13Z des $
index 475dd74..02851d1 100644 (file)
@@ -22,6 +22,6 @@ These are some of OpenPAM's features:
      /usr/local/etc/pam.d/ and /usr/local/etc/pam.conf, in that order;
      this will be made configurable in a future release.
 
-Please direct bug reports and inquiries to des@freebsd.org.
+Please direct bug reports and inquiries to <des@des.no>.
 
-$Id: README 320 2006-02-16 20:33:19Z des $
+$Id: README 424 2009-10-29 17:10:22Z des $
index dcc1dd8..069d787 100644 (file)
@@ -3,8 +3,7 @@ Makefile.am
 Makefile.in
 aclocal.m4
 autogen.sh
-bin
-compile
+bin/
 config.guess
 config.h.in
 config.sub
@@ -25,6 +24,6 @@ install-sh
 lib/Makefile.am
 lib/Makefile.in
 ltmain.sh
-misc
+misc/
 missing
-modules
+modules/
diff --git a/contrib/openpam/README.DRAGONFLY b/contrib/openpam/README.DRAGONFLY
deleted file mode 100644 (file)
index 6106451..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Original source can be obtained from:
-http://www.openpam.org
-MD5 (openpam-20071221.tar.gz) = 33b7c097d96331b79cf1559abec78141
-
-The file README.DELETED contains a list of deleted files.
index d66c8f0..71f7eb9 100644 (file)
@@ -1,13 +1,11 @@
 
-                Release notes for OpenPAM Hydrangea
+                Release notes for OpenPAM Lycopsida
                 ===================================
 
-This release corresponds to the code used in FreeBSD-CURRENT as of the
-release date.  It has also been tested on several other platforms, and
-is expected to work on almost any POSIX-like platform that has GNU
-autotools, GNU make and the GNU compiler suite installed.  One notable
-exception is MacOS X, which ships with a very weird, heavily modified
-version of GCC.
+This release corresponds to the code used in FreeBSD HEAD as of the
+release date, and is also expected to work on almost any POSIX-like
+platform that has GNU autotools, GNU make and the GNU compiler suite
+installed.
 
 The library itself is complete.  Documentation exists in the form of
 man pages for the library functions.  These man pages are generated by
@@ -18,12 +16,9 @@ of date.
 The distribution also includes three sample modules (pam_deny,
 pam_permit and pam_unix) and a sample application (su).  These are not
 intended for actual use, but rather to serve as examples for module or
-application developers.
+application developers.  It also includes a command-line application
+(pamtest) which can be used to test policies and modules.
 
-NOTE: to the person who sent me MacOS patches in July 2002: I have
-lost your name and email address.  Please contact me so I can give you
-proper credit for your contribution.
+Please direct bug reports and inquiries to <des@des.no>.
 
-Please direct bug reports and inquiries to <des@freebsd.org>.
-
-$Id: RELNOTES 404 2007-11-28 12:31:04Z des $
+$Id: RELNOTES 506 2011-12-18 14:25:12Z des $
index eb23a76..c04a2aa 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt OPENPAM 3
 .Os
 .Sh NAME
@@ -47,6 +47,7 @@
 .Nm openpam_readline ,
 .Nm openpam_restore_cred ,
 .Nm openpam_set_option ,
+.Nm openpam_subst ,
 .Nm openpam_ttyconv ,
 .Nm pam_error ,
 .Nm pam_get_authtok ,
@@ -80,6 +81,8 @@
 .Ft "int"
 .Fn openpam_set_option "pam_handle_t *pamh" "const char *option" "const char *value"
 .Ft "int"
+.Fn openpam_subst "const pam_handle_t *pamh" "char *buf" "size_t *bufsize" "const char *template"
+.Ft "int"
 .Fn openpam_ttyconv "int n" "const struct pam_message **msg" "struct pam_response **resp" "void *data"
 .Ft "int"
 .Fn pam_error "const pam_handle_t *pamh" "const char *fmt" "..."
@@ -120,6 +123,7 @@ standardization.
 .Xr openpam_readline 3 ,
 .Xr openpam_restore_cred 3 ,
 .Xr openpam_set_option 3 ,
+.Xr openpam_subst 3 ,
 .Xr openpam_ttyconv 3 ,
 .Xr pam_error 3 ,
 .Xr pam_get_authtok 3 ,
index 4ae7123..25780db 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt OPENPAM_BORROW_CRED 3
 .Os
 .Sh NAME
@@ -88,7 +88,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 542a5d2..b32a345 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt OPENPAM_FREE_DATA 3
 .Os
 .Sh NAME
@@ -71,7 +71,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 8f02464..0c1976a 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt OPENPAM_FREE_ENVLIST 3
 .Os
 .Sh NAME
@@ -56,6 +56,7 @@ frees all the environment variables in an environment list, and the
 list itself.
 It is suitable for freeing the return value from
 .Xr pam_getenvlist 3 .
+.Pp
 .Sh SEE ALSO
 .Xr pam 3 ,
 .Xr pam_getenvlist 3
@@ -68,8 +69,5 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
-Security Research Division of Network Associates, Inc.\& under
-DARPA/SPAWAR contract N66001-01-C-8035
-.Pq Dq CBOSS ,
-as part of the DARPA CHATS research program.
+Project by
+.An Dag-Erling Sm\(/orgrav Aq des@FreeBSD.org .
index cb5d5e3..d656612 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt OPENPAM_GET_OPTION 3
 .Os
 .Sh NAME
@@ -74,7 +74,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 208bdf4..adfc006 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt OPENPAM_LOG 3
 .Os
 .Sh NAME
@@ -64,7 +64,7 @@ The following levels are defined:
 Debugging messages.
 These messages are normally not logged unless the global
 integer variable
-.Va _openpam_debug
+.Va openpam_debug
 is set to a non-zero
 value, in which case they are logged with a
 .Xr syslog 3
@@ -108,7 +108,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 6e9bb8e..1873cba 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt OPENPAM_NULLCONV 3
 .Os
 .Sh NAME
@@ -95,7 +95,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 8478920..cf7ab47 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt OPENPAM_READLINE 3
 .Os
 .Sh NAME
@@ -58,13 +58,19 @@ in a NUL-terminated buffer allocated with
 The
 .Nm
 function performs a certain amount of processing
-on the data it reads.
+on the data it reads:
+.Bl -bullet
+.It
 Comments (introduced by a hash sign) are stripped, as is leading and
 trailing whitespace.
+.It
 Any amount of linear whitespace is collapsed to a single space.
+.It
 Blank lines are ignored.
-If a line ends in a backslash, the backslash is stripped and the next
-line is appended.
+.It
+If a line ends in a backslash, the backslash is stripped and the
+next line is appended.
+.El
 .Pp
 If
 .Fa lineno
@@ -102,7 +108,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index f1da98a..12ff8b8 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt OPENPAM_RESTORE_CRED 3
 .Os
 .Sh NAME
@@ -80,7 +80,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index e262584..f186c00 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt OPENPAM_SET_OPTION 3
 .Os
 .Sh NAME
@@ -77,7 +77,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
similarity index 60%
copy from contrib/openpam/doc/man/pam_get_authtok.3
copy to contrib/openpam/doc/man/openpam_subst.3
index d2cda79..565b3e0 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
-.Dt PAM_GET_AUTHTOK 3
+.Dd December 18, 2011
+.Dt OPENPAM_SUBST 3
 .Os
 .Sh NAME
-.Nm pam_get_authtok
-.Nd retrieve authentication token
+.Nm openpam_subst
+.Nd substitute PAM item values in a string
 .Sh LIBRARY
 .Lb libpam
 .Sh SYNOPSIS
 .In sys/types.h
 .In security/pam_appl.h
+.In security/openpam.h
 .Ft "int"
-.Fn pam_get_authtok "pam_handle_t *pamh" "int item" "const char **authtok" "const char *prompt"
+.Fn openpam_subst "const pam_handle_t *pamh" "char *buf" "size_t *bufsize" "const char *template"
 .Sh DESCRIPTION
 The
 .Nm
-function returns the cached authentication token,
-or prompts the user if no token is currently cached.
-Either way, a pointer to the authentication token is stored in the
-location pointed to by the
-.Fa authtok
-argument.
-.Pp
+function expands a string, substituting PAM item
+values for all occurrences of specific substitution codes.
 The
-.Fa item
-argument must have one of the following values:
-.Bl -tag -width 18n
-.It Dv PAM_AUTHTOK
-Returns the current authentication token, or the new token
-when changing authentication tokens.
-.It Dv PAM_OLDAUTHTOK
-Returns the previous authentication token when changing
-authentication tokens.
-.El
-.Pp
-The
-.Fa prompt
-argument specifies a prompt to use if no token is cached.
-If it is
-.Dv NULL ,
-the
-.Dv PAM_AUTHTOK_PROMPT
-or
-.Dv PAM_OLDAUTHTOK_PROMPT
-item,
-as appropriate, will be used.
-If that item is also
-.Dv NULL ,
-a hardcoded default prompt will be used.
+.Fa template
+argument points to the initial string.
+The result is stored in the buffer pointed to by the
+.Fa buf
+argument; the
+.Fa bufsize
+argument specifies the size of that buffer.
+The actual size of the resulting string, including the terminating NUL
+character, is stored in the location pointed to by the
+.Fa bufsize
+argument.
 .Pp
 If
-.Fa item
-is set to
-.Dv PAM_AUTHTOK
-and there is a non-null
-.Dv PAM_OLDAUTHTOK
-item,
+.Fa buf
+is NULL, or if the buffer is too small to hold the expanded
+string,
+.Fa bufsize
+is updated to reflect the amount of space required to
+hold the entire string, and
 .Nm
-will ask the user to confirm the new token by
-retyping it.
-If there is a mismatch,
-.Nm
-will return
+returns
 .Dv PAM_TRY_AGAIN .
 .Pp
+If
+.Nm
+fails for any other reason, the
+.Fa bufsize
+argument is
+untouched, but part of the buffer may still have been overwritten.
+.Pp
+Substitution codes are introduced by a percent character and correspond
+to PAM items:
+.Bl -tag -width 18n
+.It \&%H
+Replaced by the current value of the
+.Dv PAM_RHOST
+item.
+.It \&%h
+Replaced by the current value of the
+.Dv PAM_HOST
+item.
+.It \&%s
+Replaced by the current value of the
+.Dv PAM_SERVICE
+item.
+.It \&%t
+Replaced by the current value of the
+.Dv PAM_TTY
+item.
+.It \&%U
+Replaced by the current value of the
+.Dv PAM_RUSER
+item.
+.It \&%u
+Replaced by the current value of the
+.Dv PAM_USER
+item.
+.El
+.Pp
 .Sh RETURN VALUES
 The
 .Nm
 function returns one of the following values:
 .Bl -tag -width 18n
-.It Bq Er PAM_BUF_ERR
-Memory buffer error.
-.It Bq Er PAM_CONV_ERR
-Conversation failure.
 .It Bq Er PAM_SYSTEM_ERR
 System error.
 .It Bq Er PAM_TRY_AGAIN
@@ -115,6 +125,7 @@ Try again.
 .El
 .Sh SEE ALSO
 .Xr pam 3 ,
+.Xr pam_get_authtok 3 ,
 .Xr pam_get_item 3 ,
 .Xr pam_get_user 3 ,
 .Xr pam_strerror 3
@@ -127,8 +138,5 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
-Security Research Division of Network Associates, Inc.\& under
-DARPA/SPAWAR contract N66001-01-C-8035
-.Pq Dq CBOSS ,
-as part of the DARPA CHATS research program.
+Project by
+.An Dag-Erling Sm\(/orgrav Aq des@FreeBSD.org .
index 7374a94..b2cd9d9 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt OPENPAM_TTYCONV 3
 .Os
 .Sh NAME
@@ -90,7 +90,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 5740a4d..11befcd 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM 3
 .Os
 .Sh NAME
index 8ffb6a3..3669f92 100644 (file)
@@ -1,5 +1,5 @@
 .\"-
-.\" Copyright (c) 2005 Dag-Erling Coïdan Smørgrav
+.\" Copyright (c) 2005-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -26,9 +26,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $Id: pam.conf.5 320 2006-02-16 20:33:19Z des $
+.\" $Id: pam.conf.5 485 2011-11-03 16:57:37Z des $
 .\"
-.Dd June 16, 2005
+.Dd November 3, 2011
 .Dt PAM.CONF 5
 .Os
 .Sh NAME
@@ -56,8 +56,8 @@ policy is used instead, if it exists.
 Entries in per-service policy files must be of one of the two forms
 below:
 .Bd -unfilled -offset indent
-.Ar function-class control-flag module-path Op Ar arguments ...
-.Ar function-class Cm include Ar other-service-name
+.Ar facility control-flag module-path Op Ar arguments ...
+.Ar facility Cm include Ar other-service-name
 .Ed
 .Pp
 Entries in
@@ -71,9 +71,8 @@ to the right of a
 sign.
 .Pp
 The
-.Ar function-class
-field specifies the class of functions the entry applies to, and is
-one of:
+.Ar facility
+field specifies the facility the entry applies to, and is one of:
 .Bl -tag -width ".Cm password"
 .It Cm auth
 Authentication functions
@@ -109,7 +108,7 @@ will be failure regardless of the success of later modules.
 .It Cm requisite
 If this module succeeds, the result of the chain will be success
 unless a later module fails.
-If it module fails, the chain is broken and the result is failure.
+If the module fails, the chain is broken and the result is failure.
 .It Cm sufficient
 If this module succeeds, the chain is broken and the result is
 success.
@@ -147,6 +146,11 @@ to call.
 .Pp
 The remaining fields are passed as arguments to the module if and when
 it is invoked.
+As a special case, if an argument is of the form ``name=value'' and
+the right-hand side is surrounded by single or double quotes, any
+whitespace between the quote characters will be considered part of the
+same argument rather than a separator between this argument and the
+next.
 .Pp
 The
 .Cm include
@@ -167,10 +171,9 @@ modify each and every service-specific policy.
 .Sh AUTHORS
 The OpenPAM library was developed for the
 .Fx
-Project by ThinkSec
-AS and Network Associates Laboratories, the Security Research Division
-of Network Associates, Inc.\& under DARPA/SPAWAR contract
-N66001-01-C-8035
+Project by ThinkSec AS and Network Associates Laboratories, the
+Security Research Division of Network Associates, Inc.\& under
+DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
 as part of the DARPA CHATS research program.
 .Pp
index 9fee0d3..9410048 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_ACCT_MGMT 3
 .Os
 .Sh NAME
@@ -107,7 +107,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 4cb1ec3..8263280 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_AUTHENTICATE 3
 .Os
 .Sh NAME
@@ -121,7 +121,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 570dbc2..5823866 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_CHAUTHTOK 3
 .Os
 .Sh NAME
@@ -113,7 +113,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index d6e3bc3..43e4b03 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_CLOSE_SESSION 3
 .Os
 .Sh NAME
@@ -103,7 +103,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index b74e8f4..6b6e697 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2002-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,7 +32,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $Id: pam_conv.3 408 2007-12-21 11:36:24Z des $
+.\" $Id: pam_conv.3 437 2011-09-13 12:00:13Z des $
 .\"
 .Dd June 16, 2005
 .Dt PAM_CONV 3
index bb13093..66e2871 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_END 3
 .Os
 .Sh NAME
@@ -80,7 +80,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 2863a1e..c957409 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_ERROR 3
 .Os
 .Sh NAME
@@ -80,7 +80,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index d2cda79..7f0c804 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_GET_AUTHTOK 3
 .Os
 .Sh NAME
@@ -83,6 +83,25 @@ as appropriate, will be used.
 If that item is also
 .Dv NULL ,
 a hardcoded default prompt will be used.
+Either way, the prompt is expanded using
+.Xr openpam_subst 3
+before it is
+passed to the conversation function.
+.Pp
+If
+.Nm
+is called from a module and the
+.Dv authtok_prompt
+/
+.Dv oldauthtok_prompt
+option is set in the policy file, the value of that
+option takes precedence over both the
+.Fa prompt
+argument and the
+.Dv PAM_AUTHTOK_PROMPT
+/
+.Dv PAM_OLDAUTHTOK_PROMPT
+item.
 .Pp
 If
 .Fa item
@@ -114,6 +133,7 @@ System error.
 Try again.
 .El
 .Sh SEE ALSO
+.Xr openpam_subst 3 ,
 .Xr pam 3 ,
 .Xr pam_get_item 3 ,
 .Xr pam_get_user 3 ,
@@ -127,7 +147,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 6ae03cf..49fae05 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_GET_DATA 3
 .Os
 .Sh NAME
@@ -60,6 +60,11 @@ argument.
 A pointer to the object is stored in the location pointed to by the
 .Fa data
 argument.
+If
+.Nm
+fails, the
+.Fa data
+argument is untouched.
 .Pp
 This function and its counterpart
 .Xr pam_set_data 3
@@ -89,7 +94,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 01c4243..1244a77 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_GET_ITEM 3
 .Os
 .Sh NAME
@@ -53,12 +53,18 @@ The
 function stores a pointer to the item specified by
 the
 .Fa item_type
-argument in the location specified by the
+argument in the location pointed to by the
 .Fa item
 argument.
 The item is retrieved from the PAM context specified by the
 .Fa pamh
 argument.
+If
+.Nm
+fails, the
+.Fa item
+argument is untouched.
+.Pp
 The following item types are recognized:
 .Bl -tag -width 18n
 .It Dv PAM_SERVICE
@@ -90,6 +96,8 @@ authentication token.
 .It Dv PAM_OLDAUTHTOK_PROMPT
 The prompt to use when asking the applicant for an
 expired authentication token prior to changing it.
+.It Dv PAM_HOST
+The name of the host the application runs on.
 .El
 .Pp
 See
@@ -122,7 +130,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 74b7130..8f3b426 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_GET_USER 3
 .Os
 .Sh NAME
@@ -70,10 +70,26 @@ If it is
 .Dv NULL ,
 the
 .Dv PAM_USER_PROMPT
-will be used.
+item will be used.
 If that item is also
 .Dv NULL ,
 a hardcoded default prompt will be used.
+Either way, the prompt is expanded using
+.Xr openpam_subst 3
+before it is
+passed to the conversation function.
+.Pp
+If
+.Nm
+is called from a module and the
+.Dv user_prompt
+option is
+set in the policy file, the value of that option takes precedence over
+both the
+.Fa prompt
+argument and the
+.Dv PAM_USER_PROMPT
+item.
 .Pp
 .Sh RETURN VALUES
 The
@@ -88,6 +104,7 @@ Conversation failure.
 System error.
 .El
 .Sh SEE ALSO
+.Xr openpam_subst 3 ,
 .Xr pam 3 ,
 .Xr pam_get_authtok 3 ,
 .Xr pam_get_item 3 ,
@@ -104,7 +121,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index bacaf13..ebd2992 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_GETENV 3
 .Os
 .Sh NAME
@@ -78,7 +78,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index bafd482..a034c8e 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_GETENVLIST 3
 .Os
 .Sh NAME
@@ -99,7 +99,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index dc1fcc9..08bf200 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_INFO 3
 .Os
 .Sh NAME
@@ -80,7 +80,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 1bc4de4..13811c7 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_OPEN_SESSION 3
 .Os
 .Sh NAME
@@ -104,7 +104,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 8712647..20574f2 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_PROMPT 3
 .Os
 .Sh NAME
@@ -92,7 +92,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 0db2828..e69816a 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_PUTENV 3
 .Os
 .Sh NAME
@@ -83,7 +83,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index d8c2c61..ce4d63d 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_SET_DATA 3
 .Os
 .Sh NAME
@@ -93,7 +93,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index f4662d0..9f4e78d 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_SET_ITEM 3
 .Os
 .Sh NAME
@@ -87,7 +87,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 4df9b30..1e0a246 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_SETCRED 3
 .Os
 .Sh NAME
@@ -116,7 +116,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 681ea03..43906ef 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_SETENV 3
 .Os
 .Sh NAME
@@ -82,7 +82,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index b4aa0d9..22e1980 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_SM_ACCT_MGMT 3
 .Os
 .Sh NAME
@@ -97,7 +97,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 0dbb646..e41a70a 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_SM_AUTHENTICATE 3
 .Os
 .Sh NAME
@@ -99,7 +99,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index b348cf2..bc3f461 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_SM_CHAUTHTOK 3
 .Os
 .Sh NAME
@@ -55,6 +55,16 @@ function is the service module's implementation
 of the
 .Xr pam_chauthtok 3
 API function.
+.Pp
+When the application calls
+.Xr pam_chauthtok 3 ,
+the service function is
+called twice, first with the
+.Dv PAM_PRELIM_CHECK
+flag set and then again
+with the
+.Dv PAM_UPDATE_AUTHTOK
+flag set.
 .Sh RETURN VALUES
 The
 .Nm
@@ -99,7 +109,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 927d48a..3b1f57e 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_SM_CLOSE_SESSION 3
 .Os
 .Sh NAME
@@ -91,7 +91,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index bc47b30..cdfe4d4 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_SM_OPEN_SESSION 3
 .Os
 .Sh NAME
@@ -91,7 +91,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 6f37589..6d5c52f 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_SM_SETCRED 3
 .Os
 .Sh NAME
@@ -97,7 +97,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index b020456..eaa9f05 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_START 3
 .Os
 .Sh NAME
@@ -102,7 +102,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index b626eac..9003102 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_STRERROR 3
 .Os
 .Sh NAME
@@ -53,9 +53,15 @@ The
 function returns a pointer to a string containing a
 textual description of the error indicated by the
 .Fa error_number
-argument, in the context of the PAM transaction described by the
-.Fa pamh
 argument.
+The
+.Fa pamh
+argument is ignored.
+For compatibility with other implementations, it should be either a
+valid PAM handle returned by a previous call to
+.Xr pam_start 3 ,
+or
+.Dv NULL .
 .Sh RETURN VALUES
 The
 .Nm
@@ -63,7 +69,8 @@ function returns
 .Dv NULL
 on failure.
 .Sh SEE ALSO
-.Xr pam 3
+.Xr pam 3 ,
+.Xr pam_start 3
 .Sh STANDARDS
 .Rs
 .%T "X/Open Single Sign-On Service (XSSO) - Pluggable Authentication Modules"
@@ -74,7 +81,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 1a03438..4987da3 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_VERROR 3
 .Os
 .Sh NAME
@@ -84,7 +84,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index a28965d..c2ac5b0 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_VINFO 3
 .Os
 .Sh NAME
@@ -84,7 +84,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 72bca70..381008d 100644 (file)
@@ -1,6 +1,6 @@
 .\"-
 .\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
-.\" Copyright (c) 2004-2007 Dag-Erling Smørgrav
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,9 +32,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $P4$
+.\" $Id$
 .\"
-.Dd December 21, 2007
+.Dd December 18, 2011
 .Dt PAM_VPROMPT 3
 .Os
 .Sh NAME
@@ -121,7 +121,8 @@ The
 .Nm
 function and this manual page were developed for the
 .Fx
-Project by ThinkSec AS and Network Associates Laboratories, the
+Project by
+ThinkSec AS and Network Associates Laboratories, the
 Security Research Division of Network Associates, Inc.\& under
 DARPA/SPAWAR contract N66001-01-C-8035
 .Pq Dq CBOSS ,
index 3361d62..0c896a4 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,7 +32,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam.h 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam.h 455 2011-10-29 18:31:11Z des $
  */
 
 #ifndef SECURITY_OPENPAM_H_INCLUDED
@@ -59,6 +59,12 @@ openpam_borrow_cred(pam_handle_t *_pamh,
        const struct passwd *_pwd)
        OPENPAM_NONNULL((1,2));
 
+int
+openpam_subst(const pam_handle_t *_pamh,
+       char *_buf,
+       size_t *_bufsize,
+       const char *_template);
+
 void
 openpam_free_data(pam_handle_t *_pamh,
        void *_data,
@@ -309,18 +315,17 @@ struct pam_module {
  * Infrastructure for static modules using GCC linker sets.
  * You are not expected to understand this.
  */
-#if defined(__FreeBSD__)
+#if !defined(PAM_SOEXT)
 # define PAM_SOEXT ".so"
-#else
-# undef NO_STATIC_MODULES
-# define NO_STATIC_MODULES
 #endif
 
-#if defined(__GNUC__) && !defined(__PIC__) && !defined(NO_STATIC_MODULES)
+#if defined(OPENPAM_STATIC_MODULES)
+# if !defined(__GNUC__)
+#  error "Don't know how to build static modules on non-GNU compilers"
+# endif
 /* gcc, static linking */
 # include <sys/cdefs.h>
 # include <linker_set.h>
-# define OPENPAM_STATIC_MODULES
 # define PAM_EXTERN static
 # define PAM_MODULE_ENTRY(name)                                                \
        static char _pam_name[] = name PAM_SOEXT;                       \
index 1a3b153..ed1c1de 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_version.h 409 2007-12-21 11:38:50Z des $
+ * $Id: openpam_version.h 505 2011-12-18 14:13:08Z des $
  */
 
 #ifndef SECURITY_OPENPAM_VERSION_H_INCLUDED
 #define SECURITY_OPENPAM_VERSION_H_INCLUDED
 
 #define OPENPAM
-#define OPENPAM_VERSION        20071221
-#define OPENPAM_RELEASE        "Hydrangea"
+#define OPENPAM_VERSION        20111218
+#define OPENPAM_RELEASE        "Lycopsida"
 
 #endif /* !SECURITY_OPENPAM_VERSION_H_INCLUDED */
index 8316c68..b8f0536 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,7 +32,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_appl.h 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_appl.h 437 2011-09-13 12:00:13Z des $
  */
 
 #ifndef SECURITY_PAM_APPL_H_INCLUDED
@@ -72,8 +72,7 @@ pam_close_session(pam_handle_t *_pamh,
 
 int
 pam_end(pam_handle_t *_pamh,
-       int _status)
-       OPENPAM_NONNULL((1));
+       int _status);
 
 int
 pam_get_data(const pam_handle_t *_pamh,
index b005c7f..69add34 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,7 +32,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_constants.h 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_constants.h 443 2011-10-22 01:01:39Z des $
  */
 
 #ifndef SECURITY_PAM_CONSTANTS_H_INCLUDED
@@ -126,6 +126,7 @@ enum {
        PAM_REPOSITORY                  =  10,
        PAM_AUTHTOK_PROMPT              =  11,          /* OpenPAM extension */
        PAM_OLDAUTHTOK_PROMPT           =  12,          /* OpenPAM extension */
+       PAM_HOST                        =  13,          /* OpenPAM extension */
        PAM_NUM_ITEMS                                   /* OpenPAM extension */
 };
 
index 539f662..6242b38 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,7 +32,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_modules.h 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_modules.h 437 2011-09-13 12:00:13Z des $
  */
 
 #ifndef SECURITY_PAM_MODULES_H_INCLUDED
index 0209bc8..d0d5b00 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,7 +32,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_types.h 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_types.h 437 2011-09-13 12:00:13Z des $
  */
 
 #ifndef SECURITY_PAM_TYPES_H_INCLUDED
index 79a349f..e0dfc55 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_borrow_cred.c 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam_borrow_cred.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <grp.h>
diff --git a/contrib/openpam/lib/openpam_check_owner_perms.c b/contrib/openpam/lib/openpam_check_owner_perms.c
new file mode 100644 (file)
index 0000000..9d64ed6
--- /dev/null
@@ -0,0 +1,129 @@
+/*-
+ * Copyright (c) 2011 Dag-Erling Smørgrav
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer
+ *    in this position and unchanged.
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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.
+ *
+ * $Id: openpam_check_owner_perms.c 499 2011-11-22 11:51:50Z des $
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <security/pam_appl.h>
+
+#include "openpam_impl.h"
+
+/*
+ * OpenPAM internal
+ *
+ * Verify that the file or directory referenced by the given descriptor is
+ * owned by either root or the arbitrator and that it is not writable by
+ * group or other.
+ */
+
+int
+openpam_check_desc_owner_perms(const char *name, int fd)
+{
+       uid_t root, arbitrator;
+       struct stat sb;
+       int serrno;
+
+       root = 0;
+       arbitrator = geteuid();
+       if (fstat(fd, &sb) != 0) {
+               serrno = errno;
+               openpam_log(PAM_LOG_ERROR, "%s: %m", name);
+               errno = serrno;
+               return (-1);
+       }
+       if ((sb.st_uid != root && sb.st_uid != arbitrator) ||
+           (sb.st_mode & (S_IWGRP|S_IWOTH)) != 0) {
+               openpam_log(PAM_LOG_ERROR,
+                   "%s: insecure ownership or permissions", name);
+               errno = EPERM;
+               return (-1);
+       }
+       return (0);
+}
+
+/*
+ * OpenPAM internal
+ *
+ * Verify that a file or directory and all components of the path leading
+ * up to it are owned by either root or the arbitrator and that they are
+ * not writable by group or other.
+ *
+ * Note that openpam_check_file_owner_perms() should be used instead if
+ * possible to avoid a race between the ownership / permission check and
+ * the actual open().
+ */
+
+int
+openpam_check_path_owner_perms(const char *path)
+{
+       uid_t root, arbitrator;
+       char pathbuf[PATH_MAX];
+       struct stat sb;
+       int len, serrno;
+
+       root = 0;
+       arbitrator = geteuid();
+       if (realpath(path, pathbuf) == NULL)
+               return (-1);
+       len = strlen(pathbuf);
+       while (len > 0) {
+               if (stat(pathbuf, &sb) != 0) {
+                       if (errno != ENOENT) {
+                               serrno = errno;
+                               openpam_log(PAM_LOG_ERROR, "%s: %m", pathbuf);
+                               errno = serrno;
+                       }
+                       return (-1);
+               }
+               if ((sb.st_uid != root && sb.st_uid != arbitrator) ||
+                   (sb.st_mode & (S_IWGRP|S_IWOTH)) != 0) {
+                       openpam_log(PAM_LOG_ERROR,
+                           "%s: insecure ownership or permissions", pathbuf);
+                       errno = EPERM;
+                       return (-1);
+               }
+               while (--len > 0 && pathbuf[len] != '/')
+                       pathbuf[len] = '\0';
+       }
+       return (0);
+}
+
+/*
+ * NOPARSE
+ */
index f9197ad..d395565 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2001-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_configure.c 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam_configure.c 500 2011-11-22 12:07:03Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <ctype.h>
 #include <errno.h>
 #include <stdio.h>
 #include <security/pam_appl.h>
 
 #include "openpam_impl.h"
+#include "openpam_strlcmp.h"
 
-const char *_pam_facility_name[PAM_NUM_FACILITIES] = {
-       [PAM_ACCOUNT]           = "account",
-       [PAM_AUTH]              = "auth",
-       [PAM_PASSWORD]          = "password",
-       [PAM_SESSION]           = "session",
-};
+static int openpam_load_chain(pam_handle_t *, const char *, pam_facility_t);
 
-const char *_pam_control_flag_name[PAM_NUM_CONTROL_FLAGS] = {
-       [PAM_BINDING]           = "binding",
-       [PAM_OPTIONAL]          = "optional",
-       [PAM_REQUIRED]          = "required",
-       [PAM_REQUISITE]         = "requisite",
-       [PAM_SUFFICIENT]        = "sufficient",
-};
+/*
+ * Evaluates to non-zero if the argument is a linear whitespace character.
+ */
+#define is_lws(ch)                             \
+       (ch == ' ' || ch == '\t')
 
-static int openpam_load_chain(pam_handle_t *, const char *, pam_facility_t);
+/*
+ * Evaluates to non-zero if the argument is a printable ASCII character.
+ * Assumes that the execution character set is a superset of ASCII.
+ */
+#define is_p(ch) \
+       (ch >= '!' && ch <= '~')
+
+/*
+ * Returns non-zero if the argument belongs to the POSIX Portable Filename
+ * Character Set.  Assumes that the execution character set is a superset
+ * of ASCII.
+ */
+#define is_pfcs(ch)                            \
+       ((ch >= '0' && ch <= '9') ||            \
+        (ch >= 'A' && ch <= 'Z') ||            \
+        (ch >= 'a' && ch <= 'z') ||            \
+        ch == '.' || ch == '_' || ch == '-')
 
 /*
- * Matches a word against the first one in a string.
- * Returns non-zero if they match.
+ * Parse the service name.
+ *
+ * Returns the length of the service name, or 0 if the end of the string
+ * was reached or a disallowed non-whitespace character was encountered.
+ *
+ * If parse_service_name() is successful, it updates *service to point to
+ * the first character of the service name and *line to point one
+ * character past the end.  If it reaches the end of the string, it
+ * updates *line to point to the terminating NUL character and leaves
+ * *service unmodified.  In all other cases, it leaves both *line and
+ * *service unmodified.
+ *
+ * Allowed characters are all characters in the POSIX portable filename
+ * character set.
  */
 static int
-match_word(const char *str, const char *word)
+parse_service_name(char **line, char **service)
 {
+       char *b, *e;
 
-       while (*str && tolower(*str) == tolower(*word))
-               ++str, ++word;
-       return (*str == ' ' && *word == '\0');
+       for (b = *line; *b && is_lws(*b); ++b)
+               /* nothing */ ;
+       if (!*b) {
+               *line = b;
+               return (0);
+       }
+       for (e = b; *e && !is_lws(*e); ++e)
+               if (!is_pfcs(*e))
+                       return (0);
+       if (e == b)
+               return (0);
+       *line = e;
+       *service = b;
+       return (e - b);
 }
 
 /*
- * Return a pointer to the next word (or the final NUL) in a string.
+ * Parse the facility name.
+ *
+ * Returns the corresponding pam_facility_t value, or -1 if the end of the
+ * string was reached, a disallowed non-whitespace character was
+ * encountered, or the first word was not a recognized facility name.
+ *
+ * If parse_facility_name() is successful, it updates *line to point one
+ * character past the end of the facility name.  If it reaches the end of
+ * the string, it updates *line to point to the terminating NUL character.
+ * In all other cases, it leaves *line unmodified.
  */
-static const char *
-next_word(const char *str)
+static pam_facility_t
+parse_facility_name(char **line)
 {
+       char *b, *e;
+       int i;
 
-       /* skip current word */
-       while (*str && *str != ' ')
-               ++str;
-       /* skip whitespace */
-       while (*str == ' ')
-               ++str;
-       return (str);
+       for (b = *line; *b && is_lws(*b); ++b)
+               /* nothing */ ;
+       if (!*b) {
+               *line = b;
+               return ((pam_facility_t)-1);
+       }
+       for (e = b; *e && !is_lws(*e); ++e)
+               /* nothing */ ;
+       if (e == b)
+               return ((pam_facility_t)-1);
+       for (i = 0; i < PAM_NUM_FACILITIES; ++i)
+               if (strlcmp(pam_facility_name[i], b, e - b) == 0)
+                       break;
+       if (i == PAM_NUM_FACILITIES)
+               return ((pam_facility_t)-1);
+       *line = e;
+       return (i);
 }
 
 /*
- * Return a malloc()ed copy of the first word in a string.
+ * Parse the word "include".
+ *
+ * If the next word on the line is "include", parse_include() updates
+ * *line to point one character past "include" and returns 1.  Otherwise,
+ * it leaves *line unmodified and returns 0.
+ */
+static int
+parse_include(char **line)
+{
+       char *b, *e;
+
+       for (b = *line; *b && is_lws(*b); ++b)
+               /* nothing */ ;
+       if (!*b) {
+               *line = b;
+               return (-1);
+       }
+       for (e = b; *e && !is_lws(*e); ++e)
+               /* nothing */ ;
+       if (e == b)
+               return (0);
+       if (strlcmp("include", b, e - b) != 0)
+               return (0);
+       *line = e;
+       return (1);
+}
+
+/*
+ * Parse the control flag.
+ *
+ * Returns the corresponding pam_control_t value, or -1 if the end of the
+ * string was reached, a disallowed non-whitespace character was
+ * encountered, or the first word was not a recognized control flag.
+ *
+ * If parse_control_flag() is successful, it updates *line to point one
+ * character past the end of the control flag.  If it reaches the end of
+ * the string, it updates *line to point to the terminating NUL character.
+ * In all other cases, it leaves *line unmodified.
+ */
+static pam_control_t
+parse_control_flag(char **line)
+{
+       char *b, *e;
+       int i;
+
+       for (b = *line; *b && is_lws(*b); ++b)
+               /* nothing */ ;
+       if (!*b) {
+               *line = b;
+               return ((pam_control_t)-1);
+       }
+       for (e = b; *e && !is_lws(*e); ++e)
+               /* nothing */ ;
+       if (e == b)
+               return ((pam_control_t)-1);
+       for (i = 0; i < PAM_NUM_CONTROL_FLAGS; ++i)
+               if (strlcmp(pam_control_flag_name[i], b, e - b) == 0)
+                       break;
+       if (i == PAM_NUM_CONTROL_FLAGS)
+               return ((pam_control_t)-1);
+       *line = e;
+       return (i);
+}
+
+/*
+ * Parse a file name.
+ *
+ * Returns the length of the file name, or 0 if the end of the string was
+ * reached or a disallowed non-whitespace character was encountered.
+ *
+ * If parse_filename() is successful, it updates *filename to point to the
+ * first character of the filename and *line to point one character past
+ * the end.  If it reaches the end of the string, it updates *line to
+ * point to the terminating NUL character and leaves *filename unmodified.
+ * In all other cases, it leaves both *line and *filename unmodified.
+ *
+ * Allowed characters are all characters in the POSIX portable filename
+ * character set, plus the path separator (forward slash).
+ */
+static int
+parse_filename(char **line, char **filename)
+{
+       char *b, *e;
+
+       for (b = *line; *b && is_lws(*b); ++b)
+               /* nothing */ ;
+       if (!*b) {
+               *line = b;
+               return (0);
+       }
+       for (e = b; *e && !is_lws(*e); ++e)
+               if (!is_pfcs(*e) && *e != '/')
+                       return (0);
+       if (e == b)
+               return (0);
+       *line = e;
+       *filename = b;
+       return (e - b);
+}
+
+/*
+ * Parse an option.
+ *
+ * Returns a dynamically allocated string containing the next module
+ * option, or NULL if the end of the string was reached or a disallowed
+ * non-whitespace character was encountered.
+ *
+ * If parse_option() is successful, it updates *line to point one
+ * character past the end of the option.  If it reaches the end of the
+ * string, it updates *line to point to the terminating NUL character.  In
+ * all other cases, it leaves *line unmodified.
+ *
+ * If parse_option() fails to allocate memory, it will return NULL and set
+ * errno to a non-zero value.
+ *
+ * Allowed characters for option names are all characters in the POSIX
+ * portable filename character set.  Allowed characters for option values
+ * are any printable non-whitespace characters.  The option value may be
+ * quoted in either single or double quotes, in which case space
+ * characters and whichever quote character was not used are allowed.
+ * Note that the entire value must be quoted, not just part of it.
  */
 static char *
-dup_word(const char *str)
+parse_option(char **line)
 {
-       const char *end;
-       char *word;
+       char *nb, *ne, *vb, *ve;
+       unsigned char q = 0;
+       char *option;
+       size_t size;
 
-       for (end = str; *end && *end != ' '; ++end)
+       errno = 0;
+       for (nb = *line; *nb && is_lws(*nb); ++nb)
                /* nothing */ ;
-       if (asprintf(&word, "%.*s", (int)(end - str), str) < 0)
+       if (!*nb) {
+               *line = nb;
+               return (NULL);
+       }
+       for (ne = nb; *ne && !is_lws(*ne) && *ne != '='; ++ne)
+               if (!is_pfcs(*ne))
+                       return (NULL);
+       if (ne == nb)
+               return (NULL);
+       if (*ne == '=') {
+               vb = ne + 1;
+               if (*vb == '"' || *vb == '\'')
+                       q = *vb++;
+               for (ve = vb;
+                    *ve && *ve != q && (is_p(*ve) || (q && is_lws(*ve)));
+                    ++ve)
+                       /* nothing */ ;
+               if (q && *ve != q)
+                       /* non-printable character or missing endquote */
+                       return (NULL);
+               if (q && *(ve + 1) && !is_lws(*(ve + 1)))
+                       /* garbage after value */
+                       return (NULL);
+       } else {
+               vb = ve = ne;
+       }
+       size = (ne - nb) + 1;
+       if (ve > vb)
+               size += (ve - vb) + 1;
+       if ((option = malloc(size)) == NULL)
                return (NULL);
-       return (word);
+       strncpy(option, nb, ne - nb);
+       if (ve > vb) {
+               option[ne - nb] = '=';
+               strncpy(option + (ne - nb) + 1, vb, ve - vb);
+       }
+       option[size - 1] = '\0';
+       *line = q ? ve + 1 : ve;
+       return (option);
 }
 
 /*
- * Return the length of the first word in a string.
+ * Consume trailing whitespace.
+ *
+ * If there are no non-whitespace characters left on the line, parse_eol()
+ * updates *line to point at the terminating NUL character and returns 0.
+ * Otherwise, it leaves *line unmodified and returns a non-zero value.
  */
 static int
-wordlen(const char *str)
+parse_eol(char **line)
 {
-       int i;
+       char *p;
 
-       for (i = 0; str[i] && str[i] != ' '; ++i)
+       for (p = *line; *p && is_lws(*p); ++p)
                /* nothing */ ;
-       return (i);
+       if (*p)
+               return ((unsigned char)*p);
+       *line = p;
+       return (0);
 }
 
 typedef enum { pam_conf_style, pam_d_style } openpam_style_t;
@@ -126,126 +351,139 @@ typedef enum { pam_conf_style, pam_d_style } openpam_style_t;
  * Extracts given chains from a policy file.
  */
 static int
-openpam_read_chain(pam_handle_t *pamh,
+openpam_parse_chain(pam_handle_t *pamh,
        const char *service,
        pam_facility_t facility,
        const char *filename,
        openpam_style_t style)
 {
        pam_chain_t *this, **next;
-       const char *p, *q;
-       int count, i, lineno, ret;
        pam_facility_t fclt;
        pam_control_t ctlf;
-       char *line, *name;
+       char *line, *str, *name;
+       char *option, **optv;
+       int len, lineno, ret;
        FILE *f;
 
        if ((f = fopen(filename, "r")) == NULL) {
                openpam_log(errno == ENOENT ? PAM_LOG_DEBUG : PAM_LOG_NOTICE,
                    "%s: %m", filename);
-               return (0);
+               return (PAM_SUCCESS);
+       }
+       if (openpam_check_desc_owner_perms(filename, fileno(f)) != 0) {
+               fclose(f);
+               return (PAM_SYSTEM_ERR);
        }
        this = NULL;
-       count = lineno = 0;
+       name = NULL;
+       lineno = 0;
        while ((line = openpam_readline(f, &lineno, NULL)) != NULL) {
-               p = line;
-
-               /* match service name */
+               /* get service name if necessary */
                if (style == pam_conf_style) {
-                       if (!match_word(p, service)) {
+                       if ((len = parse_service_name(&line, &str)) == 0) {
+                               openpam_log(PAM_LOG_NOTICE,
+                                   "%s(%d): invalid service name (ignored)",
+                                   filename, lineno);
+                               FREE(line);
+                               continue;
+                       }
+                       if (strlcmp(service, str, len) != 0) {
                                FREE(line);
                                continue;
                        }
-                       p = next_word(p);
                }
 
-               /* match facility name */
-               for (fclt = 0; fclt < PAM_NUM_FACILITIES; ++fclt)
-                       if (match_word(p, _pam_facility_name[fclt]))
-                               break;
-               if (fclt == PAM_NUM_FACILITIES) {
-                       openpam_log(PAM_LOG_NOTICE,
-                           "%s(%d): invalid facility '%.*s' (ignored)",
-                           filename, lineno, wordlen(p), p);
+               /* get facility name */
+               if ((fclt = parse_facility_name(&line)) == (pam_facility_t)-1) {
+                       openpam_log(PAM_LOG_ERROR,
+                           "%s(%d): missing or invalid facility",
+                           filename, lineno);
                        goto fail;
                }
                if (facility != fclt && facility != PAM_FACILITY_ANY) {
                        FREE(line);
                        continue;
                }
-               p = next_word(p);
 
-               /* include other chain */
-               if (match_word(p, "include")) {
-                       p = next_word(p);
-                       if (*next_word(p) != '\0')
-                               openpam_log(PAM_LOG_NOTICE,
-                                   "%s(%d): garbage at end of 'include' line",
+               /* check for "include" */
+               if (parse_include(&line)) {
+                       if ((len = parse_service_name(&line, &str)) == 0) {
+                               openpam_log(PAM_LOG_ERROR,
+                                   "%s(%d): missing or invalid filename",
                                    filename, lineno);
-                       if ((name = dup_word(p)) == NULL)
+                               goto fail;
+                       }
+                       if ((name = strndup(str, len)) == NULL)
                                goto syserr;
+                       if (parse_eol(&line) != 0) {
+                               openpam_log(PAM_LOG_ERROR,
+                                   "%s(%d): garbage at end of line",
+                                   filename, lineno);
+                               goto fail;
+                       }
                        ret = openpam_load_chain(pamh, name, fclt);
                        FREE(name);
-                       if (ret < 0)
+                       if (ret != PAM_SUCCESS)
                                goto fail;
-                       count += ret;
                        FREE(line);
                        continue;
                }
 
-               /* allocate new entry */
-               if ((this = calloc(1, sizeof *this)) == NULL)
-                       goto syserr;
+               /* get control flag */
+               if ((ctlf = parse_control_flag(&line)) == (pam_control_t)-1) {
+                       openpam_log(PAM_LOG_ERROR,
+                           "%s(%d): missing or invalid control flag",
+                           filename, lineno);
+                       goto fail;
+               }
 
-               /* control flag */
-               for (ctlf = 0; ctlf < PAM_NUM_CONTROL_FLAGS; ++ctlf)
-                       if (match_word(p, _pam_control_flag_name[ctlf]))
-                               break;
-               if (ctlf == PAM_NUM_CONTROL_FLAGS) {
+               /* get module name */
+               if ((len = parse_filename(&line, &str)) == 0) {
                        openpam_log(PAM_LOG_ERROR,
-                           "%s(%d): invalid control flag '%.*s'",
-                           filename, lineno, wordlen(p), p);
+                           "%s(%d): missing or invalid module name",
+                           filename, lineno);
                        goto fail;
                }
+               if ((name = strndup(str, len)) == NULL)
+                       goto syserr;
+
+               /* allocate new entry */
+               if ((this = calloc(1, sizeof *this)) == NULL)
+                       goto syserr;
                this->flag = ctlf;
 
-               /* module name */
-               p = next_word(p);
-               if (*p == '\0') {
+               /* get module options */
+               if ((this->optv = malloc(sizeof *optv)) == NULL)
+                       goto syserr;
+               this->optc = 0;
+               while ((option = parse_option(&line)) != NULL) {
+                       optv = realloc(this->optv,
+                           (this->optc + 2) * sizeof *optv);
+                       if (optv == NULL)
+                               goto syserr;
+                       this->optv = optv;
+                       this->optv[this->optc++] = option;
+               }
+               this->optv[this->optc] = NULL;
+               if (*line != '\0') {
                        openpam_log(PAM_LOG_ERROR,
-                           "%s(%d): missing module name",
+                           "%s(%d): syntax error in module options",
                            filename, lineno);
                        goto fail;
                }
-               if ((name = dup_word(p)) == NULL)
-                       goto syserr;
+
+               /* load module */
                this->module = openpam_load_module(name);
                FREE(name);
                if (this->module == NULL)
                        goto fail;
 
-               /* module options */
-               p = q = next_word(p);
-               while (*q != '\0') {
-                       ++this->optc;
-                       q = next_word(q);
-               }
-               this->optv = calloc(this->optc + 1, sizeof(char *));
-               if (this->optv == NULL)
-                       goto syserr;
-               for (i = 0; i < this->optc; ++i) {
-                       if ((this->optv[i] = dup_word(p)) == NULL)
-                               goto syserr;
-                       p = next_word(p);
-               }
-
                /* hook it up */
                for (next = &pamh->chains[fclt]; *next != NULL;
                     next = &(*next)->next)
                        /* nothing */ ;
                *next = this;
                this = NULL;
-               ++count;
 
                /* next please... */
                FREE(line);
@@ -253,14 +491,20 @@ openpam_read_chain(pam_handle_t *pamh,
        if (!feof(f))
                goto syserr;
        fclose(f);
-       return (count);
- syserr:
+       return (PAM_SUCCESS);
+syserr:
        openpam_log(PAM_LOG_ERROR, "%s: %m", filename);
- fail:
+fail:
+       if (this && this->optc) {
+               while (this->optc--)
+                       FREE(this->optv[this->optc]);
+               FREE(this->optv);
+       }
        FREE(this);
        FREE(line);
+       FREE(name);
        fclose(f);
-       return (-1);
+       return (PAM_SYSTEM_ERR);
 }
 
 static const char *openpam_policy_path[] = {
@@ -283,26 +527,26 @@ openpam_load_chain(pam_handle_t *pamh,
        const char **path;
        char *filename;
        size_t len;
-       int r;
+       int ret;
 
        for (path = openpam_policy_path; *path != NULL; ++path) {
                len = strlen(*path);
                if ((*path)[len - 1] == '/') {
                        if (asprintf(&filename, "%s%s", *path, service) < 0) {
                                openpam_log(PAM_LOG_ERROR, "asprintf(): %m");
-                               return (-PAM_BUF_ERR);
+                               return (PAM_BUF_ERR);
                        }
-                       r = openpam_read_chain(pamh, service, facility,
+                       ret = openpam_parse_chain(pamh, service, facility,
                            filename, pam_d_style);
                        FREE(filename);
                } else {
-                       r = openpam_read_chain(pamh, service, facility,
+                       ret = openpam_parse_chain(pamh, service, facility,
                            *path, pam_conf_style);
                }
-               if (r != 0)
-                       return (r);
+               if (ret != PAM_SUCCESS)
+                       return (ret);
        }
-       return (0);
+       return (PAM_SUCCESS);
 }
 
 /*
@@ -316,18 +560,23 @@ openpam_configure(pam_handle_t *pamh,
        const char *service)
 {
        pam_facility_t fclt;
+       const char *p;
+
+       for (p = service; *p; ++p)
+               if (!is_pfcs(*p))
+                       return (PAM_SYSTEM_ERR);
 
-       if (openpam_load_chain(pamh, service, PAM_FACILITY_ANY) < 0)
+       if (openpam_load_chain(pamh, service, PAM_FACILITY_ANY) != PAM_SUCCESS)
                goto load_err;
 
        for (fclt = 0; fclt < PAM_NUM_FACILITIES; ++fclt) {
                if (pamh->chains[fclt] != NULL)
                        continue;
-               if (openpam_load_chain(pamh, PAM_OTHER, fclt) < 0)
+               if (openpam_load_chain(pamh, PAM_OTHER, fclt) != PAM_SUCCESS)
                        goto load_err;
        }
        return (PAM_SUCCESS);
- load_err:
+load_err:
        openpam_clear_chains(pamh->chains);
        return (PAM_SYSTEM_ERR);
 }
similarity index 52%
copy from contrib/openpam/lib/openpam_load.c
copy to contrib/openpam/lib/openpam_constants.c
index 303f3f5..833e81f 100644 (file)
@@ -1,6 +1,6 @@
 /*-
- * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2001-2003 Networks Associates Technology, Inc.
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_load.c 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam_constants.c 491 2011-11-12 00:12:32Z des $
  */
 
-#include <dlfcn.h>
-#include <stdlib.h>
-#include <string.h>
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
 
 #include <security/pam_appl.h>
 
 #include "openpam_impl.h"
 
-const char *_pam_func_name[PAM_NUM_PRIMITIVES] = {
+const char *pam_err_name[PAM_NUM_ERRORS] = {
+       "PAM_SUCCESS",
+       "PAM_OPEN_ERR",
+       "PAM_SYMBOL_ERR",
+       "PAM_SERVICE_ERR",
+       "PAM_SYSTEM_ERR",
+       "PAM_BUF_ERR",
+       "PAM_CONV_ERR",
+       "PAM_PERM_DENIED",
+       "PAM_MAXTRIES",
+       "PAM_AUTH_ERR",
+       "PAM_NEW_AUTHTOK_REQD",
+       "PAM_CRED_INSUFFICIENT",
+       "PAM_AUTHINFO_UNAVAIL",
+       "PAM_USER_UNKNOWN",
+       "PAM_CRED_UNAVAIL",
+       "PAM_CRED_EXPIRED",
+       "PAM_CRED_ERR",
+       "PAM_ACCT_EXPIRED",
+       "PAM_AUTHTOK_EXPIRED",
+       "PAM_SESSION_ERR",
+       "PAM_AUTHTOK_ERR",
+       "PAM_AUTHTOK_RECOVERY_ERR",
+       "PAM_AUTHTOK_LOCK_BUSY",
+       "PAM_AUTHTOK_DISABLE_AGING",
+       "PAM_NO_MODULE_DATA",
+       "PAM_IGNORE",
+       "PAM_ABORT",
+       "PAM_TRY_AGAIN",
+       "PAM_MODULE_UNKNOWN",
+       "PAM_DOMAIN_UNKNOWN"
+};
+
+const char *pam_item_name[PAM_NUM_ITEMS] = {
+       "(NO ITEM)",
+       "PAM_SERVICE",
+       "PAM_USER",
+       "PAM_TTY",
+       "PAM_RHOST",
+       "PAM_CONV",
+       "PAM_AUTHTOK",
+       "PAM_OLDAUTHTOK",
+       "PAM_RUSER",
+       "PAM_USER_PROMPT",
+       "PAM_REPOSITORY",
+       "PAM_AUTHTOK_PROMPT",
+       "PAM_OLDAUTHTOK_PROMPT",
+       "PAM_HOST",
+};
+
+const char *pam_facility_name[PAM_NUM_FACILITIES] = {
+       [PAM_ACCOUNT]           = "account",
+       [PAM_AUTH]              = "auth",
+       [PAM_PASSWORD]          = "password",
+       [PAM_SESSION]           = "session",
+};
+
+const char *pam_control_flag_name[PAM_NUM_CONTROL_FLAGS] = {
+       [PAM_BINDING]           = "binding",
+       [PAM_OPTIONAL]          = "optional",
+       [PAM_REQUIRED]          = "required",
+       [PAM_REQUISITE]         = "requisite",
+       [PAM_SUFFICIENT]        = "sufficient",
+};
+
+const char *pam_func_name[PAM_NUM_PRIMITIVES] = {
        "pam_authenticate",
        "pam_setcred",
        "pam_acct_mgmt",
@@ -52,7 +117,7 @@ const char *_pam_func_name[PAM_NUM_PRIMITIVES] = {
        "pam_chauthtok"
 };
 
-const char *_pam_sm_func_name[PAM_NUM_PRIMITIVES] = {
+const char *pam_sm_func_name[PAM_NUM_PRIMITIVES] = {
        "pam_sm_authenticate",
        "pam_sm_setcred",
        "pam_sm_acct_mgmt",
@@ -60,94 +125,3 @@ const char *_pam_sm_func_name[PAM_NUM_PRIMITIVES] = {
        "pam_sm_close_session",
        "pam_sm_chauthtok"
 };
-
-/*
- * Locate a matching dynamic or static module.
- */
-
-pam_module_t *
-openpam_load_module(const char *path)
-{
-       pam_module_t *module;
-
-       module = openpam_dynamic(path);
-       openpam_log(PAM_LOG_DEBUG, "%s dynamic %s",
-           (module == NULL) ? "no" : "using", path);
-
-#ifdef OPENPAM_STATIC_MODULES
-       /* look for a static module */
-       if (module == NULL && strchr(path, '/') == NULL) {
-               module = openpam_static(path);
-               openpam_log(PAM_LOG_DEBUG, "%s static %s",
-                   (module == NULL) ? "no" : "using", path);
-       }
-#endif
-       if (module == NULL) {
-               openpam_log(PAM_LOG_ERROR, "no %s found", path);
-               return (NULL);
-       }
-       return (module);
-}
-
-
-/*
- * Release a module.
- * XXX highly thread-unsafe
- */
-
-static void
-openpam_release_module(pam_module_t *module)
-{
-       if (module == NULL)
-               return;
-       if (module->dlh == NULL)
-               /* static module */
-               return;
-       dlclose(module->dlh);
-       openpam_log(PAM_LOG_DEBUG, "releasing %s", module->path);
-       FREE(module->path);
-       FREE(module);
-}
-
-
-/*
- * Destroy a chain, freeing all its links and releasing the modules
- * they point to.
- */
-
-static void
-openpam_destroy_chain(pam_chain_t *chain)
-{
-       if (chain == NULL)
-               return;
-       openpam_destroy_chain(chain->next);
-       chain->next = NULL;
-       while (chain->optc) {
-               --chain->optc;
-               FREE(chain->optv[chain->optc]);
-       }
-       FREE(chain->optv);
-       openpam_release_module(chain->module);
-       chain->module = NULL;
-       FREE(chain);
-}
-
-
-/*
- * Clear the chains and release the modules
- */
-
-void
-openpam_clear_chains(pam_chain_t *policy[])
-{
-       int i;
-
-       for (i = 0; i < PAM_NUM_FACILITIES; ++i) {
-               openpam_destroy_chain(policy[i]);
-               policy[i] = NULL;
-       }
-}
-
-/*
- * NOPARSE
- */
@@ -1,24 +1,16 @@
 /*-
- * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
- * This software was developed for the FreeBSD Project by ThinkSec AS and
- * Network Associates Laboratories, the Security Research Division of
- * Network Associates, Inc.  under DARPA/SPAWAR contract N66001-01-C-8035
- * ("CBOSS"), as part of the DARPA CHATS research program.
- *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
+ *    notice, this list of conditions and the following disclaimer
+ *    in this position and unchanged.
  * 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.
  *
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_version.h 409 2007-12-21 11:38:50Z des $
+ * $Id: openpam_constants.h 491 2011-11-12 00:12:32Z des $
  */
 
-#ifndef SECURITY_OPENPAM_VERSION_H_INCLUDED
-#define SECURITY_OPENPAM_VERSION_H_INCLUDED
+#ifndef OPENPAM_CONSTANTS_INCLUDED
+#define OPENPAM_CONSTANTS_INCLUDED
 
-#define OPENPAM
-#define OPENPAM_VERSION        20071221
-#define OPENPAM_RELEASE        "Hydrangea"
+extern const char *pam_err_name[PAM_NUM_ERRORS];
+extern const char *pam_item_name[PAM_NUM_ITEMS];
+extern const char *pam_facility_name[PAM_NUM_FACILITIES];
+extern const char *pam_control_flag_name[PAM_NUM_CONTROL_FLAGS];
+extern const char *pam_func_name[PAM_NUM_PRIMITIVES];
+extern const char *pam_sm_func_name[PAM_NUM_PRIMITIVES];
 
-#endif /* !SECURITY_OPENPAM_VERSION_H_INCLUDED */
+#endif
diff --git a/contrib/openpam/lib/openpam_debug.h b/contrib/openpam/lib/openpam_debug.h
new file mode 100644 (file)
index 0000000..ef2884d
--- /dev/null
@@ -0,0 +1,103 @@
+/*-
+ * Copyright (c) 2001-2003 Networks Associates Technology, Inc.
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
+ * All rights reserved.
+ *
+ * This software was developed for the FreeBSD Project by ThinkSec AS and
+ * Network Associates Laboratories, the Security Research Division of
+ * Network Associates, Inc.  under DARPA/SPAWAR contract N66001-01-C-8035
+ * ("CBOSS"), as part of the DARPA CHATS research program.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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.
+ *
+ * $Id: openpam_debug.h 491 2011-11-12 00:12:32Z des $
+ */
+
+#ifndef OPENPAM_DEBUG_INCLUDED
+#define OPENPAM_DEBUG_INCLUDED
+
+#ifdef OPENPAM_DEBUG
+#define ENTER() openpam_log(PAM_LOG_DEBUG, "entering")
+#define ENTERI(i) do { \
+       int i_ = (i); \
+       if (i_ > 0 && i_ < PAM_NUM_ITEMS) \
+               openpam_log(PAM_LOG_DEBUG, "entering: %s", pam_item_name[i_]); \
+       else \
+               openpam_log(PAM_LOG_DEBUG, "entering: %d", i_); \
+} while (0)
+#define ENTERN(n) do { \
+       int n_ = (n); \
+       openpam_log(PAM_LOG_DEBUG, "entering: %d", n_); \
+} while (0)
+#define ENTERS(s) do { \
+       const char *s_ = (s); \
+       if (s_ == NULL) \
+               openpam_log(PAM_LOG_DEBUG, "entering: NULL"); \
+       else \
+               openpam_log(PAM_LOG_DEBUG, "entering: '%s'", s_); \
+} while (0)
+#define        RETURNV() openpam_log(PAM_LOG_DEBUG, "returning")
+#define RETURNC(c) do { \
+       int c_ = (c); \
+       if (c_ >= 0 && c_ < PAM_NUM_ERRORS) \
+               openpam_log(PAM_LOG_DEBUG, "returning %s", pam_err_name[c_]); \
+       else \
+               openpam_log(PAM_LOG_DEBUG, "returning %d!", c_); \
+       return (c_); \
+} while (0)
+#define        RETURNN(n) do { \
+       int n_ = (n); \
+       openpam_log(PAM_LOG_DEBUG, "returning %d", n_); \
+       return (n_); \
+} while (0)
+#define        RETURNP(p) do { \
+       const void *p_ = (p); \
+       if (p_ == NULL) \
+               openpam_log(PAM_LOG_DEBUG, "returning NULL"); \
+       else \
+               openpam_log(PAM_LOG_DEBUG, "returning %p", p_); \
+       return (p_); \
+} while (0)
+#define        RETURNS(s) do { \
+       const char *s_ = (s); \
+       if (s_ == NULL) \
+               openpam_log(PAM_LOG_DEBUG, "returning NULL"); \
+       else \
+               openpam_log(PAM_LOG_DEBUG, "returning '%s'", s_); \
+       return (s_); \
+} while (0)
+#else
+#define ENTER()
+#define ENTERI(i)
+#define ENTERN(n)
+#define ENTERS(s)
+#define RETURNV() return
+#define RETURNC(c) return (c)
+#define RETURNN(n) return (n)
+#define RETURNP(p) return (p)
+#define RETURNS(s) return (s)
+#endif
+
+#endif
index 69fe472..54dfd3b 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_dispatch.c 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam_dispatch.c 501 2011-12-07 01:28:05Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
@@ -42,9 +46,9 @@
 #include "openpam_impl.h"
 
 #if !defined(OPENPAM_RELAX_CHECKS)
-static void _openpam_check_error_code(int, int);
+static void openpam_check_error_code(int, int);
 #else
-#define _openpam_check_error_code(a, b)
+#define openpam_check_error_code(a, b)
 #endif /* !defined(OPENPAM_RELAX_CHECKS) */
 
 /*
@@ -60,9 +64,7 @@ openpam_dispatch(pam_handle_t *pamh,
 {
        pam_chain_t *chain;
        int err, fail, r;
-#ifdef DEBUG
        int debug;
-#endif
 
        ENTER();
        if (pamh == NULL)
@@ -72,9 +74,9 @@ openpam_dispatch(pam_handle_t *pamh,
        if (pamh->current != NULL) {
                openpam_log(PAM_LOG_ERROR,
                    "%s() called while %s::%s() is in progress",
-                   _pam_func_name[primitive],
+                   pam_func_name[primitive],
                    pamh->current->module->path,
-                   _pam_sm_func_name[pamh->primitive]);
+                   pam_sm_func_name[pamh->primitive]);
                RETURNC(PAM_ABORT);
        }
 
@@ -102,28 +104,24 @@ openpam_dispatch(pam_handle_t *pamh,
        for (err = fail = 0; chain != NULL; chain = chain->next) {
                if (chain->module->func[primitive] == NULL) {
                        openpam_log(PAM_LOG_ERROR, "%s: no %s()",
-                           chain->module->path, _pam_sm_func_name[primitive]);
-                       continue;
+                           chain->module->path, pam_sm_func_name[primitive]);
+                       r = PAM_SYSTEM_ERR;
                } else {
                        pamh->primitive = primitive;
                        pamh->current = chain;
-#ifdef DEBUG
                        debug = (openpam_get_option(pamh, "debug") != NULL);
                        if (debug)
-                               ++_openpam_debug;
+                               ++openpam_debug;
                        openpam_log(PAM_LOG_DEBUG, "calling %s() in %s",
-                           _pam_sm_func_name[primitive], chain->module->path);
-#endif
+                           pam_sm_func_name[primitive], chain->module->path);
                        r = (chain->module->func[primitive])(pamh, flags,
                            chain->optc, (const char **)chain->optv);
                        pamh->current = NULL;
-#ifdef DEBUG
                        openpam_log(PAM_LOG_DEBUG, "%s: %s(): %s",
-                           chain->module->path, _pam_sm_func_name[primitive],
+                           chain->module->path, pam_sm_func_name[primitive],
                            pam_strerror(pamh, r));
                        if (debug)
-                               --_openpam_debug;
-#endif
+                               --openpam_debug;
                }
 
                if (r == PAM_IGNORE)
@@ -143,7 +141,7 @@ openpam_dispatch(pam_handle_t *pamh,
                        continue;
                }
 
-               _openpam_check_error_code(primitive, r);
+               openpam_check_error_code(primitive, r);
 
                /*
                 * Record the return code from the first module to
@@ -177,7 +175,7 @@ openpam_dispatch(pam_handle_t *pamh,
 
 #if !defined(OPENPAM_RELAX_CHECKS)
 static void
-_openpam_check_error_code(int primitive, int r)
+openpam_check_error_code(int primitive, int r)
 {
        /* common error codes */
        if (r == PAM_SUCCESS ||
@@ -229,7 +227,7 @@ _openpam_check_error_code(int primitive, int r)
        }
 
        openpam_log(PAM_LOG_ERROR, "%s(): unexpected return value %d",
-           _pam_sm_func_name[primitive], r);
+           pam_sm_func_name[primitive], r);
 }
 #endif /* !defined(OPENPAM_RELAX_CHECKS) */
 
index 084408e..d44174f 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_dynamic.c 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam_dynamic.c 502 2011-12-18 13:59:22Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <dlfcn.h>
+#include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
 
 #include <security/pam_appl.h>
 
 #define RTLD_NOW RTLD_LAZY
 #endif
 
+/*
+ * OpenPAM internal
+ *
+ * Perform sanity checks and attempt to load a module
+ */
+
+static void *
+try_dlopen(const char *modfn)
+{
+
+       if (openpam_check_path_owner_perms(modfn) != 0)
+               return (NULL);
+       return (dlopen(modfn, RTLD_NOW));
+}
+    
 /*
  * OpenPAM internal
  *
 pam_module_t *
 openpam_dynamic(const char *path)
 {
+       const pam_module_t *dlmodule;
        pam_module_t *module;
        const char *prefix;
        char *vpath;
        void *dlh;
-       int i;
+       int i, serrno;
 
        dlh = NULL;
-       if ((module = calloc(1, sizeof *module)) == NULL)
-               goto buf_err;
 
        /* Prepend the standard prefix if not an absolute pathname. */
        if (path[0] != '/')
@@ -75,33 +95,36 @@ openpam_dynamic(const char *path)
 
        /* try versioned module first, then unversioned module */
        if (asprintf(&vpath, "%s%s.%d", prefix, path, LIB_MAJ) < 0)
-               goto buf_err;
-       if ((dlh = dlopen(vpath, RTLD_NOW)) == NULL) {
-               openpam_log(PAM_LOG_DEBUG, "%s: %s", vpath, dlerror());
+               goto err;
+       if ((dlh = try_dlopen(vpath)) == NULL && errno == ENOENT) {
                *strrchr(vpath, '.') = '\0';
-               if ((dlh = dlopen(vpath, RTLD_NOW)) == NULL) {
-                       openpam_log(PAM_LOG_DEBUG, "%s: %s", vpath, dlerror());
-                       FREE(vpath);
-                       FREE(module);
-                       return (NULL);
-               }
+               dlh = try_dlopen(vpath);
        }
+       serrno = errno;
        FREE(vpath);
+       errno = serrno;
+       if (dlh == NULL)
+               goto err;
+       if ((module = calloc(1, sizeof *module)) == NULL)
+               goto buf_err;
        if ((module->path = strdup(path)) == NULL)
                goto buf_err;
        module->dlh = dlh;
+       dlmodule = dlsym(dlh, "_pam_module");
        for (i = 0; i < PAM_NUM_PRIMITIVES; ++i) {
-               module->func[i] = (pam_func_t)dlsym(dlh, _pam_sm_func_name[i]);
+               module->func[i] = dlmodule ? dlmodule->func[i] :
+                   (pam_func_t)dlsym(dlh, pam_sm_func_name[i]);
                if (module->func[i] == NULL)
                        openpam_log(PAM_LOG_DEBUG, "%s: %s(): %s",
-                           path, _pam_sm_func_name[i], dlerror());
+                           path, pam_sm_func_name[i], dlerror());
        }
        return (module);
- buf_err:
-       openpam_log(PAM_LOG_ERROR, "%m");
+buf_err:
        if (dlh != NULL)
                dlclose(dlh);
        FREE(module);
+err:
+       openpam_log(PAM_LOG_ERROR, "%m");
        return (NULL);
 }
 
index d78e147..b833ec9 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_findenv.c 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam_findenv.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <string.h>
 
 #include <security/pam_appl.h>
index e071c0a..561687c 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_free_data.c 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam_free_data.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <stdlib.h>
 #include <string.h>
 
index 346c2dd..14754dc 100644 (file)
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2005 Dag-Erling Coïdan Smørgrav
+ * Copyright (c) 2005-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $Id: openpam_free_envlist.c 320 2006-02-16 20:33:19Z des $
+ * $Id: openpam_free_envlist.c 447 2011-10-22 02:47:36Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <stdlib.h>
 
 #include <security/pam_appl.h>
@@ -63,4 +67,6 @@ openpam_free_envlist(char **envlist)
  * frees all the environment variables in an environment list, and the
  * list itself.
  * It is suitable for freeing the return value from =pam_getenvlist.
+ *
+ * AUTHOR DES
  */
index 73bc070..b5faa87 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_get_option.c 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam_get_option.c 482 2011-11-03 16:33:02Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <string.h>
index 7704d4e..ba4d455 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2001-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_impl.h 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam_impl.h 499 2011-11-22 11:51:50Z des $
  */
 
-#ifndef _OPENPAM_IMPL_H_INCLUDED
-#define _OPENPAM_IMPL_H_INCLUDED
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#ifndef OPENPAM_IMPL_H_INCLUDED
+#define OPENPAM_IMPL_H_INCLUDED
 
 #include <security/openpam.h>
 
-extern const char *_pam_func_name[PAM_NUM_PRIMITIVES];
-extern const char *_pam_sm_func_name[PAM_NUM_PRIMITIVES];
-extern const char *_pam_err_name[PAM_NUM_ERRORS];
-extern const char *_pam_item_name[PAM_NUM_ITEMS];
-
-extern int _openpam_debug;
+extern int openpam_debug;
 
 /*
  * Control flags
@@ -75,6 +66,9 @@ typedef enum {
        PAM_NUM_FACILITIES
 } pam_facility_t;
 
+/*
+ * Module chains
+ */
 typedef struct pam_chain pam_chain_t;
 struct pam_chain {
        pam_module_t    *module;
@@ -84,6 +78,21 @@ struct pam_chain {
        pam_chain_t     *next;
 };
 
+/*
+ * Service policies
+ */
+#if defined(OPENPAM_EMBEDDED)
+typedef struct pam_policy pam_policy_t;
+struct pam_policy {
+       const char      *service;
+       pam_chain_t     *chains[PAM_NUM_FACILITIES];
+};
+extern pam_policy_t *pam_embedded_policies[];
+#endif
+
+/*
+ * Module-specific data
+ */
 typedef struct pam_data pam_data_t;
 struct pam_data {
        char            *name;
@@ -92,6 +101,9 @@ struct pam_data {
        pam_data_t      *next;
 };
 
+/*
+ * PAM context
+ */
 struct pam_handle {
        char            *service;
 
@@ -111,6 +123,9 @@ struct pam_handle {
 };
 
 #ifdef NGROUPS_MAX
+/*
+ * Saved credentials
+ */
 #define PAM_SAVED_CRED "pam_saved_cred"
 struct pam_saved_cred {
        uid_t    euid;
@@ -120,14 +135,23 @@ struct pam_saved_cred {
 };
 #endif
 
+/*
+ * Default policy
+ */
 #define PAM_OTHER      "other"
 
+/*
+ * Internal functions
+ */
 int             openpam_configure(pam_handle_t *, const char *);
 int             openpam_dispatch(pam_handle_t *, int, int);
 int             openpam_findenv(pam_handle_t *, const char *, size_t);
 pam_module_t   *openpam_load_module(const char *);
 void            openpam_clear_chains(pam_chain_t **);
 
+int             openpam_check_desc_owner_perms(const char *, int);
+int             openpam_check_path_owner_perms(const char *);
+
 #ifdef OPENPAM_STATIC_MODULES
 pam_module_t   *openpam_static(const char *);
 #endif
@@ -135,66 +159,7 @@ pam_module_t       *openpam_dynamic(const char *);
 
 #define        FREE(p) do { free((p)); (p) = NULL; } while (0)
 
-#ifdef DEBUG
-#define ENTER() openpam_log(PAM_LOG_DEBUG, "entering")
-#define ENTERI(i) do { \
-       int _i = (i); \
-       if (_i > 0 && _i < PAM_NUM_ITEMS) \
-               openpam_log(PAM_LOG_DEBUG, "entering: %s", _pam_item_name[_i]); \
-       else \
-               openpam_log(PAM_LOG_DEBUG, "entering: %d", _i); \
-} while (0)
-#define ENTERN(n) do { \
-       int _n = (n); \
-       openpam_log(PAM_LOG_DEBUG, "entering: %d", _n); \
-} while (0)
-#define ENTERS(s) do { \
-       const char *_s = (s); \
-       if (_s == NULL) \
-               openpam_log(PAM_LOG_DEBUG, "entering: NULL"); \
-       else \
-               openpam_log(PAM_LOG_DEBUG, "entering: '%s'", _s); \
-} while (0)
-#define        RETURNV() openpam_log(PAM_LOG_DEBUG, "returning")
-#define RETURNC(c) do { \
-       int _c = (c); \
-       if (_c >= 0 && _c < PAM_NUM_ERRORS) \
-               openpam_log(PAM_LOG_DEBUG, "returning %s", _pam_err_name[_c]); \
-       else \
-               openpam_log(PAM_LOG_DEBUG, "returning %d!", _c); \
-       return (_c); \
-} while (0)
-#define        RETURNN(n) do { \
-       int _n = (n); \
-       openpam_log(PAM_LOG_DEBUG, "returning %d", _n); \
-       return (_n); \
-} while (0)
-#define        RETURNP(p) do { \
-       const void *_p = (p); \
-       if (_p == NULL) \
-               openpam_log(PAM_LOG_DEBUG, "returning NULL"); \
-       else \
-               openpam_log(PAM_LOG_DEBUG, "returning %p", _p); \
-       return (p); \
-} while (0)
-#define        RETURNS(s) do { \
-       const char *_s = (s); \
-       if (_s == NULL) \
-               openpam_log(PAM_LOG_DEBUG, "returning NULL"); \
-       else \
-               openpam_log(PAM_LOG_DEBUG, "returning '%s'", _s); \
-       return (_s); \
-} while (0)
-#else
-#define ENTER()
-#define ENTERI(i)
-#define ENTERN(n)
-#define ENTERS(s)
-#define RETURNV() return
-#define RETURNC(c) return (c)
-#define RETURNN(n) return (n)
-#define RETURNP(p) return (p)
-#define RETURNS(s) return (s)
-#endif
+#include "openpam_constants.h"
+#include "openpam_debug.h"
 
 #endif
index 303f3f5..0eb8ea7 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_load.c 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam_load.c 491 2011-11-12 00:12:32Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <dlfcn.h>
 #include <stdlib.h>
 #include <string.h>
 
 #include "openpam_impl.h"
 
-const char *_pam_func_name[PAM_NUM_PRIMITIVES] = {
-       "pam_authenticate",
-       "pam_setcred",
-       "pam_acct_mgmt",
-       "pam_open_session",
-       "pam_close_session",
-       "pam_chauthtok"
-};
-
-const char *_pam_sm_func_name[PAM_NUM_PRIMITIVES] = {
-       "pam_sm_authenticate",
-       "pam_sm_setcred",
-       "pam_sm_acct_mgmt",
-       "pam_sm_open_session",
-       "pam_sm_close_session",
-       "pam_sm_chauthtok"
-};
-
 /*
  * Locate a matching dynamic or static module.
  */
@@ -122,10 +108,8 @@ openpam_destroy_chain(pam_chain_t *chain)
                return;
        openpam_destroy_chain(chain->next);
        chain->next = NULL;
-       while (chain->optc) {
-               --chain->optc;
+       while (chain->optc--)
                FREE(chain->optv[chain->optc]);
-       }
        FREE(chain->optv);
        openpam_release_module(chain->module);
        chain->module = NULL;
index e492294..9e3d28b 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_log.c 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam_log.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <ctype.h>
 #include <stdarg.h>
 #include <stdio.h>
@@ -47,9 +51,9 @@
 #include "openpam_impl.h"
 
 #ifdef OPENPAM_DEBUG
-int _openpam_debug = 1;
+int openpam_debug = 1;
 #else
-int _openpam_debug = 0;
+int openpam_debug = 0;
 #endif
 
 #if !defined(openpam_log)
@@ -68,7 +72,7 @@ openpam_log(int level, const char *fmt, ...)
 
        switch (level) {
        case PAM_LOG_DEBUG:
-               if (!_openpam_debug)
+               if (!openpam_debug)
                        return;
                priority = LOG_DEBUG;
                break;
@@ -99,7 +103,7 @@ _openpam_log(int level, const char *func, const char *fmt, ...)
 
        switch (level) {
        case PAM_LOG_DEBUG:
-               if (!_openpam_debug)
+               if (!openpam_debug)
                        return;
                priority = LOG_DEBUG;
                break;
@@ -136,7 +140,7 @@ _openpam_log(int level, const char *func, const char *fmt, ...)
  *     =PAM_LOG_DEBUG:
  *             Debugging messages.
  *             These messages are normally not logged unless the global
- *             integer variable :_openpam_debug is set to a non-zero
+ *             integer variable :openpam_debug is set to a non-zero
  *             value, in which case they are logged with a =syslog
  *             priority of =LOG_DEBUG.
  *     =PAM_LOG_VERBOSE:
index 3294dcf..a95b1e0 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_nullconv.c 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam_nullconv.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/types.h>
 
 #include <security/pam_appl.h>
index 17f03f3..9cc8cc1 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_readline.c 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam_readline.c 473 2011-11-03 10:48:25Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <ctype.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -83,33 +87,23 @@ openpam_readline(FILE *f, int *lineno, size_t *lenp)
                }
                /* eof */
                if (ch == EOF) {
-                       /* remove trailing whitespace */
-                       while (len > 0 && isspace((int)line[len - 1]))
-                               --len;
-                       line[len] = '\0';
-                       if (len == 0)
-                               goto fail;
+                       /* done */
                        break;
                }
                /* eol */
                if (ch == '\n') {
                        if (lineno != NULL)
                                ++*lineno;
-
-                       /* remove trailing whitespace */
-                       while (len > 0 && isspace((int)line[len - 1]))
-                               --len;
-                       line[len] = '\0';
                        /* skip blank lines */
                        if (len == 0)
                                continue;
                        /* continuation */
                        if (line[len - 1] == '\\') {
                                line[--len] = '\0';
-                               /* fall through to whitespace case */
-                       } else {
-                               break;
+                               continue;
                        }
+                       /* done */
+                       break;
                }
                /* whitespace */
                if (isspace(ch)) {
@@ -123,10 +117,16 @@ openpam_readline(FILE *f, int *lineno, size_t *lenp)
                line_putch(ch);
        }
 
+       /* remove trailing whitespace */
+       while (len > 0 && isspace((unsigned char)line[len - 1]))
+               --len;
+       line[len] = '\0';
+       if (len == 0)
+               goto fail;
        if (lenp != NULL)
                *lenp = len;
        return (line);
- fail:
+fail:
        FREE(line);
        return (NULL);
 }
@@ -136,13 +136,14 @@ openpam_readline(FILE *f, int *lineno, size_t *lenp)
  * in a NUL-terminated buffer allocated with =malloc.
  *
  * The =openpam_readline function performs a certain amount of processing
- * on the data it reads.
- * Comments (introduced by a hash sign) are stripped, as is leading and
- * trailing whitespace.
- * Any amount of linear whitespace is collapsed to a single space.
- * Blank lines are ignored.
- * If a line ends in a backslash, the backslash is stripped and the next
- * line is appended.
+ * on the data it reads:
+ *
+ *  - Comments (introduced by a hash sign) are stripped, as is leading and
+ *    trailing whitespace.
+ *  - Any amount of linear whitespace is collapsed to a single space.
+ *  - Blank lines are ignored.
+ *  - If a line ends in a backslash, the backslash is stripped and the
+ *    next line is appended.
  *
  * If =lineno is not =NULL, the integer variable it points to is
  * incremented every time a newline character is read.
index 20e80d4..41d44d0 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_restore_cred.c 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam_restore_cred.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <grp.h>
index 57161d3..c7cb1c7 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_set_option.c 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam_set_option.c 482 2011-11-03 16:33:02Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <stdio.h>
index c06ceed..40b807c 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_static.c 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam_static.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <string.h>
 
 #include <security/pam_appl.h>
@@ -43,7 +47,7 @@
 
 #ifdef OPENPAM_STATIC_MODULES
 
-SET_DECLARE(_openpam_static_modules, pam_module_t);
+SET_DECLARE(openpam_static_modules, pam_module_t);
 
 /*
  * OpenPAM internal
@@ -56,7 +60,7 @@ openpam_static(const char *path)
 {
        pam_module_t **module;
 
-       SET_FOREACH(module, _openpam_static_modules) {
+       SET_FOREACH(module, openpam_static_modules) {
                if (strcmp((*module)->path, path) == 0)
                        return (*module);
        }
@@ -1,24 +1,16 @@
 /*-
- * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
- * This software was developed for the FreeBSD Project by ThinkSec AS and
- * Network Associates Laboratories, the Security Research Division of
- * Network Associates, Inc.  under DARPA/SPAWAR contract N66001-01-C-8035
- * ("CBOSS"), as part of the DARPA CHATS research program.
- *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
+ *    notice, this list of conditions and the following disclaimer
+ *    in this position and unchanged.
  * 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.
  *
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_version.h 409 2007-12-21 11:38:50Z des $
+ * $Id: openpam_strlcmp.h 475 2011-11-03 15:29:24Z des $
  */
 
-#ifndef SECURITY_OPENPAM_VERSION_H_INCLUDED
-#define SECURITY_OPENPAM_VERSION_H_INCLUDED
+#ifndef OPENPAM_STRLCMP_H_INCLUDED
+#define OPENPAM_STRLCMP_H_INCLUDED
+
+#ifndef HAVE_STRLCMP
+/* like strcmp(3), but verifies that the entirety of s1 was matched */
+static int
+strlcmp(const char *s1, const char *s2, size_t len)
+{
 
-#define OPENPAM
-#define OPENPAM_VERSION        20071221
-#define OPENPAM_RELEASE        "Hydrangea"
+       for (; len && *s1 && *s2; --len, ++s1, ++s2)
+               if (*s1 != *s2)
+                       return ((unsigned char)*s1 - (unsigned char)*s2);
+       return ((unsigned char)*s1);
+}
+#endif
 
-#endif /* !SECURITY_OPENPAM_VERSION_H_INCLUDED */
+#endif
@@ -1,24 +1,16 @@
 /*-
- * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
- * This software was developed for the FreeBSD Project by ThinkSec AS and
- * Network Associates Laboratories, the Security Research Division of
- * Network Associates, Inc.  under DARPA/SPAWAR contract N66001-01-C-8035
- * ("CBOSS"), as part of the DARPA CHATS research program.
- *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
+ *    notice, this list of conditions and the following disclaimer
+ *    in this position and unchanged.
  * 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.
  *
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_version.h 409 2007-12-21 11:38:50Z des $
+ * $Id: openpam_strlcpy.h 492 2011-11-20 02:04:17Z des $
  */
 
-#ifndef SECURITY_OPENPAM_VERSION_H_INCLUDED
-#define SECURITY_OPENPAM_VERSION_H_INCLUDED
+#ifndef OPENPAM_STRLCPY_H_INCLUDED
+#define OPENPAM_STRLCPY_H_INCLUDED
+
+#ifndef HAVE_STRLCPY
+/* like strcpy(3), but always NUL-terminates; returns strlen(src) */
+size_t
+strlcpy(char *dst, const char *src, size_t size)
+{
+       size_t len;
 
-#define OPENPAM
-#define OPENPAM_VERSION        20071221
-#define OPENPAM_RELEASE        "Hydrangea"
+       for (len = 0; *src && size > 1; ++len, --size)
+               *dst++ = *src++;
+       *dst = '\0';
+       while (*src)
+               ++len, ++src;
+       return (len);
+}
+#endif
 
-#endif /* !SECURITY_OPENPAM_VERSION_H_INCLUDED */
+#endif
diff --git a/contrib/openpam/lib/openpam_subst.c b/contrib/openpam/lib/openpam_subst.c
new file mode 100644 (file)
index 0000000..d54b827
--- /dev/null
@@ -0,0 +1,168 @@
+/*-
+ * Copyright (c) 2011 Dag-Erling Smørgrav
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer
+ *    in this position and unchanged.
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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.
+ *
+ * $Id: openpam_subst.c 461 2011-11-02 14:00:38Z des $
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <security/pam_appl.h>
+
+#include "openpam_impl.h"
+
+#define subst_char(ch) do {                    \
+       int ch_ = (ch);                         \
+       if (buf && len < *bufsize)              \
+               *buf++ = ch_;                   \
+       ++len;                                  \
+} while (0)
+
+#define subst_string(s) do {                   \
+       const char *s_ = (s);                   \
+       while (*s_)                             \
+               subst_char(*s_++);              \
+} while (0)
+
+#define subst_item(i) do {                     \
+       int i_ = (i);                           \
+       const void *p_;                         \
+       ret = pam_get_item(pamh, i_, &p_);      \
+       if (ret == PAM_SUCCESS && p_ != NULL)   \
+               subst_string(p_);               \
+} while (0)
+
+/*
+ * OpenPAM internal
+ *
+ * Substitute PAM item values in a string
+ */
+
+int
+openpam_subst(const pam_handle_t *pamh,
+    char *buf, size_t *bufsize, const char *template)
+{
+       size_t len;
+       int ret;
+
+       ENTERS(template);
+       if (template == NULL)
+               template = "(null)";
+
+       len = 1; /* initialize to 1 for terminating NUL */
+       ret = PAM_SUCCESS;
+       while (*template && ret == PAM_SUCCESS) {
+               if (template[0] == '%') {
+                       ++template;
+                       switch (*template) {
+                       case 's':
+                               subst_item(PAM_SERVICE);
+                               break;
+                       case 't':
+                               subst_item(PAM_TTY);
+                               break;
+                       case 'h':
+                               subst_item(PAM_HOST);
+                               break;
+                       case 'u':
+                               subst_item(PAM_USER);
+                               break;
+                       case 'H':
+                               subst_item(PAM_RHOST);
+                               break;
+                       case 'U':
+                               subst_item(PAM_RUSER);
+                               break;
+                       case '\0':
+                               subst_char('%');
+                               break;
+                       default:
+                               subst_char('%');
+                               subst_char(*template);
+                       }
+                       ++template;
+               } else {
+                       subst_char(*template++);
+               }
+       }
+       if (buf)
+               *buf = '\0';
+       if (ret == PAM_SUCCESS) {
+               if (len > *bufsize)
+                       ret = PAM_TRY_AGAIN;
+               *bufsize = len;
+       }
+       RETURNC(ret);
+}
+
+/*
+ * Error codes:
+ *
+ *     =pam_get_item
+ *     !PAM_SYMBOL_ERR
+ *     PAM_TRY_AGAIN
+ */
+
+/**
+ * The =openpam_subst function expands a string, substituting PAM item
+ * values for all occurrences of specific substitution codes.
+ * The =template argument points to the initial string.
+ * The result is stored in the buffer pointed to by the =buf argument; the
+ * =bufsize argument specifies the size of that buffer.
+ * The actual size of the resulting string, including the terminating NUL
+ * character, is stored in the location pointed to by the =bufsize
+ * argument.
+ *
+ * If =buf is NULL, or if the buffer is too small to hold the expanded
+ * string, =bufsize is updated to reflect the amount of space required to
+ * hold the entire string, and =openpam_subst returns =PAM_TRY_AGAIN.
+ *
+ * If =openpam_subst fails for any other reason, the =bufsize argument is
+ * untouched, but part of the buffer may still have been overwritten.
+ *
+ * Substitution codes are introduced by a percent character and correspond
+ * to PAM items:
+ *
+ *     %H:
+ *             Replaced by the current value of the =PAM_RHOST item.
+ *     %h:
+ *             Replaced by the current value of the =PAM_HOST item.
+ *     %s:
+ *             Replaced by the current value of the =PAM_SERVICE item.
+ *     %t:
+ *             Replaced by the current value of the =PAM_TTY item.
+ *     %U:
+ *             Replaced by the current value of the =PAM_RUSER item.
+ *     %u:
+ *             Replaced by the current value of the =PAM_USER item.
+ *
+ * >pam_get_authtok
+ * >pam_get_item
+ * >pam_get_user
+ *
+ * AUTHOR DES
+ */
index a6820b9..ec078f4 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: openpam_ttyconv.c 408 2007-12-21 11:36:24Z des $
+ * $Id: openpam_ttyconv.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/types.h>
 
 #include <ctype.h>
@@ -211,7 +215,7 @@ openpam_ttyconv(int n,
        }
        *resp = aresp;
        RETURNC(PAM_SUCCESS);
- fail:
+fail:
        for (i = 0; i < n; ++i) {
                if (aresp[i].resp != NULL) {
                        memset(aresp[i].resp, 0, strlen(aresp[i].resp));
index 0088ecf..49c34ab 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_acct_mgmt.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_acct_mgmt.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
index 3b5a78d..fc6c20f 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_authenticate.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_authenticate.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
index 27e3ce7..1a57313 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_authenticate_secondary.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_authenticate_secondary.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <security/pam_appl.h>
 
 /*
index ecf1063..1750b0f 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_chauthtok.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_chauthtok.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
index ab50e35..9e63a1d 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_close_session.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_close_session.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
index 80baf8a..09cde35 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_end.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_end.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <stdlib.h>
 
 #include <security/pam_appl.h>
index f42a6b5..1e0de5b 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_error.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_error.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
index 2a974c9..a0613ef 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_get_authtok.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_get_authtok.c 455 2011-10-29 18:31:11Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <stdlib.h>
@@ -61,8 +65,10 @@ pam_get_authtok(pam_handle_t *pamh,
        const char **authtok,
        const char *prompt)
 {
+       char prompt_buf[1024];
+       size_t prompt_size;
        const void *oldauthtok, *prevauthtok, *promptp;
-       const char *default_prompt;
+       const char *prompt_option, *default_prompt;
        char *resp, *resp2;
        int pitem, r, style, twice;
 
@@ -74,6 +80,7 @@ pam_get_authtok(pam_handle_t *pamh,
        switch (item) {
        case PAM_AUTHTOK:
                pitem = PAM_AUTHTOK_PROMPT;
+               prompt_option = "authtok_prompt";
                default_prompt = authtok_prompt;
                r = pam_get_item(pamh, PAM_OLDAUTHTOK, &oldauthtok);
                if (r == PAM_SUCCESS && oldauthtok != NULL) {
@@ -83,6 +90,7 @@ pam_get_authtok(pam_handle_t *pamh,
                break;
        case PAM_OLDAUTHTOK:
                pitem = PAM_OLDAUTHTOK_PROMPT;
+               prompt_option = "oldauthtok_prompt";
                default_prompt = oldauthtok_prompt;
                twice = 0;
                break;
@@ -99,13 +107,21 @@ pam_get_authtok(pam_handle_t *pamh,
                else if (openpam_get_option(pamh, "use_first_pass"))
                        RETURNC(r == PAM_SUCCESS ? PAM_AUTH_ERR : r);
        }
-       if (prompt == NULL) {
-               r = pam_get_item(pamh, pitem, &promptp);
-               if (r != PAM_SUCCESS || promptp == NULL)
-                       prompt = default_prompt;
-               else
+       /* pam policy overrides the module's choice */
+       if ((promptp = openpam_get_option(pamh, prompt_option)) != NULL)
+               prompt = promptp;
+       /* no prompt provided, see if there is one tucked away somewhere */
+       if (prompt == NULL)
+               if (pam_get_item(pamh, pitem, &promptp) && promptp != NULL)
                        prompt = promptp;
-       }
+       /* fall back to hardcoded default */
+       if (prompt == NULL)
+               prompt = default_prompt;
+       /* expand */
+       prompt_size = sizeof prompt_buf;
+       r = openpam_subst(pamh, prompt_buf, &prompt_size, prompt);
+       if (r == PAM_SUCCESS && prompt_size <= sizeof prompt_buf)
+               prompt = prompt_buf;
        style = openpam_get_option(pamh, "echo_pass") ?
            PAM_PROMPT_ECHO_ON : PAM_PROMPT_ECHO_OFF;
        r = pam_prompt(pamh, style, &resp, "%s", prompt);
@@ -160,6 +176,13 @@ pam_get_authtok(pam_handle_t *pamh,
  * If it is =NULL, the =PAM_AUTHTOK_PROMPT or =PAM_OLDAUTHTOK_PROMPT item,
  * as appropriate, will be used.
  * If that item is also =NULL, a hardcoded default prompt will be used.
+ * Either way, the prompt is expanded using =openpam_subst before it is
+ * passed to the conversation function.
+ *
+ * If =pam_get_authtok is called from a module and the ;authtok_prompt /
+ * ;oldauthtok_prompt option is set in the policy file, the value of that
+ * option takes precedence over both the =prompt argument and the
+ * =PAM_AUTHTOK_PROMPT / =PAM_OLDAUTHTOK_PROMPT item.
  *
  * If =item is set to =PAM_AUTHTOK and there is a non-null =PAM_OLDAUTHTOK
  * item, =pam_get_authtok will ask the user to confirm the new token by
@@ -168,4 +191,5 @@ pam_get_authtok(pam_handle_t *pamh,
  *
  * >pam_get_item
  * >pam_get_user
+ * >openpam_subst
  */
index 0cceef0..1a8ba1d 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_get_data.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_get_data.c 444 2011-10-22 01:03:23Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <string.h>
 
 #include <security/pam_appl.h>
@@ -80,6 +84,7 @@ pam_get_data(const pam_handle_t *pamh,
  * context specified by the =pamh argument.
  * A pointer to the object is stored in the location pointed to by the
  * =data argument.
+ * If =pam_get_data fails, the =data argument is untouched.
  *
  * This function and its counterpart =pam_set_data are useful for managing
  * data that are meaningful only to a particular service module.
index 9f127be..95b9df6 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_get_item.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_get_item.c 491 2011-11-12 00:12:32Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
 
 #include "openpam_impl.h"
 
-const char *_pam_item_name[PAM_NUM_ITEMS] = {
-       "(NO ITEM)",
-       "PAM_SERVICE",
-       "PAM_USER",
-       "PAM_TTY",
-       "PAM_RHOST",
-       "PAM_CONV",
-       "PAM_AUTHTOK",
-       "PAM_OLDAUTHTOK",
-       "PAM_RUSER",
-       "PAM_USER_PROMPT",
-       "PAM_REPOSITORY",
-       "PAM_AUTHTOK_PROMPT",
-       "PAM_OLDAUTHTOK_PROMPT"
-};
-
 /*
  * XSSO 4.2.1
  * XSSO 6 page 46
@@ -83,9 +71,10 @@ pam_get_item(const pam_handle_t *pamh,
        case PAM_RUSER:
        case PAM_CONV:
        case PAM_USER_PROMPT:
+       case PAM_REPOSITORY:
        case PAM_AUTHTOK_PROMPT:
        case PAM_OLDAUTHTOK_PROMPT:
-       case PAM_REPOSITORY:
+       case PAM_HOST:
                *item = pamh->item[item_type];
                RETURNC(PAM_SUCCESS);
        default:
@@ -102,10 +91,12 @@ pam_get_item(const pam_handle_t *pamh,
 
 /**
  * The =pam_get_item function stores a pointer to the item specified by
- * the =item_type argument in the location specified by the =item
+ * the =item_type argument in the location pointed to by the =item
  * argument.
  * The item is retrieved from the PAM context specified by the =pamh
  * argument.
+ * If =pam_get_item fails, the =item argument is untouched.
+ *
  * The following item types are recognized:
  *
  *     =PAM_SERVICE:
@@ -135,6 +126,8 @@ pam_get_item(const pam_handle_t *pamh,
  *     =PAM_OLDAUTHTOK_PROMPT:
  *             The prompt to use when asking the applicant for an
  *             expired authentication token prior to changing it.
+ *     =PAM_HOST:
+ *             The name of the host the application runs on.
  *
  * See =pam_start for a description of =struct pam_conv.
  *
index c49a918..54ff6c3 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_get_mapped_authtok.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_get_mapped_authtok.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <security/pam_appl.h>
 
 /*
index 359baee..4f8ac17 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_get_mapped_username.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_get_mapped_username.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <security/pam_appl.h>
 
 /*
index 115a3ea..53245b9 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_get_user.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_get_user.c 455 2011-10-29 18:31:11Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <stdlib.h>
@@ -58,6 +62,8 @@ pam_get_user(pam_handle_t *pamh,
        const char **user,
        const char *prompt)
 {
+       char prompt_buf[1024];
+       size_t prompt_size;
        const void *promptp;
        char *resp;
        int r;
@@ -68,13 +74,22 @@ pam_get_user(pam_handle_t *pamh,
        r = pam_get_item(pamh, PAM_USER, (const void **)user);
        if (r == PAM_SUCCESS && *user != NULL)
                RETURNC(PAM_SUCCESS);
-       if (prompt == NULL) {
-               r = pam_get_item(pamh, PAM_USER_PROMPT, &promptp);
-               if (r != PAM_SUCCESS || promptp == NULL)
-                       prompt = user_prompt;
-               else
+       /* pam policy overrides the module's choice */
+       if ((promptp = openpam_get_option(pamh, "user_prompt")) != NULL)
+               prompt = promptp;
+       /* no prompt provided, see if there is one tucked away somewhere */
+       if (prompt == NULL)
+               if (pam_get_item(pamh, PAM_USER_PROMPT, &promptp) &&
+                   promptp != NULL)
                        prompt = promptp;
-       }
+       /* fall back to hardcoded default */
+       if (prompt == NULL)
+               prompt = user_prompt;
+       /* expand */
+       prompt_size = sizeof prompt_buf;
+       r = openpam_subst(pamh, prompt_buf, &prompt_size, prompt);
+       if (r == PAM_SUCCESS && prompt_size <= sizeof prompt_buf)
+               prompt = prompt_buf;
        r = pam_prompt(pamh, PAM_PROMPT_ECHO_ON, &resp, "%s", prompt);
        if (r != PAM_SUCCESS)
                RETURNC(r);
@@ -105,9 +120,16 @@ pam_get_user(pam_handle_t *pamh,
  *
  * The =prompt argument specifies a prompt to use if no user name is
  * cached.
- * If it is =NULL, the =PAM_USER_PROMPT will be used.
+ * If it is =NULL, the =PAM_USER_PROMPT item will be used.
  * If that item is also =NULL, a hardcoded default prompt will be used.
+ * Either way, the prompt is expanded using =openpam_subst before it is
+ * passed to the conversation function.
+ *
+ * If =pam_get_user is called from a module and the ;user_prompt option is
+ * set in the policy file, the value of that option takes precedence over
+ * both the =prompt argument and the =PAM_USER_PROMPT item.
  *
  * >pam_get_item
  * >pam_get_authtok
+ * >openpam_subst
  */
index f2d7910..e2ebf57 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_getenv.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_getenv.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <stdlib.h>
 #include <string.h>
 
index c0e128a..06c003f 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_getenvlist.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_getenvlist.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <stdlib.h>
 #include <string.h>
 
index 2e4dbc7..7e51dbf 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_info.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_info.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
index f8d6eca..36c59b0 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_open_session.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_open_session.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
index 76da55f..194e765 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_prompt.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_prompt.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/types.h>
 
 #include <stdarg.h>
index 79d6228..369066d 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_putenv.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_putenv.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <stdlib.h>
 #include <string.h>
 
index 963de92..a8de632 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_set_data.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_set_data.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <stdlib.h>
 #include <string.h>
 
index 9b60618..05d538f 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_set_item.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_set_item.c 496 2011-11-21 16:20:45Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <stdlib.h>
@@ -66,6 +70,10 @@ pam_set_item(pam_handle_t *pamh,
        osize = nsize = 0;
        switch (item_type) {
        case PAM_SERVICE:
+               /* set once only, by pam_start() */
+               if (*slot != NULL)
+                       RETURNC(PAM_SYSTEM_ERR);
+               /* fall through */
        case PAM_USER:
        case PAM_AUTHTOK:
        case PAM_OLDAUTHTOK:
@@ -75,6 +83,7 @@ pam_set_item(pam_handle_t *pamh,
        case PAM_USER_PROMPT:
        case PAM_AUTHTOK_PROMPT:
        case PAM_OLDAUTHTOK_PROMPT:
+       case PAM_HOST:
                if (*slot != NULL)
                        osize = strlen(*slot) + 1;
                if (item != NULL)
index 01ad255..d8db84f 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_set_mapped_authtok.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_set_mapped_authtok.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <security/pam_appl.h>
 
 /*
index ae3619b..4b8f815 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_set_mapped_username.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_set_mapped_username.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <security/pam_appl.h>
 
 /*
index 80eb468..51fb081 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_setcred.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_setcred.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
index e73f6b5..fbe6a8f 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_setenv.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_setenv.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
index a57e86a..f5c14cf 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_sm_acct_mgmt.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_sm_acct_mgmt.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
index 7f4bb1c..97851af 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_sm_authenticate.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_sm_authenticate.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
index bde0366..3f3f6bd 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_sm_authenticate_secondary.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_sm_authenticate_secondary.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
index 2c41d6d..593344c 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_sm_chauthtok.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_sm_chauthtok.c 466 2011-11-02 23:33:43Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
@@ -80,4 +84,8 @@ pam_sm_chauthtok(pam_handle_t *pamh,
 /**
  * The =pam_sm_chauthtok function is the service module's implementation
  * of the =pam_chauthtok API function.
+ *
+ * When the application calls =pam_chauthtok, the service function is
+ * called twice, first with the =PAM_PRELIM_CHECK flag set and then again
+ * with the =PAM_UPDATE_AUTHTOK flag set.
  */
index 25cee92..290f497 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_sm_close_session.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_sm_close_session.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
index 9d85d5f..e86e6e5 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_sm_get_mapped_authtok.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_sm_get_mapped_authtok.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
index ee4d250..596ca6c 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_sm_get_mapped_username.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_sm_get_mapped_username.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
index bfe0794..acb401a 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_sm_open_session.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_sm_open_session.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
index 54fd370..dab40fd 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_sm_set_mapped_authtok.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_sm_set_mapped_authtok.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
index 0239dbb..3011016 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_sm_set_mapped_username.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_sm_set_mapped_username.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
index 4d472b3..0d30683 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_sm_setcred.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_sm_setcred.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <sys/param.h>
 
 #include <security/pam_appl.h>
index ee6468b..84e0085 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_start.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_start.c 503 2011-12-18 14:00:33Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
 
 #include <security/pam_appl.h>
 
 #include "openpam_impl.h"
+#include "openpam_strlcpy.h"
+
+#ifdef _SC_HOST_NAME_MAX
+#define HOST_NAME_MAX sysconf(_SC_HOST_NAME_MAX)
+#else
+#define HOST_NAME_MAX 1024
+#endif
 
 /*
  * XSSO 4.2.1
@@ -54,6 +67,7 @@ pam_start(const char *service,
        const struct pam_conv *pam_conv,
        pam_handle_t **pamh)
 {
+       char hostname[HOST_NAME_MAX + 1];
        struct pam_handle *ph;
        int r;
 
@@ -62,20 +76,20 @@ pam_start(const char *service,
                RETURNC(PAM_BUF_ERR);
        if ((r = pam_set_item(ph, PAM_SERVICE, service)) != PAM_SUCCESS)
                goto fail;
+       if (gethostname(hostname, sizeof hostname) != 0)
+               strlcpy(hostname, "localhost", sizeof hostname);
+       if ((r = pam_set_item(ph, PAM_HOST, hostname)) != PAM_SUCCESS)
+               goto fail;
        if ((r = pam_set_item(ph, PAM_USER, user)) != PAM_SUCCESS)
                goto fail;
        if ((r = pam_set_item(ph, PAM_CONV, pam_conv)) != PAM_SUCCESS)
                goto fail;
-
-       r = openpam_configure(ph, service);
-       if (r != PAM_SUCCESS)
+       if ((r = openpam_configure(ph, service)) != PAM_SUCCESS)
                goto fail;
-
        *pamh = ph;
        openpam_log(PAM_LOG_DEBUG, "pam_start(\"%s\") succeeded", service);
        RETURNC(PAM_SUCCESS);
-
- fail:
+fail:
        pam_end(ph, r);
        RETURNC(r);
 }
index 24498c4..e29219d 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_strerror.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_strerror.c 491 2011-11-12 00:12:32Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <stdio.h>
 
 #include <security/pam_appl.h>
 
 #include "openpam_impl.h"
 
-const char *_pam_err_name[PAM_NUM_ERRORS] = {
-       "PAM_SUCCESS",
-       "PAM_OPEN_ERR",
-       "PAM_SYMBOL_ERR",
-       "PAM_SERVICE_ERR",
-       "PAM_SYSTEM_ERR",
-       "PAM_BUF_ERR",
-       "PAM_CONV_ERR",
-       "PAM_PERM_DENIED",
-       "PAM_MAXTRIES",
-       "PAM_AUTH_ERR",
-       "PAM_NEW_AUTHTOK_REQD",
-       "PAM_CRED_INSUFFICIENT",
-       "PAM_AUTHINFO_UNAVAIL",
-       "PAM_USER_UNKNOWN",
-       "PAM_CRED_UNAVAIL",
-       "PAM_CRED_EXPIRED",
-       "PAM_CRED_ERR",
-       "PAM_ACCT_EXPIRED",
-       "PAM_AUTHTOK_EXPIRED",
-       "PAM_SESSION_ERR",
-       "PAM_AUTHTOK_ERR",
-       "PAM_AUTHTOK_RECOVERY_ERR",
-       "PAM_AUTHTOK_LOCK_BUSY",
-       "PAM_AUTHTOK_DISABLE_AGING",
-       "PAM_NO_MODULE_DATA",
-       "PAM_IGNORE",
-       "PAM_ABORT",
-       "PAM_TRY_AGAIN",
-       "PAM_MODULE_UNKNOWN",
-       "PAM_DOMAIN_UNKNOWN"
-};
-
 /*
  * XSSO 4.2.1
  * XSSO 6 page 92
@@ -159,6 +130,8 @@ pam_strerror(const pam_handle_t *pamh,
 /**
  * The =pam_strerror function returns a pointer to a string containing a
  * textual description of the error indicated by the =error_number
- * argument, in the context of the PAM transaction described by the =pamh
  * argument.
+ * The =pamh argument is ignored.
+ * For compatibility with other implementations, it should be either a
+ * valid PAM handle returned by a previous call to =pam_start, or =NULL.
  */
index 0b128d1..9ed85b6 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_verror.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_verror.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <stdarg.h>
 #include <stdlib.h>
 
index 5282714..95f45f4 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_vinfo.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_vinfo.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <stdarg.h>
 #include <stdlib.h>
 
index e1215c3..1e390e0 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2002-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2007 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * This software was developed for the FreeBSD Project by ThinkSec AS and
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: pam_vprompt.c 408 2007-12-21 11:36:24Z des $
+ * $Id: pam_vprompt.c 437 2011-09-13 12:00:13Z des $
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
index 18ef350..41afd2a 100644 (file)
 LIB=   pam
 
 SRCDIR=        ${.CURDIR}/../../contrib/openpam
-CONTRIBDIR=    ${SRCDIR}/lib
-PATCHES!=      echo ${.CURDIR}/patches/*.patch
 
-MODULE_DIR=    /usr/lib/security
+MODULE_DIR=    ${LIBDIR}/security
 
+CFLAGS+= -DHAVE_CONFIG_H
 CFLAGS+= -DOPENPAM_MODULES_DIR='"${MODULE_DIR}/"'
-CFLAGS+= -DLIB_MAJ=${MODULE_SHLIB_MAJOR}
-CFLAGS+= -I${SRCDIR}/lib
-
-SRCS=  openpam_borrow_cred.c openpam_configure.c openpam_dispatch.c
-SRCS+= openpam_dynamic.c openpam_findenv.c openpam_free_data.c
-SRCS+= openpam_free_envlist.c openpam_get_option.c openpam_load.c
-SRCS+= openpam_log.c openpam_nullconv.c openpam_readline.c
-SRCS+= openpam_restore_cred.c openpam_set_option.c openpam_static.c
-SRCS+= openpam_ttyconv.c pam_acct_mgmt.c pam_authenticate.c
-SRCS+= pam_chauthtok.c pam_close_session.c pam_end.c pam_error.c
-SRCS+= pam_get_authtok.c pam_get_data.c pam_get_item.c pam_get_user.c
-SRCS+= pam_getenv.c pam_getenvlist.c pam_info.c pam_open_session.c
-SRCS+= pam_prompt.c pam_putenv.c pam_set_data.c pam_set_item.c pam_setcred.c
-SRCS+= pam_setenv.c pam_start.c pam_strerror.c pam_verror.c pam_vinfo.c
-SRCS+= pam_vprompt.c
+CFLAGS+= -I${SRCDIR}/lib -I${.CURDIR}
+
+# Dist files
+SRCS=  openpam_borrow_cred.c \
+       openpam_check_owner_perms.c \
+       openpam_configure.c \
+       openpam_constants.c \
+       openpam_dispatch.c \
+       openpam_dynamic.c \
+       openpam_findenv.c \
+       openpam_free_data.c \
+       openpam_free_envlist.c \
+       openpam_get_option.c \
+       openpam_load.c \
+       openpam_log.c \
+       openpam_nullconv.c \
+       openpam_readline.c \
+       openpam_restore_cred.c \
+       openpam_set_option.c \
+       openpam_static.c \
+       openpam_subst.c \
+       openpam_ttyconv.c \
+       pam_acct_mgmt.c \
+       pam_authenticate.c \
+       pam_chauthtok.c \
+       pam_close_session.c \
+       pam_end.c \
+       pam_error.c \
+       pam_get_authtok.c \
+       pam_get_data.c \
+       pam_get_item.c \
+       pam_get_user.c \
+       pam_getenv.c \
+       pam_getenvlist.c \
+       pam_info.c \
+       pam_open_session.c \
+       pam_prompt.c \
+       pam_putenv.c \
+       pam_set_data.c \
+       pam_set_item.c \
+       pam_setcred.c \
+       pam_setenv.c \
+       pam_start.c \
+       pam_strerror.c \
+       pam_verror.c \
+       pam_vinfo.c \
+       pam_vprompt.c
+# Local files
 SRCS+= pam_debug_log.c
-SRCS+= ${PATCHES}
 
-PAMINCS=       openpam.h openpam_version.h pam_appl.h pam_constants.h
-PAMINCS+=      pam_modules.h pam_types.h openpam_attr.h
+PAMINCS=openpam.h \
+       openpam_attr.h \
+       openpam_version.h \
+       pam_appl.h \
+       pam_constants.h \
+       pam_modules.h \
+       pam_types.h
 INCS=  ${PAMINCS:S;^;${SRCDIR}/include/security/;} pam_mod_misc.h
 INCSDIR=       ${INCLUDEDIR}/security
 
-MAN=   openpam.3 openpam_borrow_cred.3 openpam_free_data.3
-MAN+=  openpam_free_envlist.3 openpam_get_option.3 openpam_log.3
-MAN+=  openpam_nullconv.3 openpam_readline.3 openpam_restore_cred.3
-MAN+=  openpam_set_option.3 openpam_ttyconv.3 pam.3 pam_acct_mgmt.3
-MAN+=  pam_authenticate.3 pam_chauthtok.3 pam_close_session.3 pam_conv.3
-MAN+=  pam_end.3 pam_error.3 pam_get_authtok.3 pam_get_data.3 pam_get_item.3
-MAN+=  pam_get_user.3 pam_getenv.3 pam_getenvlist.3 pam_info.3
-MAN+=  pam_open_session.3 pam_prompt.3 pam_putenv.3 pam_set_data.3
-MAN+=  pam_set_item.3 pam_setcred.3 pam_setenv.3 pam_sm_acct_mgmt.3
-MAN+=  pam_sm_authenticate.3 pam_sm_chauthtok.3 pam_sm_close_session.3
-MAN+=  pam_sm_open_session.3 pam_sm_setcred.3 pam_start.3 pam_strerror.3
-MAN+=  pam_verror.3 pam_vinfo.3 pam_vprompt.3 pam.conf.5
+MAN=   pam_acct_mgmt.3 \
+       pam_authenticate.3 \
+       pam_chauthtok.3 \
+       pam_close_session.3 \
+       pam_end.3 \
+       pam_get_data.3 \
+       pam_get_item.3 \
+       pam_get_user.3 \
+       pam_getenv.3 \
+       pam_getenvlist.3 \
+       pam_open_session.3 \
+       pam_putenv.3 \
+       pam_set_data.3 \
+       pam_set_item.3 \
+       pam_setcred.3 \
+       pam_start.3 \
+       pam_strerror.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 \
+       openpam_borrow_cred.3 \
+       openpam_free_data.3 \
+       openpam_free_envlist.3 \
+       openpam_get_option.3 \
+       openpam_log.3 \
+       openpam_nullconv.3 \
+       openpam_readline.3 \
+       openpam_restore_cred.3 \
+       openpam_set_option.3 \
+       openpam_subst.3 \
+       openpam_ttyconv.3 \
+       pam_error.3 \
+       pam_get_authtok.3 \
+       pam_info.3 \
+       pam_prompt.3 \
+       pam_setenv.3 \
+       pam_verror.3 \
+       pam_vinfo.3 \
+       pam_vprompt.3 \
+       openpam.3 \
+       pam.3 \
+       pam_conv.3 \
+       pam.conf.5
 
 .PATH: ${SRCDIR}/lib ${SRCDIR}/doc/man
 
-.include "../pam_module/Makefile.shlib"
 .include <bsd.lib.mk>
diff --git a/lib/libpam/config.h b/lib/libpam/config.h
new file mode 100644 (file)
index 0000000..224442a
--- /dev/null
@@ -0,0 +1,147 @@
+/* config.h.  Generated from config.h.in by configure.  */
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Whether loading unversioned modules support is disabled */
+/* #undef DISABLE_UNVERSIONED_MODULES */
+
+/* Define to 1 if you have the <crypt.h> header file. */
+/* #undef HAVE_CRYPT_H */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
+/* Define to 1 if you have the `fpurge' function. */
+#define HAVE_FPURGE 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the `crypt' library (-lcrypt). */
+#define HAVE_LIBCRYPT 1
+
+/* Define to 1 if you have the `dl' library (-ldl). */
+/* #undef HAVE_LIBDL */
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strlcmp' function. */
+/* #undef HAVE_STRLCMP */
+
+/* Define to 1 if you have the `strlcpy' function. */
+#define HAVE_STRLCPY 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* OpenPAM library major number */
+#define LIB_MAJ 2
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#define LT_OBJDIR ".libs/"
+
+/* Turn debugging on by default */
+/* #undef OPENPAM_DEBUG */
+
+/* OpenPAM modules directory */
+/* Let the Makefile decide this */
+/* #define OPENPAM_MODULES_DIR "${exec_prefix}/lib/" */
+
+/* Name of package */
+#define PACKAGE "openpam"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "des@des.no"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "OpenPAM"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "OpenPAM 20111218"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "openpam"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL ""
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "20111218"
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# define _ALL_SOURCE 1
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# define _POSIX_PTHREAD_SEMANTICS 1
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# define _TANDEM_SOURCE 1
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# define __EXTENSIONS__ 1
+#endif
+
+
+/* Version number of package */
+#define VERSION "20111218"
+
+/* Define to 1 if on MINIX. */
+/* #undef _MINIX */
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+/* #undef _POSIX_1_SOURCE */
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+/* #undef _POSIX_SOURCE */
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define to the equivalent of the C99 'restrict' keyword, or to
+   nothing if this is not supported.  Do not define if restrict is
+   supported directly.  */
+#define restrict __restrict
+/* Work around a bug in Sun C++: it does not support _Restrict or
+   __restrict__, even though the corresponding Sun C compiler ends up with
+   "#define restrict _Restrict" or "#define restrict __restrict__" in the
+   previous line.  Perhaps some future version of Sun C++ will work with
+   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */
+#if defined __SUNPRO_CC && !defined __RESTRICT
+# define _Restrict
+# define __restrict__
+#endif
+
+/* Define to empty if the keyword `volatile' does not work. Warning: valid
+   code using `volatile' can become incorrect without. Disable with care. */
+/* #undef volatile */
diff --git a/lib/libpam/patches/openpam_configure.c.patch b/lib/libpam/patches/openpam_configure.c.patch
deleted file mode 100644 (file)
index 7830fe8..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-$DragonFly: src/lib/libpam/patches/openpam_configure.c.patch,v 1.1 2005/07/13 12:34:21 joerg Exp $
-
---- openpam_configure.c.orig   2005-07-07 19:43:40.000000000 +0200
-+++ openpam_configure.c        2005-07-07 19:44:09.000000000 +0200
-@@ -69,7 +69,8 @@
- match_word(const char *str, const char *word)
- {
--      while (*str && tolower(*str) == tolower(*word))
-+      while (*str &&
-+             tolower((unsigned char)*str) == tolower((unsigned char)*word))
-               ++str, ++word;
-       return (*str == ' ' && *word == '\0');
- }
diff --git a/lib/libpam/patches/openpam_ttyconv.c.patch b/lib/libpam/patches/openpam_ttyconv.c.patch
deleted file mode 100644 (file)
index bbe4610..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-$DragonFly: src/lib/libpam/patches/openpam_ttyconv.c.patch,v 1.1 2005/07/13 12:34:21 joerg Exp $
-
---- openpam_ttyconv.c.orig     2005-07-07 19:46:23.000000000 +0200
-+++ openpam_ttyconv.c  2005-07-07 19:46:26.000000000 +0200
-@@ -65,7 +65,7 @@
-       char buf[PAM_MAX_RESP_SIZE];
-       struct sigaction action, saved_action;
-       sigset_t saved_sigset, sigset;
--      unsigned int saved_alarm;
-+      unsigned int saved_alarm = 0;
-       int eof, error, fd;
-       size_t len;
-       char *retval;
index d8b6865..6af91af 100644 (file)
@@ -1,13 +1,16 @@
+LIBPAMDIR=     ${.CURDIR}/../../libpam
+MODULE_SHLIB_MAJOR!=grep -w LIB_MAJ ${LIBPAMDIR}/config.h | awk '{print $$3}'
 SHLIB_NAME= ${LIB}.so.${MODULE_SHLIB_MAJOR}
 SHLIB_MAJOR=   ${MODULE_SHLIB_MAJOR}
 NOINSTALLLIB=  yes
 NOPROFILE=     yes
 
-TARGET_LIBDIR=         /usr/lib/security
-TARGET_SHLIBDIR=       /usr/lib/security
+TARGET_LIBDIR=         ${LIBDIR}/security
+TARGET_SHLIBDIR=       ${LIBDIR}/security
 
+CFLAGS+=       -I${LIBPAMDIR}
 LDADD+=        -lpam
 
 OPENPAM_DIR=   ${.CURDIR}/../../../contrib/openpam
 
-.include "Makefile.shlib"
+.include "../Makefile.inc"
diff --git a/lib/pam_module/Makefile.shlib b/lib/pam_module/Makefile.shlib
deleted file mode 100644 (file)
index 59f9a16..0000000
+++ /dev/null
@@ -1 +0,0 @@
-MODULE_SHLIB_MAJOR=    1
index 47466af..c41abe1 100644 (file)
@@ -38,8 +38,8 @@
 #include <sys/wait.h>
 
 #include <errno.h>
-#include <stdlib.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
 
index 1ee17e8..9be9b96 100644 (file)
@@ -1,4 +1,5 @@
 .\" Copyright (c) 2003 Networks Associates Technology, Inc.
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
 .\" All rights reserved.
 .\"
 .\" Portions of this software were developed for the FreeBSD Project by
@@ -30,9 +31,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/lib/libpam/modules/pam_group/pam_group.8,v 1.3 2004/07/02 23:52:17 ru Exp $
+.\" $FreeBSD: src/lib/libpam/modules/pam_group/pam_group.8,v 1.4 2011/03/12 11:12:30 des Exp $
 .\"
-.Dd February 6, 2003
+.Dd December 24, 2011
 .Dt PAM_GROUP 8
 .Os
 .Sh NAME
@@ -64,10 +65,23 @@ it does exist and the applicant is a member.
 Specify the name of the group to check.
 The default is
 .Dq Li wheel .
+.It Cm luser
+Accept or reject based on the target user's group membership.
 .It Cm root_only
 Skip this module entirely if the target account is not the superuser
 account.
+.It Cm ruser
+Accept or reject based on the supplicant's group membership.
+This is the default.
 .El
+.Pp
+Note that the
+.Cm luser
+and
+.Cm ruser
+options are mutually exclusive, and that
+.Nm
+will fail if both are specified.
 .Sh SEE ALSO
 .Xr pam.conf 5 ,
 .Xr pam 8
index d9e44f3..c76158e 100644 (file)
@@ -1,5 +1,6 @@
 /*-
  * Copyright (c) 2003 Networks Associates Technology, Inc.
+ * Copyright (c) 2004-2011 Dag-Erling Smørgrav
  * All rights reserved.
  *
  * Portions of this software were developed for the FreeBSD Project by
@@ -31,7 +32,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/lib/libpam/modules/pam_group/pam_group.c,v 1.4 2003/12/11 13:55:15 des Exp $
+ * $FreeBSD: src/lib/libpam/modules/pam_group/pam_group.c,v 1.6 2011/03/12 11:26:37 des Exp $
  */
 
 #include <sys/types.h>
@@ -55,6 +56,7 @@ PAM_EXTERN int
 pam_sm_authenticate(pam_handle_t *pamh, int flags __unused,
                    int argc __unused, const char *argv[] __unused)
 {
+       int local, remote;
        const char *group, *user;
        const void *ruser;
        char *const *list;
@@ -68,10 +70,24 @@ pam_sm_authenticate(pam_handle_t *pamh, int flags __unused,
        if (pwd->pw_uid != 0 && openpam_get_option(pamh, "root_only"))
                return (PAM_IGNORE);
 
-       /* get applicant */
-       if (pam_get_item(pamh, PAM_RUSER, &ruser) != PAM_SUCCESS
-           || ruser == NULL || (pwd = getpwnam(ruser)) == NULL)
-               return (PAM_AUTH_ERR);
+       /* check local / remote */
+       local = openpam_get_option(pamh, "luser") ? 1 : 0;
+       remote = openpam_get_option(pamh, "ruser") ? 1 : 0;
+       if (local && remote) {
+               openpam_log(PAM_LOG_ERROR, "(pam_group) "
+                   "the luser and ruser options are mutually exclusive");
+               return (PAM_SERVICE_ERR);
+       } else if (local) {
+               /* we already have the correct struct passwd */
+       } else {
+               if (!remote)
+                       openpam_log(PAM_LOG_NOTICE, "(pam_group) "
+                           "neither luser nor ruser specified, assuming ruser");
+               /* default / historical behavior */
+               if (pam_get_item(pamh, PAM_RUSER, &ruser) != PAM_SUCCESS ||
+                   ruser == NULL || (pwd = getpwnam(ruser)) == NULL)
+                       return (PAM_AUTH_ERR);
+       }
 
        /* get regulating group */
        if ((group = openpam_get_option(pamh, "group")) == NULL)
diff --git a/lib/pam_module/pam_krb5/Makefile b/lib/pam_module/pam_krb5/Makefile
deleted file mode 100644 (file)
index 1d43115..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-# $DragonFly: src/lib/pam_module/pam_krb5/Makefile,v 1.3 2005/07/28 19:25:41 joerg Exp $
-
-LIB=   pam_krb5
-SRCS=  pam_krb5.c
-MAN=   pam_krb5.8
-
-DPADD= ${LIBKRB5} ${LIBGSSAPI} ${LIBASN1} ${LIBCRYPTO} ${LIBCRYPT} \
-       ${LIBCOM_ERR} ${LIBROKEN}
-LDADD= -lkrb5 -lgssapi -lasn1 -lcrypto -lcrypt -lcom_err -lroken 
-
-.include <bsd.lib.mk>
diff --git a/lib/pam_module/pam_krb5/pam_krb5.8 b/lib/pam_module/pam_krb5/pam_krb5.8
deleted file mode 100644 (file)
index 2d2d388..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-.\"
-.\" $Id: pam_krb5.5,v 1.5 2000/01/05 00:59:56 fcusack Exp $
-.\" $FreeBSD: src/lib/libpam/modules/pam_krb5/pam_krb5.8,v 1.6 2001/11/24 23:41:32 dd Exp $
-.\" $DragonFly: src/lib/pam_module/pam_krb5/pam_krb5.8,v 1.1 2005/07/12 23:04:02 joerg Exp $
-.Dd January 15, 1999
-.Dt PAM_KRB5 8
-.Os
-.Sh NAME
-.Nm pam_krb5
-.Nd Kerberos 5 PAM module
-.Sh SYNOPSIS
-.Pa /usr/lib/pam_krb5.so
-.Sh DESCRIPTION
-The Kerberos 5 service module for PAM, typically
-.Pa /usr/lib/pam_krb5.so ,
-provides functionality for three PAM categories:
-authentication,
-account management,
-and password management.
-It also provides null functions for session management.
-The
-.Pa pam_krb5.so
-module is a shared object
-that can be dynamically loaded to provide
-the necessary functionality upon demand.
-Its path is specified in the
-PAM configuration file.
-.Ss Kerberos 5 Authentication Module
-The Kerberos 5 authentication component
-provides functions to verify the identity of a user
-.Pq Fn pam_sm_authenticate
-and to set user specific credentials
-.Pq Fn pam_sm_setcred .
-.Fn pam_sm_authenticate
-converts the supplied username into a Kerberos principal,
-by appending the default local realm name.
-It also supports usernames with explicit realm names.
-If a realm name is supplied, then upon a successful return, it
-changes the username by mapping the principal name into a local username
-(calling
-.Fn krb5_aname_to_localname ) .
-This typically just means
-the realm name is stripped.
-.Pp
-It prompts the user for a password and obtains a new Kerberos TGT for
-the principal.
-The TGT is verified by obtaining a service
-ticket for the local host.
-.Pp
-When prompting for the current password, the authentication
-module will use the prompt
-.Dq Li "Password for <principal>:" .
-.Pp
-The
-.Fn pam_sm_setcred
-function stores the newly acquired credentials in a credentials cache,
-and sets the environment variable
-.Ev KRB5CCNAME
-appropriately.
-The credentials cache should be destroyed by the user at logout with
-.Xr kdestroy 1 .
-.Pp
-The following options may be passed to the authentication module:
-.Bl -tag -width ".Cm use_first_pass"
-.It Cm debug
-.Xr syslog 3
-debugging information at
-.Dv LOG_DEBUG
-level.
-.It Cm no_warn
-suppress warning messages to the user.
-These messages include
-reasons why the user's
-authentication attempt was declined.
-.It Cm use_first_pass
-If the authentication module is not the first in the stack,
-and a previous module obtained the user's password, that password is
-used to authenticate the user.
-If this fails, the authentication
-module returns failure without prompting the user for a password.
-This option has no effect if the authentication module is
-the first in the stack, or if no previous modules obtained the
-user's password.
-.It Cm try_first_pass
-This option is similar to the
-.Cm use_first_pass
-option, except that if the previously obtained password fails, the
-user is prompted for another password.
-.It Cm forwardable
-Obtain forwardable Kerberos credentials for the user.
-.It Cm no_ccache
-Do not save the obtained credentials in a credentials cache.
-This is a
-useful option if the authentication module is used for services such
-as ftp or pop, where the user would not be able to destroy them.
-[This
-is not a recommendation to use the module for those services.]
-.It Cm ccache Ns = Ns Ar name
-Use
-.Ar name
-as the credentials cache.
-.Ar name
-must be in the form
-.Ar type : Ns Ar residual .
-The special tokens
-.Ql %u ,
-to designate the decimal UID of the user;
-and
-.Ql %p ,
-to designate the current process ID; can be used in
-.Ar name .
-.El
-.Ss Kerberos 5 Account Management Module
-The Kerberos 5 account management component
-provides a function to perform account management,
-.Fn pam_sm_acct_mgmt .
-The function verifies that the authenticated principal is allowed
-to login to the local user account by calling
-.Fn krb5_kuserok
-(which checks the user's
-.Pa .k5login
-file).
-.Ss Kerberos 5 Password Management Module
-The Kerberos 5 password management component
-provides a function to change passwords
-.Pq Fn pam_sm_chauthtok .
-The username supplied (the
-user running the
-.Xr passwd 1
-command, or the username given as an argument) is mapped into
-a Kerberos principal name, using the same technique as in
-the authentication module.
-Note that if a realm name was
-explicitly supplied during authentication, but not during
-a password change, the mapping
-done by the password management module may not result in the
-same principal as was used for authentication.
-.Pp
-Unlike when
-changing a
-.Ux
-password, the password management module will
-allow any user to change any principal's password (if the user knows
-the principal's old password, of course).
-Also unlike
-.Ux ,
-root
-is always prompted for the principal's old password.
-.Pp
-The password management module uses the same heuristics as
-.Xr kpasswd 1
-to determine how to contact the Kerberos password server.
-.Pp
-The following options may be passed to the password management
-module:
-.Bl -tag -width ".Cm use_first_pass"
-.It Cm debug
-.Xr syslog 3
-debugging information at
-.Dv LOG_DEBUG
-level.
-.It Cm use_first_pass
-If the password management module is not the first in the stack,
-and a previous module obtained the user's old password, that password is
-used to authenticate the user.
-If this fails, the password
-management
-module returns failure without prompting the user for the old password.
-If successful, the new password entered to the previous module is also
-used as the new Kerberos password.
-If the new password fails,
-the password management module returns failure without
-prompting the user for a new password.
-.It Cm try_first_pass
-This option is similar to the
-.Cm use_first_pass
-option, except that if the previously obtained old or new passwords fail,
-the user is prompted for them.
-.El
-.Ss Kerberos 5 Session Management Module
-The Kerberos 5 session management component
-provides functions to initiate
-.Pq Fn pam_sm_open_session
-and terminate
-.Pq Fn pam_sm_close_session
-sessions.
-Since session management is not defined under Kerberos 5,
-both of these functions simply return success.
-They are provided
-only because of the naming conventions for PAM modules.
-.Sh ENVIRONMENT
-.Bl -tag -width "KRB5CCNAME"
-.It Ev KRB5CCNAME
-Location of the credentials cache.
-.El
-.Sh FILES
-.Bl -tag -width ".Pa /tmp/krb5cc_ Ns Ar uid" -compact
-.It Pa /tmp/krb5cc_ Ns Ar uid
-default credentials cache
-.Ar ( uid
-is the decimal UID of the user).
-.It Pa $HOME/.k5login
-file containing Kerberos principals that are allowed access.
-.El
-.Sh SEE ALSO
-.Xr kdestroy 1 ,
-.Xr passwd 1 ,
-.Xr syslog 3 ,
-.Xr pam.conf 5 ,
-.Xr pam 8
-.Sh NOTES
-Applications should not call
-.Fn pam_authenticate
-more than once between calls to
-.Fn pam_start
-and
-.Fn pam_end
-when using the Kerberos 5 PAM module.
diff --git a/lib/pam_module/pam_krb5/pam_krb5.c b/lib/pam_module/pam_krb5/pam_krb5.c
deleted file mode 100644 (file)
index a30a877..0000000
+++ /dev/null
@@ -1,970 +0,0 @@
-/*-
- * This pam_krb5 module contains code that is:
- *   Copyright (c) Derrick J. Brashear, 1996. All rights reserved.
- *   Copyright (c) Frank Cusack, 1999-2001. All rights reserved.
- *   Copyright (c) Jacques A. Vidrine, 2000-2001. All rights reserved.
- *   Copyright (c) Nicolas Williams, 2001. All rights reserved.
- *   Copyright (c) Perot Systems Corporation, 2001. All rights reserved.
- *   Copyright (c) Mark R V Murray, 2001.  All rights reserved.
- *   Copyright (c) Networks Associates Technology, Inc., 2002-2005.
- *       All rights reserved.
- *
- * Portions of this software were developed for the FreeBSD Project by
- * ThinkSec AS and NAI Labs, the Security Research Division of Network
- * Associates, Inc.  under DARPA/SPAWAR contract N66001-01-C-8035
- * ("CBOSS"), as part of the DARPA CHATS research program.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notices, 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.
- *
- * ALTERNATIVELY, this product may be distributed under the terms of
- * the GNU Public License, in which case the provisions of the GPL are
- * required INSTEAD OF the above restrictions.  (This clause is
- * necessary due to a potential bad interaction between the 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 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.
- *
- * $FreeBSD: src/lib/libpam/modules/pam_krb5/pam_krb5.c,v 1.23 2005/07/07 14:16:38 kensmith Exp $
- * $DragonFly: src/lib/pam_module/pam_krb5/pam_krb5.c,v 1.2 2006/08/03 16:40:46 swildner Exp $
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <limits.h>
-#include <pwd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <unistd.h>
-
-#include <krb5.h>
-#include <com_err.h>
-
-#define        PAM_SM_AUTH
-#define        PAM_SM_ACCOUNT
-#define        PAM_SM_PASSWORD
-
-#include <security/pam_appl.h>
-#include <security/pam_modules.h>
-#include <security/pam_mod_misc.h>
-#include <security/openpam.h>
-
-#define        COMPAT_HEIMDAL
-/* #define     COMPAT_MIT */
-
-static int     verify_krb_v5_tgt(krb5_context, krb5_ccache, char *, int);
-static void    cleanup_cache(pam_handle_t *, void *, int);
-static const   char *compat_princ_component(krb5_context, krb5_principal, int);
-static void    compat_free_data_contents(krb5_context, krb5_data *);
-
-#define USER_PROMPT            "Username: "
-#define PASSWORD_PROMPT                "Password:"
-#define NEW_PASSWORD_PROMPT    "New Password:"
-
-#define PAM_OPT_CCACHE         "ccache"
-#define PAM_OPT_DEBUG          "debug"
-#define PAM_OPT_FORWARDABLE    "forwardable"
-#define PAM_OPT_NO_CCACHE      "no_ccache"
-#define PAM_OPT_REUSE_CCACHE   "reuse_ccache"
-
-/*
- * authentication management
- */
-PAM_EXTERN int
-pam_sm_authenticate(pam_handle_t *pamh, int flags __unused,
-    int argc __unused, const char *argv[] __unused)
-{
-       krb5_error_code krbret;
-       krb5_context pam_context;
-       krb5_creds creds;
-       krb5_principal princ;
-       krb5_ccache ccache;
-       krb5_get_init_creds_opt opts;
-       struct passwd *pwd;
-       int retval;
-       const void *ccache_data;
-       const char *user, *pass;
-       const void *sourceuser, *service;
-       char *principal, *princ_name, *ccache_name, luser[32], *srvdup;
-
-       retval = pam_get_user(pamh, &user, USER_PROMPT);
-       if (retval != PAM_SUCCESS)
-               return (retval);
-
-       PAM_LOG("Got user: %s", user);
-
-       retval = pam_get_item(pamh, PAM_RUSER, &sourceuser);
-       if (retval != PAM_SUCCESS)
-               return (retval);
-
-       PAM_LOG("Got ruser: %s", (const char *)sourceuser);
-
-       service = NULL;
-       pam_get_item(pamh, PAM_SERVICE, &service);
-       if (service == NULL)
-               service = "unknown";
-
-       PAM_LOG("Got service: %s", (const char *)service);
-
-       krbret = krb5_init_context(&pam_context);
-       if (krbret != 0) {
-               PAM_VERBOSE_ERROR("Kerberos 5 error");
-               return (PAM_SERVICE_ERR);
-       }
-
-       PAM_LOG("Context initialised");
-
-       krb5_get_init_creds_opt_init(&opts);
-
-       if (openpam_get_option(pamh, PAM_OPT_FORWARDABLE))
-               krb5_get_init_creds_opt_set_forwardable(&opts, 1);
-
-       PAM_LOG("Credentials initialised");
-
-       krbret = krb5_cc_register(pam_context, &krb5_mcc_ops, FALSE);
-       if (krbret != 0 && krbret != KRB5_CC_TYPE_EXISTS) {
-               PAM_VERBOSE_ERROR("Kerberos 5 error");
-               retval = PAM_SERVICE_ERR;
-               goto cleanup3;
-       }
-
-       PAM_LOG("Done krb5_cc_register()");
-
-       /* Get principal name */
-       if (openpam_get_option(pamh, PAM_OPT_AUTH_AS_SELF))
-               asprintf(&principal, "%s/%s", (const char *)sourceuser, user);
-       else
-               principal = strdup(user);
-
-       PAM_LOG("Created principal: %s", principal);
-
-       krbret = krb5_parse_name(pam_context, principal, &princ);
-       free(principal);
-       if (krbret != 0) {
-               PAM_LOG("Error krb5_parse_name(): %s",
-                   krb5_get_err_text(pam_context, krbret));
-               PAM_VERBOSE_ERROR("Kerberos 5 error");
-               retval = PAM_SERVICE_ERR;
-               goto cleanup3;
-       }
-
-       PAM_LOG("Done krb5_parse_name()");
-
-       /* Now convert the principal name into something human readable */
-       princ_name = NULL;
-       krbret = krb5_unparse_name(pam_context, princ, &princ_name);
-       if (krbret != 0) {
-               PAM_LOG("Error krb5_unparse_name(): %s",
-                   krb5_get_err_text(pam_context, krbret));
-               PAM_VERBOSE_ERROR("Kerberos 5 error");
-               retval = PAM_SERVICE_ERR;
-               goto cleanup2;
-       }
-
-       PAM_LOG("Got principal: %s", princ_name);
-
-       /* Get password */
-       retval = pam_get_authtok(pamh, PAM_AUTHTOK, &pass, PASSWORD_PROMPT);
-       if (retval != PAM_SUCCESS)
-               goto cleanup2;
-
-       PAM_LOG("Got password");
-
-       /* Verify the local user exists (AFTER getting the password) */
-       if (strchr(user, '@')) {
-               /* get a local account name for this principal */
-               krbret = krb5_aname_to_localname(pam_context, princ,
-                   sizeof(luser), luser);
-               if (krbret != 0) {
-                       PAM_VERBOSE_ERROR("Kerberos 5 error");
-                       PAM_LOG("Error krb5_aname_to_localname(): %s",
-                           krb5_get_err_text(pam_context, krbret));
-                       retval = PAM_USER_UNKNOWN;
-                       goto cleanup2;
-               }
-
-               retval = pam_set_item(pamh, PAM_USER, luser);
-               if (retval != PAM_SUCCESS)
-                       goto cleanup2;
-
-               PAM_LOG("PAM_USER Redone");
-       }
-
-       pwd = getpwnam(user);
-       if (pwd == NULL) {
-               retval = PAM_USER_UNKNOWN;
-               goto cleanup2;
-       }
-
-       PAM_LOG("Done getpwnam()");
-
-       /* Get a TGT */
-       memset(&creds, 0, sizeof(krb5_creds));
-       krbret = krb5_get_init_creds_password(pam_context, &creds, princ,
-           pass, NULL, pamh, 0, NULL, &opts);
-       if (krbret != 0) {
-               PAM_VERBOSE_ERROR("Kerberos 5 error");
-               PAM_LOG("Error krb5_get_init_creds_password(): %s",
-                   krb5_get_err_text(pam_context, krbret));
-               retval = PAM_AUTH_ERR;
-               goto cleanup2;
-       }
-
-       PAM_LOG("Got TGT");
-
-       /* Generate a temporary cache */
-       krbret =&nb