The cirros image was rebuilt against the 3.13.0-83 kernel, drivers e1000e, igbvf...
[packages/trusty/cirros-testvm.git] / cirros-testvm / src-cirros / buildroot-2015.05 / package / python-pam / 0002-nofree.patch
diff --git a/cirros-testvm/src-cirros/buildroot-2015.05/package/python-pam/0002-nofree.patch b/cirros-testvm/src-cirros/buildroot-2015.05/package/python-pam/0002-nofree.patch
new file mode 100644 (file)
index 0000000..7de8801
--- /dev/null
@@ -0,0 +1,68 @@
+[PATCH] deallocate the conversation response only in case of error
+
+Fixes https://bugzilla.redhat.com/show_bug.cgi?id=679714
+
+Downloaded from:
+http://pkgs.fedoraproject.org/cgit/PyPAM.git/plain/PyPAM-0.5.0-nofree.patch
+
+Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
+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;
+