summaryrefslogtreecommitdiffstats
path: root/contrib/openpam/lib/pam_get_user.c
diff options
context:
space:
mode:
authordes <des@FreeBSD.org>2002-04-06 19:28:08 +0000
committerdes <des@FreeBSD.org>2002-04-06 19:28:08 +0000
commit1b3dab89b21d32019ba4c46b362a853fcdb5a062 (patch)
treeb87978cedb464f30255f48e186900d6a772bcb61 /contrib/openpam/lib/pam_get_user.c
parent7ca517bc656c2bf7403284f3b17155ffcae44089 (diff)
downloadFreeBSD-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.c39
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
+ */
OpenPOWER on IntegriCloud