Ejemplo n.º 1
0
static int su_pam_conv(int num_msg, const struct pam_message **msg,
                       struct pam_response **resp, void *appdata_ptr)
{
	if (suppress_pam_info
	    && num_msg == 1
	    && msg
	    && msg[0]->msg_style == PAM_TEXT_INFO)
		return PAM_SUCCESS;

	return misc_conv(num_msg, msg, resp, appdata_ptr);
}
static int su_pam_conv(int num_msg, const struct pam_message** msg,
                       struct pam_response** resp, void* appdata_ptr) {
    if (suppress_pam_info
        && num_msg == 1
        && msg
        && msg[0]->msg_style == PAM_TEXT_INFO) {
        return PAM_SUCCESS;
    }
#ifdef HAVE_SECURITY_PAM_MISC_H
    return misc_conv(num_msg, msg, resp, appdata_ptr);
#elif defined(HAVE_SECURITY_OPENPAM_H)
    return openpam_ttyconv(num_msg, msg, resp, appdata_ptr);
#endif
}
Ejemplo n.º 3
0
int converse(int n, const struct pam_message **msg,
	struct pam_response **resp, void *appdata_ptr)
{
	struct pam_response *aresp;
	char *ack = "OK";
	int i;

	if (n <= 0 || n > PAM_MAX_NUM_MSG)
		return PAM_CONV_ERR;

	/* free in module if PAM_EX_DATA */
	if ((aresp = calloc(n, sizeof *aresp)) == NULL)
		return PAM_BUF_ERR;

	for (i=0; i<n; ++i) {
		aresp[i].resp_retcode = 0;
		aresp[i].resp = NULL;

		if (msg[i]->msg_style == PAM_EX_DATA) {
			data = (struct pam_user *)msg[i]->msg;
			if (data == NULL)
				goto fail;
			aresp[i].resp = ack;
		}
	}

	if (data) {	
		*resp = aresp;
		return PAM_SUCCESS;
	}
	
	F(aresp);
	return misc_conv(n, msg, resp, appdata_ptr);
	
fail:
        for (i = 0; i < n; ++i) {
                if (aresp[i].resp != NULL) {
                        memset(aresp[i].resp, 0, strlen(aresp[i].resp));
                        F(aresp[i].resp);
                }
        }
        memset(aresp, 0, n * sizeof *aresp);
	F(aresp);
	*resp = NULL;
	return PAM_CONV_ERR;
}