The branch, master has been updated via 9aa0ed2 ldb:pyldb.c - "py_ldb_msg_element_get" - here we can safely use "unsigned int" for the element reference via ef4861d ldb:pyldb.c - "py_ldb_contains" - return only "0" not found, "1" found, "-1" error via 7bdbfc9 ldb:pyldb.c - most of the times "time_t" is defined as "long int" via 9e5ca72 ldb:pyldb.c - fix some "Py_ssize_t" output warnings via f6572e5 ldb:pyldb.c - use "Py_ssize_t" for counting list entries via 084c11d ldb:pyldb.c - fix indentation via af84b6d s4:pydsdb.c - use "Py_ssize_t" for Python list counters via 9f2d215 s4:pydsdb.c - introduce Python 2.4 compatibility defines from 4b97e7c s4:objectguid/repl_meta_data LDB module - deny "objectGUID" updates
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 9aa0ed2c3a74c6d72e42e4bc9e6077a50343fd38 Author: Matthias Dieter Wallnöfer <m...@samba.org> Date: Sat Nov 6 17:50:25 2010 +0100 ldb:pyldb.c - "py_ldb_msg_element_get" - here we can safely use "unsigned int" for the element reference We don't make use of "Py_List*" calls Autobuild-User: Matthias Dieter Wallnöfer <m...@samba.org> Autobuild-Date: Mon Nov 8 11:21:27 UTC 2010 on sn-devel-104 commit ef4861d9263d1a17396c58abc7ad0c5837a1b52c Author: Matthias Dieter Wallnöfer <m...@samba.org> Date: Sat Nov 6 17:49:18 2010 +0100 ldb:pyldb.c - "py_ldb_contains" - return only "0" not found, "1" found, "-1" error commit 7bdbfc96037640dbd352e9ddab9c5e1ded9502fa Author: Matthias Dieter Wallnöfer <m...@samba.org> Date: Sat Nov 6 16:29:27 2010 +0100 ldb:pyldb.c - most of the times "time_t" is defined as "long int" Therefore use a signed long int for conversions. http://stackoverflow.com/questions/471248/what-is-ultimately-a-time-t-typedef-to commit 9e5ca72afbe74d88a1da33b6957b0914262f106c Author: Matthias Dieter Wallnöfer <m...@samba.org> Date: Sat Nov 6 18:03:22 2010 +0100 ldb:pyldb.c - fix some "Py_ssize_t" output warnings commit f6572e5ffc62ac41d3a180e0636129b40980f9dd Author: Matthias Dieter Wallnöfer <m...@samba.org> Date: Sat Nov 6 17:48:39 2010 +0100 ldb:pyldb.c - use "Py_ssize_t" for counting list entries This seems to be the most appopriate type commit 084c11d600e61b3c1b4c36b8440c67b37731d16c Author: Matthias Dieter Wallnöfer <m...@samba.org> Date: Sat Nov 6 16:29:06 2010 +0100 ldb:pyldb.c - fix indentation commit af84b6d32514525a52e0b6529b36a53943fb7a7a Author: Matthias Dieter Wallnöfer <m...@samba.org> Date: Sat Nov 6 16:28:33 2010 +0100 s4:pydsdb.c - use "Py_ssize_t" for Python list counters Seems to be the most appropriate type commit 9f2d21561b85edde541d7dbc69ee1fe58c029f81 Author: Matthias Dieter Wallnöfer <m...@samba.org> Date: Sat Nov 6 17:54:36 2010 +0100 s4:pydsdb.c - introduce Python 2.4 compatibility defines ----------------------------------------------------------------------- Summary of changes: source4/dsdb/pydsdb.c | 13 +++++++++- source4/lib/ldb/pyldb.c | 62 +++++++++++++++++++++++++--------------------- 2 files changed, 46 insertions(+), 29 deletions(-) Changeset truncated at 500 lines: diff --git a/source4/dsdb/pydsdb.c b/source4/dsdb/pydsdb.c index db2185f..2471548 100644 --- a/source4/dsdb/pydsdb.c +++ b/source4/dsdb/pydsdb.c @@ -28,6 +28,17 @@ #include "auth/kerberos/kerberos.h" #include "librpc/rpc/pyrpc_util.h" +/* There's no Py_ssize_t in 2.4, apparently */ +#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 5 +typedef int Py_ssize_t; +typedef inquiry lenfunc; +typedef intargfunc ssizeargfunc; +#endif + +#ifndef Py_RETURN_NONE +#define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None +#endif + /* FIXME: These should be in a header file somewhere, once we finish moving * away from SWIG .. */ #define PyErr_LDB_OR_RAISE(py_ldb, ldb) \ @@ -319,7 +330,7 @@ static PyObject *py_dsdb_DsReplicaAttribute(PyObject *self, PyObject *args) struct drsuapi_DsReplicaAttribute *attr; TALLOC_CTX *tmp_ctx; WERROR werr; - int i; + Py_ssize_t i; if (!PyArg_ParseTuple(args, "OsO", &py_ldb, &ldap_display_name, &el_list)) { return NULL; diff --git a/source4/lib/ldb/pyldb.c b/source4/lib/ldb/pyldb.c index 7a6058f..acf8052 100644 --- a/source4/lib/ldb/pyldb.c +++ b/source4/lib/ldb/pyldb.c @@ -89,7 +89,7 @@ static PyObject *PyObject_FromLdbValue(struct ldb_context *ldb_ctx, static PyObject *PyLdbResult_FromResult(struct ldb_result *result) { PyObject *ret; - int i; + Py_ssize_t i; if (result == NULL) { Py_RETURN_NONE; } @@ -113,7 +113,7 @@ static struct ldb_result *PyLdbResult_AsResult(TALLOC_CTX *mem_ctx, PyObject *obj) { struct ldb_result *res; - int i; + Py_ssize_t i; if (obj == Py_None) return NULL; @@ -493,7 +493,7 @@ static const char **PyList_AsStringList(TALLOC_CTX *mem_ctx, PyObject *list, const char *paramname) { const char **ret; - int i; + Py_ssize_t i; if (!PyList_Check(list)) { PyErr_Format(PyExc_TypeError, "%s is not a list", paramname); return NULL; @@ -1425,13 +1425,14 @@ static int py_ldb_contains(PyLdbObject *self, PyObject *obj) struct ldb_context *ldb_ctx = PyLdb_AsLdbContext(self); struct ldb_dn *dn; struct ldb_result *result; + unsigned int count; int ret; - int count; if (!PyObject_AsDn(ldb_ctx, obj, ldb_ctx, &dn)) return -1; - ret = ldb_search(ldb_ctx, ldb_ctx, &result, dn, LDB_SCOPE_BASE, NULL, NULL); + ret = ldb_search(ldb_ctx, ldb_ctx, &result, dn, LDB_SCOPE_BASE, NULL, + NULL); if (ret != LDB_SUCCESS) { PyErr_SetLdbError(PyExc_LdbError, ret, ldb_ctx); return -1; @@ -1441,7 +1442,13 @@ static int py_ldb_contains(PyLdbObject *self, PyObject *obj) talloc_free(result); - return count; + if (count == 1) { + return 1; + } else if (count == 0) { + return 0; + } + + return -1; } static PySequenceMethods py_ldb_seq = { @@ -1688,8 +1695,9 @@ PyTypeObject PyLdbModule = { * @return New ldb_message_element, allocated as child of mem_ctx */ struct ldb_message_element *PyObject_AsMessageElement(TALLOC_CTX *mem_ctx, - PyObject *set_obj, int flags, - const char *attr_name) + PyObject *set_obj, + int flags, + const char *attr_name) { struct ldb_message_element *me; @@ -1713,14 +1721,14 @@ struct ldb_message_element *PyObject_AsMessageElement(TALLOC_CTX *mem_ctx, me->values[0].data = talloc_memdup(me, (uint8_t *)PyString_AsString(set_obj), me->values[0].length+1); } else if (PySequence_Check(set_obj)) { - int i; + Py_ssize_t i; me->num_values = PySequence_Size(set_obj); me->values = talloc_array(me, struct ldb_val, me->num_values); for (i = 0; i < me->num_values; i++) { PyObject *obj = PySequence_GetItem(set_obj, i); if (!PyString_Check(obj)) { PyErr_Format(PyExc_TypeError, - "Expected string as element %d in list", i); + "Expected string as element %zd in list", i); talloc_free(me); return NULL; } @@ -1738,10 +1746,10 @@ struct ldb_message_element *PyObject_AsMessageElement(TALLOC_CTX *mem_ctx, } -static PyObject *ldb_msg_element_to_set(struct ldb_context *ldb_ctx, - struct ldb_message_element *me) +static PyObject *ldb_msg_element_to_set(struct ldb_context *ldb_ctx, + struct ldb_message_element *me) { - int i; + Py_ssize_t i; PyObject *result; /* Python << 2.5 doesn't have PySet_New and PySet_Add. */ @@ -1757,10 +1765,10 @@ static PyObject *ldb_msg_element_to_set(struct ldb_context *ldb_ctx, static PyObject *py_ldb_msg_element_get(PyLdbMessageElementObject *self, PyObject *args) { - int i; - if (!PyArg_ParseTuple(args, "i", &i)) + unsigned int i; + if (!PyArg_ParseTuple(args, "I", &i)) return NULL; - if (i < 0 || i >= PyLdbMessageElement_AsMessageElement(self)->num_values) + if (i >= PyLdbMessageElement_AsMessageElement(self)->num_values) Py_RETURN_NONE; return PyObject_FromLdbValue(NULL, PyLdbMessageElement_AsMessageElement(self), @@ -1866,7 +1874,7 @@ static PyObject *py_ldb_msg_element_new(PyTypeObject *type, PyObject *args, PyOb el = talloc_zero(mem_ctx, struct ldb_message_element); if (py_elements != NULL) { - int i; + Py_ssize_t i; if (PyString_Check(py_elements)) { el->num_values = 1; el->values = talloc_array(el, struct ldb_val, 1); @@ -1880,8 +1888,7 @@ static PyObject *py_ldb_msg_element_new(PyTypeObject *type, PyObject *args, PyOb PyObject *item = PySequence_GetItem(py_elements, i); if (!PyString_Check(item)) { PyErr_Format(PyExc_TypeError, - "Expected string as element %d in list", - i); + "Expected string as element %zd in list", i); talloc_free(mem_ctx); return NULL; } @@ -1915,7 +1922,7 @@ static PyObject *py_ldb_msg_element_new(PyTypeObject *type, PyObject *args, PyOb static PyObject *py_ldb_msg_element_repr(PyLdbMessageElementObject *self) { char *element_str = NULL; - int i; + Py_ssize_t i; struct ldb_message_element *el = PyLdbMessageElement_AsMessageElement(self); PyObject *ret; @@ -1981,7 +1988,7 @@ static PyObject *py_ldb_msg_remove_attr(PyLdbMessageObject *self, PyObject *args static PyObject *py_ldb_msg_keys(PyLdbMessageObject *self) { struct ldb_message *msg = PyLdbMessage_AsMessage(self); - int i, j = 0; + Py_ssize_t i, j = 0; PyObject *obj = PyList_New(msg->num_elements+(msg->dn != NULL?1:0)); if (msg->dn != NULL) { PyList_SetItem(obj, j, PyString_FromString("dn")); @@ -2041,9 +2048,8 @@ static PyObject *py_ldb_msg_get(PyLdbMessageObject *self, PyObject *args) static PyObject *py_ldb_msg_items(PyLdbMessageObject *self) { struct ldb_message *msg = PyLdbMessage_AsMessage(self); - int i, j; + Py_ssize_t i, j = 0; PyObject *l = PyList_New(msg->num_elements + (msg->dn == NULL?0:1)); - j = 0; if (msg->dn != NULL) { PyList_SetItem(l, 0, Py_BuildValue("(sO)", "dn", PyLdbDn_FromDn(msg->dn))); j++; @@ -2588,14 +2594,14 @@ static PyObject *py_register_module(PyObject *module, PyObject *args) static PyObject *py_timestring(PyObject *module, PyObject *args) { - time_t t; - unsigned long val; + /* most times "time_t" is a signed integer type with 32 or 64 bit: + * http://stackoverflow.com/questions/471248/what-is-ultimately-a-time-t-typedef-to */ + long int t_val; char *tresult; PyObject *ret; - if (!PyArg_ParseTuple(args, "l", &val)) + if (!PyArg_ParseTuple(args, "l", &t_val)) return NULL; - t = (time_t)val; - tresult = ldb_timestring(NULL, t); + tresult = ldb_timestring(NULL, (time_t) t_val); ret = PyString_FromString(tresult); talloc_free(tresult); return ret; -- Samba Shared Repository