diff options
author | Thorsten Kukuk <kukuk@thkukuk.de> | 2006-03-12 10:26:29 +0000 |
---|---|---|
committer | Thorsten Kukuk <kukuk@thkukuk.de> | 2006-03-12 10:26:29 +0000 |
commit | d1623a3eec7265ad6be1b13292d19718d7816478 (patch) | |
tree | 1acbe1be4282038d84ae9611d34fb255d5d3e2b8 /libpam/pam_item.c | |
parent | 993d5e30fa9085a05cc8231c49750e8bcc03170e (diff) | |
download | pam-d1623a3eec7265ad6be1b13292d19718d7816478.tar.gz pam-d1623a3eec7265ad6be1b13292d19718d7816478.tar.bz2 pam-d1623a3eec7265ad6be1b13292d19718d7816478.zip |
Relevant BUGIDs:
Purpose of commit: bugfix/new feature
Commit summary:
---------------
2006-03-12 Thorsten Kukuk <kukuk@thkukuk.de>
* libpam/pam_item.c (pam_get_user): Check for valid pamh before
using it.
* tests/tst-pam_get_user.c: New.
Diffstat (limited to 'libpam/pam_item.c')
-rw-r--r-- | libpam/pam_item.c | 27 |
1 files changed, 14 insertions, 13 deletions
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. */ |