cleanup: use only one callback in PAM plugin, not two

This commit is contained in:
Sergei Golubchik 2019-01-12 21:36:26 +01:00
parent 3ab445819e
commit 3742f6f9aa
3 changed files with 10 additions and 24 deletions

View file

@ -109,15 +109,10 @@ static int conv(int n, const struct pam_message **msg,
param->buf[0] = msg[i]->msg_style == PAM_PROMPT_ECHO_ON ? 2 : 4;
PAM_DEBUG((stderr, "PAM: conv: send(%.*s)\n",
(int)(param->ptr - param->buf - 1), param->buf));
if (write_packet(param, param->buf, param->ptr - param->buf - 1))
pkt_len= roundtrip(param, param->buf, param->ptr - param->buf - 1, &pkt);
if (pkt_len < 0)
return PAM_CONV_ERR;
pkt_len = read_packet(param, &pkt);
if (pkt_len < 0)
{
PAM_DEBUG((stderr, "PAM: conv: recv() ERROR\n"));
return PAM_CONV_ERR;
}
PAM_DEBUG((stderr, "PAM: conv: recv(%.*s)\n", pkt_len, pkt));
/* allocate and copy the reply to the response array */
if (!((*resp)[i].resp= strndup((char*) pkt, pkt_len)))

View file

@ -26,22 +26,16 @@ struct param {
#include "auth_pam_tool.h"
static int write_packet(struct param *param __attribute__((unused)),
const unsigned char *buf, int buf_len)
static int roundtrip(struct param *param, const unsigned char *buf,
int buf_len, unsigned char **pkt)
{
unsigned char b= AP_CONV;
return write(1, &b, 1) < 1 ||
write_string(1, buf, buf_len);
}
static int read_packet(struct param *param, unsigned char **pkt)
{
if (write(1, &b, 1) < 1 || write_string(1, buf, buf_len))
return -1;
*pkt= (unsigned char *) param->buf;
return read_string(0, (char *) param->buf, (int) sizeof(param->buf)) - 1;
}
typedef struct st_mysql_server_auth_info
{
/**

View file

@ -21,14 +21,11 @@ struct param {
MYSQL_PLUGIN_VIO *vio;
};
static int write_packet(struct param *param, const unsigned char *buf,
int buf_len)
{
return param->vio->write_packet(param->vio, buf, buf_len);
}
static int read_packet(struct param *param, unsigned char **pkt)
static int roundtrip(struct param *param, const unsigned char *buf,
int buf_len, unsigned char **pkt)
{
if (param->vio->write_packet(param->vio, buf, buf_len))
return -1;
return param->vio->read_packet(param->vio, pkt);
}