Lines 207-212
Link Here
|
207 |
} |
207 |
} |
208 |
else if (ask_password && !ask_user) |
208 |
else if (ask_password && !ask_user) |
209 |
{ |
209 |
{ |
|
|
210 |
#if defined (HAVE_PAM_PROMPT) |
210 |
char *cresp = NULL; |
211 |
char *cresp = NULL; |
211 |
|
212 |
|
212 |
retval = pam_prompt (pamh, PAM_PROMPT_ECHO_OFF, &cresp, _("Password: ")); |
213 |
retval = pam_prompt (pamh, PAM_PROMPT_ECHO_OFF, &cresp, _("Password: ")); |
Lines 220-227
Link Here
|
220 |
} |
221 |
} |
221 |
*password = strdup (cresp ? cresp : ""); |
222 |
*password = strdup (cresp ? cresp : ""); |
222 |
_pam_drop (cresp); |
223 |
_pam_drop (cresp); |
223 |
} |
224 |
#else |
|
|
225 |
struct pam_message msg[1], *pmsg[1]; |
226 |
struct pam_response *resp; |
227 |
struct pam_conv *conv; |
228 |
void *conv_void; |
229 |
|
230 |
/* set up conversation call */ |
231 |
|
232 |
pmsg[0] = &msg[0]; |
233 |
msg[0].msg_style = PAM_PROMPT_ECHO_OFF; |
234 |
msg[0].msg = _("Password: "); |
235 |
resp = NULL; |
236 |
|
237 |
retval = pam_get_item (pamh, PAM_CONV, (const void **)&conv_void); |
238 |
conv = (struct pam_conv *) conv_void; |
224 |
|
239 |
|
|
|
240 |
if (retval == PAM_SUCCESS) |
241 |
{ |
242 |
retval = conv->conv (1, (const struct pam_message **)pmsg, |
243 |
&resp, conv->appdata_ptr); |
244 |
if (retval == PAM_CONV_AGAIN) |
245 |
retval = PAM_INCOMPLETE; |
246 |
if (retval != PAM_SUCCESS) |
247 |
return retval; |
248 |
} |
249 |
else |
250 |
return retval; |
251 |
|
252 |
if (resp) |
253 |
{ |
254 |
if (resp->resp) |
255 |
*password = strdup (resp->resp); |
256 |
else |
257 |
*password = strdup (""); |
258 |
_pam_drop_reply (resp, 1); |
259 |
} |
260 |
else |
261 |
return PAM_CONV_ERR; |
262 |
#endif |
263 |
} |
225 |
if (*password) |
264 |
if (*password) |
226 |
{ |
265 |
{ |
227 |
pam_set_item (pamh, PAM_AUTHTOK, *password); |
266 |
pam_set_item (pamh, PAM_AUTHTOK, *password); |