2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
10 #include <afsconfig.h>
11 #include <afs/param.h>
24 #include <security/pam_appl.h>
25 #include "afs_pam_msg.h"
26 #include "afs_message.h"
30 int pam_afs_printf(struct pam_conv *pam_convp, int error, int fmt_msgid, ...)
33 char buf[PAM_MAX_MSG_SIZE];
36 struct pam_message mesg;
37 struct pam_message *mesgp = &mesg;
38 struct pam_response *resp = NULL;
41 if (pam_convp == NULL || pam_convp->conv == NULL)
44 fmt_msg = pam_afs_message(fmt_msgid, &freeit);
45 va_start(args, fmt_msgid);
46 vsprintf(buf, fmt_msg, args);
48 if (freeit) free(fmt_msg);
50 mesg.msg_style = error ? PAM_ERROR_MSG : PAM_TEXT_INFO;
52 errcode = (*(pam_convp->conv))(1, &mesgp, &resp, pam_convp->appdata_ptr);
54 if (resp->resp) free(resp->resp);
61 int pam_afs_prompt(struct pam_conv *pam_convp, char **response,
62 int echo, int fmt_msgid, ...)
65 char buf[PAM_MAX_MSG_SIZE];
68 struct pam_message mesg;
69 struct pam_message *mesgp = &mesg;
70 struct pam_response *resp = NULL;
73 if (pam_convp == NULL || pam_convp->conv == NULL || response == NULL)
78 fmt_msg = pam_afs_message(fmt_msgid, &freeit);
79 va_start(args, fmt_msgid);
80 vsprintf(buf, fmt_msg, args);
82 if (freeit) free(fmt_msg);
84 mesg.msg_style = echo ? PAM_PROMPT_ECHO_ON : PAM_PROMPT_ECHO_OFF;
87 errcode = (*(pam_convp->conv))(1, &mesgp, &resp, pam_convp->appdata_ptr);
89 *response = resp->resp;
91 free(resp); /* but not resp->resp */