[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha8-780-g3641978

Jelmer Vernooij jelmer at samba.org
Mon Aug 3 16:19:27 MDT 2009


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 <rvelhote at 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 <jelmer at samba.org>

commit 1174177c8f5851762ab0d3724df9efbdc0f34b1c
Author: Ricardo Jorge <rvelhote at gmail.com>
Date:   Tue Aug 4 00:00:25 2009 +0200

    python/loadparm: Get shares listing working.
    
    Signed-off-by: Jelmer Vernooij <jelmer at samba.org>

commit 15d73317ea90cdc02083cb132663ef198ef5e60d
Author: Jelmer Vernooij <jelmer at 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


More information about the samba-cvs mailing list