The branch, master has been updated via 3641978dfa88398dbc494845fe611dd87f2317b7 (commit) via 1174177c8f5851762ab0d3724df9efbdc0f34b1c (commit) via 15d73317ea90cdc02083cb132663ef198ef5e60d (commit) from 7048165e7a7849a7a97041bcffca91586f1c8fa1 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 3641978dfa88398dbc494845fe611dd87f2317b7 Author: Ricardo Jorge <rvelh...@gmail.com> Date: Tue Aug 4 00:03:04 2009 +0200 param/pyparam: Cope with string list parameters being empty. Signed-off-by: Jelmer Vernooij <jel...@samba.org> commit 1174177c8f5851762ab0d3724df9efbdc0f34b1c Author: Ricardo Jorge <rvelh...@gmail.com> Date: Tue Aug 4 00:00:25 2009 +0200 python/loadparm: Get shares listing working. Signed-off-by: Jelmer Vernooij <jel...@samba.org> commit 15d73317ea90cdc02083cb132663ef198ef5e60d Author: Jelmer Vernooij <jel...@samba.org> Date: Mon Aug 3 23:58:16 2009 +0200 pyldb: Properly keep copies of Python string contents, rather than relying on reference leaks :-) ----------------------------------------------------------------------- Summary of changes: source4/lib/ldb/pyldb.c | 30 +++++++++++++++++++++--------- source4/param/pyparam.c | 19 +++++++++++++------ 2 files changed, 34 insertions(+), 15 deletions(-) Changeset truncated at 500 lines: diff --git a/source4/lib/ldb/pyldb.c b/source4/lib/ldb/pyldb.c index c7b9b45..a05aab5 100644 --- a/source4/lib/ldb/pyldb.c +++ b/source4/lib/ldb/pyldb.c @@ -538,7 +538,8 @@ static const char **PyList_AsStringList(TALLOC_CTX *mem_ctx, PyObject *list, PyErr_Format(PyExc_TypeError, "%s should be strings", paramname); return NULL; } - ret[i] = PyString_AsString(item); + ret[i] = talloc_strndup(ret, PyString_AsString(item), + PyString_Size(item)); } ret[i] = NULL; return ret; @@ -1397,13 +1398,14 @@ struct ldb_message_element *PyObject_AsMessageElement(TALLOC_CTX *mem_ctx, me = talloc(mem_ctx, struct ldb_message_element); - me->name = attr_name; + me->name = talloc_strdup(me, attr_name); me->flags = flags; if (PyString_Check(set_obj)) { me->num_values = 1; me->values = talloc_array(me, struct ldb_val, me->num_values); me->values[0].length = PyString_Size(set_obj); - me->values[0].data = (uint8_t *)PyString_AsString(set_obj); + me->values[0].data = talloc_memdup(me, + (uint8_t *)PyString_AsString(set_obj), me->values[0].length); } else if (PySequence_Check(set_obj)) { int i; me->num_values = PySequence_Size(set_obj); @@ -1412,7 +1414,8 @@ struct ldb_message_element *PyObject_AsMessageElement(TALLOC_CTX *mem_ctx, PyObject *obj = PySequence_GetItem(set_obj, i); me->values[i].length = PyString_Size(obj); - me->values[i].data = (uint8_t *)PyString_AsString(obj); + me->values[i].data = talloc_memdup(me, + (uint8_t *)PyString_AsString(obj), me->values[i].length); } } else { talloc_free(me); @@ -1533,14 +1536,16 @@ static PyObject *py_ldb_msg_element_new(PyTypeObject *type, PyObject *args, PyOb if (PyString_Check(py_elements)) { el->num_values = 1; el->values = talloc_array(el, struct ldb_val, 1); - el->values[0].data = (uint8_t *)PyString_AsString(py_elements); el->values[0].length = PyString_Size(py_elements); + el->values[0].data = talloc_memdup(el, + (uint8_t *)PyString_AsString(py_elements), el->values[0].length); } else if (PySequence_Check(py_elements)) { el->num_values = PySequence_Size(py_elements); el->values = talloc_array(el, struct ldb_val, el->num_values); for (i = 0; i < el->num_values; i++) { PyObject *item = PySequence_GetItem(py_elements, i); - el->values[i].data = (uint8_t *)PyString_AsString(item); + el->values[i].data = talloc_memdup(el, + (uint8_t *)PyString_AsString(item), el->values[i].length); el->values[i].length = PyString_Size(item); } } else { @@ -1717,15 +1722,22 @@ static PyObject *py_ldb_msg_iter(PyLdbMessageObject *self) static int py_ldb_msg_setitem(PyLdbMessageObject *self, PyObject *name, PyObject *value) { - char *attr_name = PyString_AsString(name); + char *attr_name; + + if (!PyString_Check(name)) { + PyErr_SetNone(PyExc_TypeError); + return -1; + } + + attr_name = PyString_AsString(name); if (value == NULL) { + /* delitem */ ldb_msg_remove_attr(self->msg, attr_name); } else { - struct ldb_message_element *el = PyObject_AsMessageElement(NULL, + struct ldb_message_element *el = PyObject_AsMessageElement(self->msg, value, 0, attr_name); if (el == NULL) return -1; - talloc_steal(self->msg, el); ldb_msg_remove_attr(PyLdbMessage_AsMessage(self), attr_name); ldb_msg_add(PyLdbMessage_AsMessage(self), el, el->flags); } diff --git a/source4/param/pyparam.c b/source4/param/pyparam.c index 979182c..58799f8 100644 --- a/source4/param/pyparam.c +++ b/source4/param/pyparam.c @@ -129,7 +129,13 @@ static PyObject *py_lp_ctx_get_helper(struct loadparm_context *lp_ctx, const cha { int j; const char **strlist = *(const char ***)parm_ptr; - PyObject *pylist = PyList_New(str_list_length(strlist)); + PyObject *pylist; + + if(strlist == NULL) { + return PyList_New(0); + } + + pylist = PyList_New(str_list_length(strlist)); for (j = 0; strlist[j]; j++) PyList_SetItem(pylist, j, PyString_FromString(strlist[j])); @@ -235,13 +241,14 @@ static PyObject *py_lp_ctx_private_path(py_talloc_Object *self, PyObject *args) static PyObject *py_lp_ctx_services(py_talloc_Object *self) { struct loadparm_context *lp_ctx = PyLoadparmContext_AsLoadparmContext(self); - const char **names; PyObject *ret; int i; - names = lp_server_services(lp_ctx); - ret = PyList_New(str_list_length(names)); - for (i = 0; names[i]; i++) { - PyList_SetItem(ret, i, PyString_FromString(names[i])); + ret = PyList_New(lp_numservices(lp_ctx)); + for (i = 0; i < lp_numservices(lp_ctx); i++) { + struct loadparm_service *service = lp_servicebynum(lp_ctx, i); + if (service != NULL) { + PyList_SetItem(ret, i, PyString_FromString(lp_servicename(service))); + } } return ret; } -- Samba Shared Repository