userinfo-pam.c revision 395cfd9f83ada53f9d434943c062cbe1c80bae2a
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen Based on auth_pam.c from popa3d by Solar Designer <solar@openwall.com>.
c0435c854a0e7246373b9752d163095cc4fbe985Timo Sirainen You're allowed to do whatever you like with this software (including
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen re-distribution in source and/or binary form, with or without
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen modification), provided that credit is given where it is due and any
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen modified versions are marked as such. There's absolutely no warranty.
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen#if !defined(_SECURITY_PAM_APPL_H) && !defined(LINUX_PAM)
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen/* Sun's PAM doesn't use const. we use a bit dirty hack to check it.
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen Originally it was just __sun__ check, but HP/UX also uses Sun's PAM
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen so I thought this might work better. */
c0435c854a0e7246373b9752d163095cc4fbe985Timo Sirainen/* Linux-PAM prior to 0.74 */
602a0434db30d8e3292d1c161a803d96a879a74fTimo Sirainenstatic int pam_userpass_conv(int num_msg, linux_const struct pam_message **msg,
07e4875d250e7a7157cd99132aafc773cf3cdf83Timo Sirainen struct pam_response **resp, void *appdata_ptr)
7d207b1e77a7b5e3fda640e353acfc86d261fedfTimo Sirainen /* @UNSAFE */
7d207b1e77a7b5e3fda640e353acfc86d261fedfTimo Sirainen struct pam_userpass *userpass = (struct pam_userpass *) appdata_ptr;
89e195dfb5c4b0efd9b9f459771a4467674e5b1fTimo Sirainen if (num_msg != 1 || msg[0]->msg_style != PAM_BINARY_PROMPT)
89e195dfb5c4b0efd9b9f459771a4467674e5b1fTimo Sirainen if (PAM_BP_RCONTROL(prompt) != PAM_BPC_SELECT ||
7e1f68ad71d3485f1882142837b01f7a98ca8467Timo Sirainen strncmp(input, USERPASS_AGENT_ID "/", USERPASS_AGENT_ID_LENGTH + 1))
c0435c854a0e7246373b9752d163095cc4fbe985Timo Sirainen if ((flags & USERPASS_USER_MASK) == USERPASS_USER_FIXED &&
65cb456a072219fa35b55695d476b0bf51e2d735Timo Sirainen if (!(*resp = malloc(sizeof(struct pam_response))))
char *string;
return PAM_CONV_ERR;
for (i = 0; i < num_msg; i++) {
case PAM_PROMPT_ECHO_ON:
case PAM_PROMPT_ECHO_OFF:
case PAM_ERROR_MSG:
case PAM_TEXT_INFO:
return PAM_CONV_ERR;
return PAM_SUCCESS;
char *item;
int status;
if (verbose) {
return status;
#ifdef HAVE_PAM_SETCRED
if (verbose) {
return status;
if (verbose) {
return status;
if (verbose) {
return status;
return PAM_SUCCESS;
if (verbose) {
return FALSE;
return FALSE;
return FALSE;
return FALSE;
return TRUE;
static void pam_deinit(void)