ldb: Change some prototypes to using ldb_val instead of TDB_DATA
[sfrench/samba-autobuild/.git] / lib / ldb / pyldb.c
index b65e25525ad0aa6158b90ac1fa31b57d43715d3b..4b02edbd9d25b7eb3315d4c9a9bfefeac221ae78 100644 (file)
@@ -510,10 +510,10 @@ static PyObject *py_ldb_dn_set_extended_component(PyLdbDnObject *self, PyObject
 {
        char *name;
        int err;
-       uint8_t *value;
+       uint8_t *value = NULL;
        Py_ssize_t size = 0;
 
-       if (!PyArg_ParseTuple(args, "sz#", &name, (const char**)&value, &size))
+       if (!PyArg_ParseTuple(args, "sz#", &name, (char **)&value, &size))
                return NULL;
 
        if (value == NULL) {
@@ -1669,6 +1669,7 @@ static PyObject *py_ldb_parse_ldif(PyLdbObject *self, PyObject *args)
        PyObject *list, *ret;
        struct ldb_ldif *ldif;
        const char *s;
+       struct ldb_dn *last_dn = NULL;
 
        TALLOC_CTX *mem_ctx;
 
@@ -1686,8 +1687,29 @@ static PyObject *py_ldb_parse_ldif(PyLdbObject *self, PyObject *args)
                talloc_steal(mem_ctx, ldif);
                if (ldif) {
                        PyList_Append(list, ldb_ldif_to_pyobject(ldif));
+                       last_dn = ldif->msg->dn;
                } else {
-                       PyErr_SetString(PyExc_ValueError, "unable to parse ldif string");
+                       const char *last_dn_str = NULL;
+                       const char *err_string = NULL;
+                       if (last_dn == NULL) {
+                               PyErr_SetString(PyExc_ValueError,
+                                               "unable to parse LDIF "
+                                               "string at first chunk");
+                               talloc_free(mem_ctx);
+                               return NULL;
+                       }
+
+                       last_dn_str
+                               = ldb_dn_get_linearized(last_dn);
+
+                       err_string
+                               = talloc_asprintf(mem_ctx,
+                                                 "unable to parse ldif "
+                                                 "string AFTER %s",
+                                                 last_dn_str);
+
+                       PyErr_SetString(PyExc_ValueError,
+                                       err_string);
                        talloc_free(mem_ctx);
                        return NULL;
                }
@@ -3949,7 +3971,7 @@ static PyObject *py_register_module(PyObject *module, PyObject *args)
        if (!PyArg_ParseTuple(args, "O", &input))
                return NULL;
 
-       ops = talloc_zero(talloc_autofree_context(), struct ldb_module_ops);
+       ops = talloc_zero(NULL, struct ldb_module_ops);
        if (ops == NULL) {
                PyErr_NoMemory();
                return NULL;
@@ -3972,6 +3994,9 @@ static PyObject *py_register_module(PyObject *module, PyObject *args)
        ops->del_transaction = py_module_del_transaction;
 
        ret = ldb_register_module(ops);
+       if (ret != LDB_SUCCESS) {
+               TALLOC_FREE(ops);
+       }
 
        PyErr_LDB_ERROR_IS_ERR_RAISE(PyExc_LdbError, ret, NULL);
 
@@ -4201,6 +4226,10 @@ static PyObject* module_init(void)
        ADD_LDB_INT(FLG_NOSYNC);
        ADD_LDB_INT(FLG_RECONNECT);
        ADD_LDB_INT(FLG_NOMMAP);
+       ADD_LDB_INT(FLG_SHOW_BINARY);
+       ADD_LDB_INT(FLG_ENABLE_TRACING);
+       ADD_LDB_INT(FLG_DONT_CREATE_DB);
+
 
        /* Historical misspelling */
        PyModule_AddIntConstant(m, "ERR_ALIAS_DEREFERINCING_PROBLEM", LDB_ERR_ALIAS_DEREFERENCING_PROBLEM);