From d1623a3eec7265ad6be1b13292d19718d7816478 Mon Sep 17 00:00:00 2001 From: Thorsten Kukuk Date: Sun, 12 Mar 2006 10:26:29 +0000 Subject: Relevant BUGIDs: Purpose of commit: bugfix/new feature Commit summary: --------------- 2006-03-12 Thorsten Kukuk * libpam/pam_item.c (pam_get_user): Check for valid pamh before using it. * tests/tst-pam_get_user.c: New. --- libpam/pam_item.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'libpam') diff --git a/libpam/pam_item.c b/libpam/pam_item.c index 105a9de7..52efe80b 100644 --- a/libpam/pam_item.c +++ b/libpam/pam_item.c @@ -30,7 +30,7 @@ int pam_set_item (pam_handle_t *pamh, int item_type, const void *item) D(("called")); IF_NO_PAMH("pam_set_item", pamh, PAM_SYSTEM_ERR); - + retval = PAM_SUCCESS; switch (item_type) { @@ -118,7 +118,7 @@ int pam_set_item (pam_handle_t *pamh, int item_type, const void *item) retval = PAM_PERM_DENIED; } else { struct pam_conv *tconv; - + if ((tconv= (struct pam_conv *) malloc(sizeof(struct pam_conv)) ) == NULL) { @@ -223,7 +223,7 @@ int pam_get_item (const pam_handle_t *pamh, int item_type, const void **item) default: retval = PAM_BAD_ITEM; } - + return retval; } @@ -239,13 +239,15 @@ int pam_get_user(pam_handle_t *pamh, const char **user, const char *prompt) struct pam_response *resp; D(("called.")); - if (user == NULL) { /* ensure that the module has supplied a destination */ + + IF_NO_PAMH("pam_get_user", pamh, PAM_SYSTEM_ERR); + + if (user == NULL) { + /* ensure that the module has supplied a destination */ pam_syslog(pamh, LOG_ERR, "pam_get_user: nowhere to record username"); return PAM_PERM_DENIED; } else *user = NULL; - - IF_NO_PAMH("pam_get_user", pamh, PAM_SYSTEM_ERR); if (pamh->pam_conversation == NULL) { pam_syslog(pamh, LOG_ERR, "pam_get_user: no conv element in pamh"); @@ -261,13 +263,12 @@ int pam_get_user(pam_handle_t *pamh, const char **user, const char *prompt) return pamh->former.fail_user; /* will need a prompt */ - use_prompt = prompt; - if (use_prompt == NULL) { - use_prompt = pamh->prompt; - if (use_prompt == NULL) { - use_prompt = _("login:"); - } - } + if (prompt != NULL) + use_prompt = prompt; + else if (pamh->prompt != NULL) + use_prompt = pamh->prompt; + else + use_prompt = _("login:"); /* If we are resuming an old conversation, we verify that the prompt is the same. Anything else is an error. */ -- cgit v1.2.3