diff --git a/PAMmodule.c b/PAMmodule.c index 03cb799..a7ff8a5 100644 --- a/PAMmodule.c +++ b/PAMmodule.c @@ -24,8 +24,6 @@ typedef struct { char *service; char *user; PyObject *callback; - struct pam_response *response_data; - int response_len; PyObject *user_data; void *dlh1, *dlh2; } PyPAMObject; @@ -54,15 +52,6 @@ static int PyPAM_conv(int num_msg, const struct pam_message **msg, Py_INCREF(self); - if (NULL != self->response_data) { - for (int i = 0; i < self->response_len; i++) { - free(self->response_data[0].resp); - } - free(self->response_data); - self->response_data = NULL; - self->response_len = 0; - } - PyObject* msgList = PyList_New(num_msg); for (int i = 0; i < num_msg; i++) { @@ -92,6 +81,10 @@ static int PyPAM_conv(int num_msg, const struct pam_message **msg, char* resp_text; int resp_retcode = 0; if (!PyArg_ParseTuple(respTuple, "si", &resp_text, &resp_retcode)) { + while (i > 0) { + free((--spr)->resp); + --i; + } free(*resp); Py_DECREF(respList); return PAM_CONV_ERR; @@ -100,10 +93,6 @@ static int PyPAM_conv(int num_msg, const struct pam_message **msg, spr->resp_retcode = resp_retcode; Py_DECREF(respTuple); } - - // Save this so we can free it later. - self->response_data = *resp; - self->response_len = PyList_Size(respList); Py_DECREF(respList); @@ -144,8 +133,6 @@ static PyObject * PyPAM_pam(PyObject *self, PyObject *args) p->user = NULL; Py_INCREF(Py_None); p->callback = Py_None; - p->response_data = NULL; - p->response_len = 0; Py_INCREF(Py_None); p->user_data = Py_None;