public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] gentoo-x86 commit in dev-python/pypam/files: PyPAM-0.5.0-return-value.patch PyPAM-0.5.0-dealloc.patch PyPAM-0.5.0-nofree.patch PyPAM-python3-support.patch PyPAM-0.5.0-memory-errors.patch
@ 2015-06-13 14:13 Manuel Rueger (mrueg)
  0 siblings, 0 replies; only message in thread
From: Manuel Rueger (mrueg) @ 2015-06-13 14:13 UTC (permalink / raw
  To: gentoo-commits

mrueg       15/06/13 14:13:35

  Added:                PyPAM-0.5.0-return-value.patch
                        PyPAM-0.5.0-dealloc.patch PyPAM-0.5.0-nofree.patch
                        PyPAM-python3-support.patch
                        PyPAM-0.5.0-memory-errors.patch
  Log:
  Apply patches from Fedora fixing security bug #407603 and add support for Python3.
  
  (Portage version: 2.2.20/cvs/Linux x86_64, signed Manifest commit with key )

Revision  Changes    Path
1.1                  dev-python/pypam/files/PyPAM-0.5.0-return-value.patch

file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-python/pypam/files/PyPAM-0.5.0-return-value.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-python/pypam/files/PyPAM-0.5.0-return-value.patch?rev=1.1&content-type=text/plain

Index: PyPAM-0.5.0-return-value.patch
===================================================================
diff -up PyPAM-0.5.0/PAMmodule.c.retval PyPAM-0.5.0/PAMmodule.c
--- PyPAM-0.5.0/PAMmodule.c.retval	2012-05-04 21:47:51.000000000 +0200
+++ PyPAM-0.5.0/PAMmodule.c	2012-05-07 09:42:27.690963206 +0200
@@ -248,7 +248,7 @@ static PyObject * PyPAM_setcred(PyObject
     result = pam_setcred(_self->pamh, flags);
     
     if (result != PAM_SUCCESS) {
-        PyErr_SetString(PyPAM_Error, "Not authenticated");
+        PyPAM_Err(_self, result);
         return NULL;
     }
 
@@ -270,7 +270,7 @@ static PyObject * PyPAM_acct_mgmt(PyObje
     result = pam_acct_mgmt(_self->pamh, flags);
     
     if (result != PAM_SUCCESS) {
-        PyErr_SetString(PyPAM_Error, "Not authenticated");
+        PyPAM_Err(_self, result);
         return NULL;
     }
 
@@ -292,7 +292,7 @@ static PyObject * PyPAM_chauthtok(PyObje
     result = pam_chauthtok(_self->pamh, flags);
     
     if (result != PAM_SUCCESS) {
-        PyErr_SetString(PyPAM_Error, "Not authenticated");
+        PyPAM_Err(_self, result);
         return NULL;
     }
 
@@ -314,7 +314,7 @@ static PyObject * PyPAM_open_session(PyO
     result = pam_open_session(_self->pamh, flags);
     
     if (result != PAM_SUCCESS) {
-        PyErr_SetString(PyPAM_Error, "Not authenticated");
+        PyPAM_Err(_self, result);
         return NULL;
     }
 
@@ -336,7 +336,7 @@ static PyObject * PyPAM_close_session(Py
     result = pam_close_session(_self->pamh, flags);
     
     if (result != PAM_SUCCESS) {
-        PyErr_SetString(PyPAM_Error, "Not authenticated");
+        PyPAM_Err(_self, result);
         return NULL;
     }
 
@@ -433,7 +433,7 @@ static PyObject * PyPAM_putenv(PyObject
     result = pam_putenv(_self->pamh, val);
     
     if (result != PAM_SUCCESS) {
-        PyErr_SetString(PyPAM_Error, "Not authenticated");
+        PyPAM_Err(_self, result);
         return NULL;
     }
 



1.1                  dev-python/pypam/files/PyPAM-0.5.0-dealloc.patch

file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-python/pypam/files/PyPAM-0.5.0-dealloc.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-python/pypam/files/PyPAM-0.5.0-dealloc.patch?rev=1.1&content-type=text/plain

Index: PyPAM-0.5.0-dealloc.patch
===================================================================
diff -up PyPAM-0.5.0/PAMmodule.c.dealloc PyPAM-0.5.0/PAMmodule.c
--- PyPAM-0.5.0/PAMmodule.c.dealloc	2011-01-17 22:48:22.000000000 +0100
+++ PyPAM-0.5.0/PAMmodule.c	2011-01-18 21:24:59.000000000 +0100
@@ -538,10 +538,11 @@ static void PyPAM_dealloc(PyPAMObject *s
     free(self->service);
     free(self->user);
     free(self->conv);
-    pam_end(self->pamh, PAM_SUCCESS);
+    if (self->pamh)
+        pam_end(self->pamh, PAM_SUCCESS);
     dlclose(self->dlh2);
     dlclose(self->dlh1);
-    PyMem_DEL(self);
+    PyObject_Del(self);
 }
 
 static PyObject * PyPAM_getattr(PyPAMObject *self, char *name)



1.1                  dev-python/pypam/files/PyPAM-0.5.0-nofree.patch

file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-python/pypam/files/PyPAM-0.5.0-nofree.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-python/pypam/files/PyPAM-0.5.0-nofree.patch?rev=1.1&content-type=text/plain

Index: PyPAM-0.5.0-nofree.patch
===================================================================
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;
     



1.1                  dev-python/pypam/files/PyPAM-python3-support.patch

file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-python/pypam/files/PyPAM-python3-support.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-python/pypam/files/PyPAM-python3-support.patch?rev=1.1&content-type=text/plain

Index: PyPAM-python3-support.patch
===================================================================
--- PAMmodule.c.python3	2014-06-24 11:29:10.958299393 +0200
+++ PAMmodule.c	2014-06-24 15:20:02.728118493 +0200
@@ -15,6 +15,14 @@
 #include <stdio.h>
 #include <dlfcn.h>
 
+#if PY_MAJOR_VERSION >= 3
+#define IS_PY3K
+#else
+// include bytesobject.h to map PyBytes_* to PyString_*
+#include <bytesobject.h>
+#endif
+
+
 static PyObject *PyPAM_Error;
 
 typedef struct {
@@ -28,7 +36,11 @@
     void                *dlh1, *dlh2;
 } PyPAMObject;
 
+#ifdef IS_PY3K
+static PyTypeObject PyPAMObject_Type;
+#else
 staticforward PyTypeObject PyPAMObject_Type;
+#endif
 
 static void PyPAM_Err(PyPAMObject *self, int result)
 {
@@ -139,7 +151,6 @@
         return NULL;
     }
 
-    PyPAMObject_Type.ob_type = &PyType_Type;
     p = (PyPAMObject *) PyObject_NEW(PyPAMObject, &PyPAMObject_Type);
 
     if (p == NULL)
@@ -562,35 +573,44 @@
     PyObject_Del(self);
 }
 
-static PyObject * PyPAM_getattr(PyPAMObject *self, char *name)
-{
-    return Py_FindMethod(PyPAMObject_Methods, (PyObject *) self, name);
-}
-
 static PyObject * PyPAM_repr(PyPAMObject *self)
 {
     char                buf[1024];
     
     snprintf(buf, 1024, "<pam object, service=\"%s\", user=\"%s\", conv=%p, pamh=%p>",
         self->service, self->user, self->conv, self->pamh);
-    return PyString_FromString(buf);
+    return PyBytes_FromString(buf);
 }
 
 static PyTypeObject PyPAMObject_Type = {
-    PyObject_HEAD_INIT(0)    /* Must fill in type value later */
-    0,
-    "pam",
-    sizeof(PyPAMObject),
-    0,
-    (destructor)PyPAM_dealloc,        /*tp_dealloc*/
-    0,        /*tp_print*/
-    (getattrfunc)PyPAM_getattr,        /*tp_getattr*/
-    0,        /*tp_setattr*/
-    0,        /*tp_compare*/
-    (reprfunc)PyPAM_repr,            /*tp_repr*/
-    0,        /*tp_as_number*/
-    0,        /*tp_as_sequence*/
-    0,        /*tp_as_mapping*/
+    PyVarObject_HEAD_INIT(NULL, 0)    /* Must fill in type value later */
+    "pam",                              /* tp_name */
+    sizeof(PyPAMObject),                /* tp_basicsize */
+    0,                                  /* tp_itemsize */
+    (destructor)PyPAM_dealloc,          /* tp_dealloc */
+    0,                                  /* tp_print */
+    0,                                  /* tp_getattr */
+    0,                                  /* tp_setattr */
+    0,                                  /* tp_compare */
+    (reprfunc)PyPAM_repr,               /* tp_repr */
+    0,                                  /* tp_as_number */
+    0,                                  /* tp_as_sequence */
+    0,                                  /* tp_as_mapping */
+    0,                                  /* tp_hash */
+    0,                                  /* tp_call */
+    0,                                  /* tp_str */
+    PyObject_GenericGetAttr,            /* tp_getattro */
+    0,                                  /* tp_setattro */
+    0,                                  /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT,                 /* tp_flags */
+    "PyPAM",                            /* tp_doc */
+    0,                                  /* tp_traverse */
+    0,                                  /* tp_clear */
+    0,                                  /* tp_richcompare */
+    0,                                  /* tp_weaklistoffset */
+    0,                                  /* tp_iter */
+    0,                                  /* tp_iternext */
+    PyPAMObject_Methods,                /* tp_methods */
 };
 
 static PyMethodDef PyPAM_Methods[] = {
@@ -607,7 +627,12 @@
  */
 static void insint(PyObject *d, char *name, int value)
 {
-    PyObject*        v = PyInt_FromLong((long) value);
+    PyObject*        v;
+#ifdef IS_PY3K
+    v = PyLong_FromLong((long) value);
+#else
+    v = PyInt_FromLong((long) value);
+#endif
 
     if (!v || PyDict_SetItemString(d, name, v))
         PyErr_Clear();
@@ -615,19 +640,42 @@
     Py_XDECREF(v);
 }
 
+#ifdef IS_PY3K
+static struct PyModuleDef pamdef = {
+        PyModuleDef_HEAD_INIT,
+        "PAM",
+        NULL,
+        -1,
+        PyPAM_Methods,
+        NULL,
+        NULL,
+        NULL,
+        NULL
+};
+
+#define INITERROR return NULL
+PyObject *PyInit_PAM(void)
+
+#else
+#define INITERROR return
 void initPAM(void)
+#endif
 {
     PyObject            *m, *d;
 
+#ifdef IS_PY3K
+    m = PyModule_Create(&pamdef);
+#else
     m = Py_InitModule("PAM", PyPAM_Methods);
+#endif
     d = PyModule_GetDict(m);
     
     PyPAM_Error = PyErr_NewException("PAM.error", NULL, NULL);
     if (PyPAM_Error == NULL)
-        return;
+        INITERROR;
     PyDict_SetItemString(d, "error", PyPAM_Error);
 
-    PyPAMObject_Type.ob_type = &PyType_Type;
+    Py_TYPE(&PyPAMObject_Type) = &PyType_Type;
     PyPAMObject_Type.tp_doc = PyPAMObject_doc;
     Py_INCREF(&PyPAMObject_Type);
 
@@ -692,4 +740,7 @@
     insint(d, "PAM_BINARY_PROMPT", PAM_BINARY_PROMPT);
 #endif
 
+#ifdef IS_PY3K
+    return m;
+#endif
 }
--- setup.py.python3	2014-06-24 15:58:07.792172439 +0200
+++ setup.py	2014-06-24 15:58:13.714909021 +0200
@@ -12,7 +12,7 @@
     license='LGPL',
     ext_modules=[
         Extension(
-            'PAMmodule',
+            'PAM',
             ['PAMmodule.c'],
             libraries=['pam', 'pam_misc'],
             extra_compile_args = ['-std=c99'],
--- tests/PamTest.py.python3	2014-06-24 16:54:28.902998249 +0200
+++ tests/PamTest.py	2014-06-24 17:07:11.392094775 +0200
@@ -41,13 +41,13 @@
     def test_userdata_default(self):
         """The default value for userdata is None."""
     
-        self.failUnless(self.pam.get_userdata() is None)
+        self.assertTrue(self.pam.get_userdata() is None)
 
     def test_userdata(self):
         """The userdata getter and setter will store and return any data."""
     
         self.pam.set_userdata(1)
-        self.failUnless(self.pam.get_userdata() == 1)
+        self.assertTrue(self.pam.get_userdata() == 1)
 
     def test_start(self):
         """pam.start() works as expected."""



1.1                  dev-python/pypam/files/PyPAM-0.5.0-memory-errors.patch

file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-python/pypam/files/PyPAM-0.5.0-memory-errors.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-python/pypam/files/PyPAM-0.5.0-memory-errors.patch?rev=1.1&content-type=text/plain

Index: PyPAM-0.5.0-memory-errors.patch
===================================================================
diff -up PyPAM-0.5.0/PAMmodule.c.memory PyPAM-0.5.0/PAMmodule.c
--- PyPAM-0.5.0/PAMmodule.c.memory	2012-05-07 17:22:54.503914026 +0200
+++ PyPAM-0.5.0/PAMmodule.c	2012-05-07 17:23:15.644381942 +0200
@@ -37,33 +37,48 @@ static void PyPAM_Err(PyPAMObject *self,
 
     err_msg = pam_strerror(self->pamh, result);
     error = Py_BuildValue("(si)", err_msg, result);
-    Py_INCREF(PyPAM_Error);
     PyErr_SetObject(PyPAM_Error, error);
+    Py_XDECREF(error);
 }
 
 static int PyPAM_conv(int num_msg, const struct pam_message **msg,
     struct pam_response **resp, void *appdata_ptr)
 {
-    PyObject                *args;
-
+    PyObject *args, *msgList, *respList, *item;
+    struct pam_response *response, *spr;
     PyPAMObject* self = (PyPAMObject *) appdata_ptr;
+
     if (self->callback == NULL)
         return PAM_CONV_ERR;
 
     Py_INCREF(self);
 
-    PyObject* msgList = PyList_New(num_msg);
-    
+    msgList = PyList_New(num_msg);
+    if (msgList == NULL) {
+        Py_DECREF(self);
+        return PAM_CONV_ERR;
+    }
+
     for (int i = 0; i < num_msg; i++) {
-        PyList_SetItem(msgList, i,
-            Py_BuildValue("(si)", msg[i]->msg, msg[i]->msg_style));
+        item = Py_BuildValue("(si)", msg[i]->msg, msg[i]->msg_style);
+        if (item == NULL) {
+            Py_DECREF(msgList);
+            Py_DECREF(self);
+            return PAM_CONV_ERR;
+        }
+        PyList_SetItem(msgList, i, item);
     }
-    
+
     args = Py_BuildValue("(OO)", self, msgList);
-    PyObject* respList = PyEval_CallObject(self->callback, args);
+    if (args == NULL) {
+        Py_DECREF(self);
+	Py_DECREF(msgList);
+        return PAM_CONV_ERR;
+    }
+    respList = PyEval_CallObject(self->callback, args);
     Py_DECREF(args);
     Py_DECREF(self);
-    
+
     if (respList == NULL)
         return PAM_CONV_ERR;
 
@@ -71,11 +86,15 @@ static int PyPAM_conv(int num_msg, const
         Py_DECREF(respList);
         return PAM_CONV_ERR;
     }
-    
-    *resp = (struct pam_response *) malloc(
+
+    response = (struct pam_response *) malloc(
         PyList_Size(respList) * sizeof(struct pam_response));
+    if (response == NULL) {
+        Py_DECREF(respList);
+        return PAM_CONV_ERR;
+    }
+    spr = response;
 
-    struct pam_response* spr = *resp;
     for (int i = 0; i < PyList_Size(respList); i++, spr++) {
         PyObject* respTuple = PyList_GetItem(respList, i);
         char* resp_text;
@@ -85,7 +104,7 @@ static int PyPAM_conv(int num_msg, const
                 free((--spr)->resp);
                 --i;
             }
-            free(*resp);
+            free(response);
             Py_DECREF(respList);
             return PAM_CONV_ERR;
         }
@@ -95,7 +114,8 @@ static int PyPAM_conv(int num_msg, const
     }
 
     Py_DECREF(respList);
-    
+    *resp = response;
+
     return PAM_SUCCESS;
 }
 
@@ -122,7 +142,11 @@ static PyObject * PyPAM_pam(PyObject *se
     PyPAMObject_Type.ob_type = &PyType_Type;
     p = (PyPAMObject *) PyObject_NEW(PyPAMObject, &PyPAMObject_Type);
 
+    if (p == NULL)
+        return NULL;
+
     if ((spc = (struct pam_conv *) malloc(sizeof(struct pam_conv))) == NULL) {
+        Py_DECREF((PyObject *)p);
         PyErr_SetString(PyExc_MemoryError, "out of memory");
         return NULL;
     }
@@ -455,9 +479,15 @@ static PyObject * PyPAM_getenvlist(PyObj
     }
     
     retval = PyList_New(0);
+    if (retval == NULL)
+	return NULL;
     
     while ((cp = *(result++)) != NULL) {
         entry = Py_BuildValue("s", cp);
+        if (entry == NULL) {
+            Py_DECREF(retval);
+            return NULL;
+        }
         PyList_Append(retval, entry);
         Py_DECREF(entry);
     }





^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2015-06-13 14:13 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-06-13 14:13 [gentoo-commits] gentoo-x86 commit in dev-python/pypam/files: PyPAM-0.5.0-return-value.patch PyPAM-0.5.0-dealloc.patch PyPAM-0.5.0-nofree.patch PyPAM-python3-support.patch PyPAM-0.5.0-memory-errors.patch Manuel Rueger (mrueg)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox