Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
path: root/compat/pam_get_authtok.c
diff options
context:
space:
mode:
Diffstat (limited to 'compat/pam_get_authtok.c')
-rw-r--r--compat/pam_get_authtok.c37
1 files changed, 2 insertions, 35 deletions
diff --git a/compat/pam_get_authtok.c b/compat/pam_get_authtok.c
index c471d34..225ab81 100644
--- a/compat/pam_get_authtok.c
+++ b/compat/pam_get_authtok.c
@@ -32,41 +32,12 @@
#include "compat/attrs.h"
#include "compat/pam_compat.h"
-static int prompt_passwd(struct pam_conv *conv,const char *prompt,
- char **passwd)
-{
- struct pam_message msg,*msgs[1];
- struct pam_response *resp;
- int rc;
- /* provide fallback */
- *passwd=NULL;
- /* set up prompt */
- msg.msg_style=PAM_PROMPT_ECHO_OFF;
- msg.msg=prompt;
- msgs[0]=&msg;
- resp=NULL;
- rc=conv->conv(1,(const struct pam_message **)msgs,&resp,conv->appdata_ptr);
- if (rc!=PAM_SUCCESS)
- return rc;
- else if (resp==NULL)
- return PAM_CONV_ERR;
- else if (resp[0].resp==NULL)
- {
- free(resp);
- return PAM_CONV_ERR;
- }
- *passwd=resp[0].resp;
- resp[0].resp=NULL;
- free(resp);
- return PAM_SUCCESS;
-}
int pam_get_authtok(pam_handle_t *pamh,int item,const char **authtok,const char *prompt)
{
int rc;
char *passwd=NULL,*retype_passwd=NULL;
const void *oldauthtok;
- struct pam_conv *conv;
char retype_prompt[80];
/* first try to see if the value is already on the stack */
*authtok=NULL;
@@ -89,18 +60,14 @@ int pam_get_authtok(pam_handle_t *pamh,int item,const char **authtok,const char
else
prompt=(prompt!=NULL)?prompt:"Password: ";
}
- /* get PAM_CONV */
- rc=pam_get_item(pamh,PAM_CONV,(const void **)&conv);
- if (rc!=PAM_SUCCESS)
- return rc;
/* prepare prompt and get password */
- rc=prompt_passwd(conv,prompt,&passwd);
+ rc=pam_prompt(pamh,PAM_PROMPT_ECHO_OFF,&passwd,"%s",prompt);
if (rc!=PAM_SUCCESS)
return rc;
/* if a second prompt should be presented, do it */
if (*retype_prompt)
{
- rc=prompt_passwd(conv,retype_prompt,&retype_passwd);
+ rc=pam_prompt(pamh,PAM_PROMPT_ECHO_OFF,&retype_passwd,"%s",retype_prompt);
/* check passwords */
if ((rc==PAM_SUCCESS)&&(strcmp(retype_passwd,passwd)!=0))
rc=PAM_AUTHTOK_RECOVERY_ERR;