diff options
author | des <des@FreeBSD.org> | 2002-04-06 19:28:08 +0000 |
---|---|---|
committer | des <des@FreeBSD.org> | 2002-04-06 19:28:08 +0000 |
commit | 1b3dab89b21d32019ba4c46b362a853fcdb5a062 (patch) | |
tree | b87978cedb464f30255f48e186900d6a772bcb61 /contrib/openpam/lib/pam_get_user.c | |
parent | 7ca517bc656c2bf7403284f3b17155ffcae44089 (diff) | |
download | FreeBSD-src-1b3dab89b21d32019ba4c46b362a853fcdb5a062.zip FreeBSD-src-1b3dab89b21d32019ba4c46b362a853fcdb5a062.tar.gz |
MFOpenPAM: a slew of changes, mostly related to pam_get_authtok() (perforce
changes 9207, 9209, 9210, 9211, 9213, 9220)
Sponsored by: DARPA, NAI Labs
Diffstat (limited to 'contrib/openpam/lib/pam_get_user.c')
-rw-r--r-- | contrib/openpam/lib/pam_get_user.c | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/contrib/openpam/lib/pam_get_user.c b/contrib/openpam/lib/pam_get_user.c index 5e10f30..608614a 100644 --- a/contrib/openpam/lib/pam_get_user.c +++ b/contrib/openpam/lib/pam_get_user.c @@ -31,16 +31,20 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_get_user.c#10 $ + * $P4: //depot/projects/openpam/lib/pam_get_user.c#11 $ */ #include <sys/param.h> +#include <stdlib.h> + #include <security/pam_appl.h> #include <security/openpam.h> #include "openpam_impl.h" +const char user_prompt[] = "Login:"; + /* * XSSO 4.2.1 * XSSO 6 page 52 @@ -53,7 +57,7 @@ pam_get_user(pam_handle_t *pamh, const char **user, const char *prompt) { - char *p, *resp; + char *resp; int r; if (pamh == NULL || user == NULL) @@ -63,16 +67,18 @@ pam_get_user(pam_handle_t *pamh, if (r == PAM_SUCCESS) return (PAM_SUCCESS); if (prompt == NULL) { - if (pam_get_item(pamh, PAM_USER_PROMPT, - (const void **)&p) != PAM_SUCCESS || p == NULL) - prompt = "Login: "; + r = pam_get_item(pamh, PAM_USER_PROMPT, (const void **)&prompt); + if (r != PAM_SUCCESS || prompt == NULL) + prompt = user_prompt; } - r = pam_prompt(pamh, PAM_PROMPT_ECHO_ON, &resp, - "%s", prompt ? prompt : p); + r = pam_prompt(pamh, PAM_PROMPT_ECHO_ON, &resp, "%s", prompt); + if (r != PAM_SUCCESS) + return (r); + r = pam_set_item(pamh, PAM_USER, resp); + free(resp); if (r != PAM_SUCCESS) return (r); - *user = resp; - return (pam_set_item(pamh, PAM_USER, *user)); + return (pam_get_item(pamh, PAM_USER, (const void **)user)); } /* @@ -83,3 +89,18 @@ pam_get_user(pam_handle_t *pamh, * =pam_set_item * !PAM_SYMBOL_ERR */ + +/** + * The =pam_get_user function returns the name of the target user, as + * specified to =pam_start. If no user was specified, nor set using + * =pam_set_item, =pam_get_user will prompt for a user name. Either way, + * a pointer to the user name is stored in the location pointed to by the + * =user argument. + + * 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 that + * item is also =NULL, a hardcoded default prompt will be used. + * + * >pam_get_item + * >pam_get_authtok + */ |